皆さんこんにちは、飯田橋のブリこと技術1課の中村です。
引っ越しして都民になってから早くも半年が経ちそうです。
引っ越し先には最低限のものしか持って行ってなかったのですが、最近羽毛布団を買いました。
毛布一枚から毛布+羽毛布団にパワーアップしたことで、ぬくぬくしながら寝られるようにはなったのですが、朝布団から中々出られなくなってしまいました…。
というわけで、今日は工数のお話です。
本題
皆さん、工数管理してますか?
工数とは、一般的には「ある作業に費やした作業時間」のことで、サーバーワークスでは案件毎にエンジニアがかけた工数を集計し、各案件の利益率を可視化しています。
また、工数は案件だけではなく、今書いているブログを書く時間や、社内会議を行っている時間についても管理をしています。
これにより、社員が働いた時間の有償稼働と無償稼働の割合も可視化することができます。
…と、ここまではわりと一般的な話かもしれません。
では、工数の時間はどのように計測していますか?
時間の計測の仕方は人それぞれだとは思うのですが、思いついた方法を何種類か書き出してみます。
1. ざっくり派
「今日はXXXのタスクに大体1時間使ったかな〜」って感じの人。
恥ずかしながらわたしはつい最近までこのタイプでした。
2. カレンダーに入れる派
Googleカレンダーの予定に、タスクをやる時間を予定として入力するタイプの人。
割り込みタスクや、すごく細かいタスク(5分程度で終わるタスク)に弱いような気がします。
3. Toggl等の時間管理サービスを使う
時間管理用のサービスを使うタイプの人。
目的に合わせて設計されているサービスは使いやすいですね。いい感じにグラフを出してくれたりします。
4. メモる
やり始めた時間をメモるタイプの人。
社内では見たことないですが、これも管理方法のひとつですね。
本題の本題
というわけで本題の本題です。
今回は、SlackとHubot(ブリ)で簡単に工数の時間計測ができる仕組みを作ってみました。
飯田橋のブリについて知らない方はこちらの記事を御覧ください。
工数管理ブリの仕組み
それでは、今回作成した工数管理ブリの説明です。まずは図を御覧ください。
使い方はとっても簡単、「タスクを始める」、「各タスクにかけた時間を集計する」の2パターンです。
1. タスクを始める
タスクを始めるには、ブリにHTTPリクエストを投げます。「https://www.yyy.zzz/job?q=task_a」のようなリクエストを投げると、ブリがSlackに「[Job]」というPrefixを付けてSlackに投稿します。
タスクを始めるのはこれだけです。
ちなみに、HTTPリクエストを投げる際は、AlfredのWebサーチ機能を使用するとタスクを始めるたびにSlackを開かなくて良いのでとても便利です。
2. 各タスクにかけた時間を集計する
各タスクにかけた時間を集計するには、ブリに「@buri: 集計して」と言うだけです。
すると、図にもある通りブリがSlackのメッセージ履歴を収集し、[Job] で始まるメッセージのみを抜き出します。
そして、抜き出されたメッセージのタイムスタンプの差を見て、各タスクにかけた時間を集計します。
タスクにかけた時間は、[Job] task_aの投稿が行われてから、[Job] task_bの投稿が行われるまでの時間が、[Job] task_aにかけた時間とみなして算出します。
以上が使い方の紹介です。ブリを使った工数の管理の仕方は以下の様な感じになります。
- 業務中はタスクを始める(切り替える)時に都度HTTPリクエストを投げる。
- 1日が終わったら、ブリに集計してもらう。
では、実際に使ってみましょう!
実際にやってみた
わたしの一日を記録してみました。(Slackの投稿時間について突っ込んではいけません)
まずは…
朝会ですね。技術1課の朝は朝会から始まります。
続いて、X社のタスクを始めました。
続いて、Y社のタスク…。
トイレですね。生理現象なので、仕方がないことです。
トイレから戻り、Z社のタスクを始めました。今日は目の回るような忙しい日です。
XX時間経過…
一日が終わりました。
ブリに頼んで集計してもらいましょう!
集計結果がでました!今日がいかに忙しい日だったかが手に取るようにわかりますね。
各タスクに絵文字がついていて、たいへんよくできましたの絵文字が有償稼働、札束に羽がついているのが無償稼働を表しています。
円グラフも出力されるので、どのようなタスクにどれくらい時間を割いているかがすぐにわかります!ブリすごい!
まとめ
というわけで、Slackでらくらく工数管理をしてみた話のまとめです。
既に他の社内メンバーにもこのシステムを使ってもらっているのですが、以下の様な感想を聞くことができました。
- Alfred等のランチャーで簡単にタスクを切り替えられるのでとても便利
- 秒単位で各タスクにかけた時間が集計されるので、ちょっと楽しい
- 意外とトイレにいる時間が長い
- 工数が正確に付けられるようになった
また、わたし個人としては、以下の様なことを思いました。
- DBを持たずにデータは全てSlackから取ってきているので、構成がシンプル
- チームメンバーのJobを見ることで、各々が今何やっているかがわかる
ブリによる工数管理を取り入れて2週間ほどですが、今のところいいことだらけです!
SlackとHubotだけで簡単につくれますので、Slackをお使いの方はぜひ取り入れてみてはいかがでしょうか!
おまけ
最後まで読んでいただきまして、ありがとうございます。
最後に、おまけコンテンツを置いておきます。
作ろうと思ったきっかけは?
作ろうと思ったきっかけは、この記事でした。
Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ 〜 Problemが10分で解決するチャットを作ろう
この記事が投稿されてから間もなく、弊社のSlackもtimes-channelが乱立しました。
もちろん私もtimesチャンネルを作り、仕事内容をつらつら書いていたのですが、その時に「このつぶやきを集計すれば、各タスクにかけた時間がわかるんじゃね?」と思ったのがこのシステムを作ったきっかけです。
ブリの[Job]の投稿は各自のtimesチャンネルに投稿させているのですが、タスクを頻繁に切り替えているとtimesチャンネルがブリだらけになってしまう、という問題も発生してきています。
有償稼働と無償稼働ってどうやって判断してるの?
あらかじめ無償稼働キーワードを定義しておいて、各タスクが無償稼働キーワードに部分一致するかどうかで判断しています。
いざ使ってもらうと、ひとそれぞれのタスクの命名の仕方があり、無償稼働キーワード決め打ちだと正確な判断が中々できていないのが現状です。
個人毎の無償稼働キーワードを定義できるようにすれば、この問題は解決できそうです。
「[Job]のメッセージにリアクションつけたら、そのJobが無償稼働キーワードに登録される」といった機能も面白そうです。
サーバーワークスってTwitterを6時間やってても怒られないの?
業務中のSNSは少しなら大丈夫なのですが、流石に6時間は長かったようです。怒られてしまいました。今度からJob名を偽装しようと思います。