bitbank techblog

社内タスクlinterの紹介

これは ビットバンク株式会社 Advent Calendar 2020 の 9 日目の記事です。

はじめに

こんにちは、普段はサーバサイドでエンジニアしている monja です。

今日はサーバサイドに閉じない話をします。

ビットバンクで大活用! asanaとは?

ビットバンクでは2018年からタスク管理にasanaを採用しています

asanaは、とにかく気軽にタスクが作成できる所が利点です。タスクの状態も「未完」「完了」の2つとシンプル。普通、一連の作業における「状態」というのは複数ありますが、この2つの特徴により「細かくタスクを分割しよう」とうまく誘導されている感じがします。

一方で、親子関係やプロジェクト(タグのような振舞い)、カスタムフィールドなど自由に、そして拡張して使っていくこともできます。(ルールを決めないと発散してしまうくらい自由です。)

1-8

▲いかにも「TODO管理」という感じ

部をまたいで自分以外の人にタスクを振る、振り直すのもポチポチと簡単にできるので、部署間連携が必要な作業も管理できます。ビットバンクではエンジニアから管理部の方々まで全員がasanaを使い、また入社された方にもまずasanaに慣れていただくほど、asanaを全面的に活用しています。

そんな感じでasanaを活用をしていましたが、ある日思うことがありました。
「このタスク、5分でできると思ったら1時間かかったぞ…。」
「半日かかるなーと思ったら20分でできたやったー!」
そういえばこんな気持ちになることが稀によくあるような…。

正確に見積りしたくなってきた

定型作業でもそうですが、開発だと特にしづらい見積り。
でもそういえば、今まで色々なことをしてきたけど、それぞれにどれくらい時間がかかったかあまり覚えていないような。
チームでも課題感が高まってきました。

そこで、冒頭で取り上げたカスタムフィールドを使って予実管理をしてみることにしました。
カスタムフィールドはプロジェクトに紐付く概念なので、予実管理したいタスク(基本的に全部)はそのカスタムフィールドを追加したプロジェクトに紐付ける必要があります。

2-7

▲見積時間と作業時間(実際にかかった時間)をいれていく

素朴だけども、予実管理プロジェクトのタスク一覧画面で集計できたりして、とりあえずやりたいことはできるようになりました。

ただ、この記事をお読みのあなたもやったことがあるかと思います。そしてこう思ったと思います。

「これ とても だるいぞ。」

チームみんなで「見積りするにはまず実績を把握しよう」と意気込んでいても、やはり慣れていないので入力を忘れてしまう。そしてシステムはそれを咎めない。(ただの入力欄なので……。)

そもそもプロジェクトの紐付けすら忘れてしまうこともあります。そうするとフィールドも出ないので「入力しないとな〜」という気持ちをよほど強く持ってないと、すぐ忘れちゃいます。お気持ちで解決は、厳しい。

自動化でうっかりをなんとかしよう

うっかり忘れるのが度々発生していたので予実管理の企画が危うくなってきました。
そこでなんとかしてシステムに怒ってもらうことにしました。

asanaにももちろん、APIがあります。(APIドキュメントはこんな感じ)

Web画面できること、たとえばタスクをプロジェクトと紐付けたりタスクの状態を取得したりあるユーザのタスク一覧を取得したり(検索で)……一通りAPIでも可能です。

なんとnpmパッケージもあります

これは使うっきゃない! とりあえずAPIを使って、チームメンバーのタスクに関して以下の項目を確認してみることにしました:

  • 予実管理プロジェクトに紐付いているか
  • 見積時間は入力されているか
  • 完了したタスクであれば、作業時間は入力されているか

プロジェクトに紐付いてなければ紐付けて、入力されてない場合は社内Slackに通知することにしました。

ついでに、期限が未設定だったり、期限オーバーの未完了タスクがある場合にもSlackで通知することにしました。ケツタタキ機能ですね。

3-6

▲書いた人の趣味で関数型ちっくな実装となっております(一部伏字)

上記をAWS Lambdaで動くプログラムとして、平日1日3回実行するようにしました。

このようにして、社内タスクlinterが爆誕したのです。

その結果……

実際にこんな感じで動きます

うっかり時間を入力し忘れたり、プロジェクトに紐付け忘れたりすると以下のようにSlack通知が飛びます。

4-5

▲ある日の通知チャンネルの様子。雰囲気がわかるように、なるべくモリモリ引っかかっている所を選びました

このメンションは結構うっとおしく、この機能のおかげで、時間の入力忘れに気付くことができ、実際入力漏れが劇的に改善しました。

そして数ヶ月後、入力された時間を人ごとや期間ごとに可視化したり、各々が当初思っていた時間と実際にかかった時間を認識することができました🎉

5-4

▲linterが導入されて数ヶ月後に可視化したやーつ(古い)

少なくとも自分は、この取り組みで少し見積りの精度が上がった気がします。

ただ、期限ぶっちは未だにやらかします……。

6-3

▲うっ……

おわりに

この社内タスクlinterの取り組みはまだ続いています。
たとえば、asanaにはwebhookの機能もあり、これを使って「タスクが振られたら予実管理プロジェクトをすぐ紐付ける」といったことを、業務の合間を縫って進めていたりします。
(asanaにはRulesと呼ばれる自動化機能がありますが、それもプロジェクトに紐付くものであり、一方で私たちはその最初のプロジェクトへの紐付けをしてほしいのです……。)

時間管理で一番良いのは勝手に見積時間(の見積!?)や作業時間を入れてくれるところまで自動化することですが、作業時間ひとつ取ってもなかなか手法が思いつかない(しかも差し込みタスクなどエッジケースがどんどん思い付く)ので、「とりあえずできるところまでやろう」ということで、ここで紹介したような内容に落ち着いた形です。

弊社ではasanaに限らず、こんな感じでAPI叩くレベルで色々なSaaSを活用しています。
また別の機会に紹介すると思います。

それでは今回はこのあたりで。以上、monja がお送りしましたー。

Author image
About monja
expand_less