TrelloとGoogle Apps Scriptでストーリーポイント管理してた話。

ここ数日、ガッチャガッチャしてたのをようやくまとめるわけだけど。

はじまり

以前、新人若干名でアプリを作る的な話が持ち上がり、企画もゆるふわだし、いろいろ
仕様変更とか、作り直しとかいろいろありそうだなぁ。ということからカンバンとストーリーポイントを導入して、消化量から完成日を導き出そう。という流れになった。
詳しくはアジャイルとかスクラムの記事や本を見てもらえばいいのですが、
すんごいざっくり言うと、

  • カンバンはタスクの一覧表。
  • ストーリーポイントは1つ1つのタスクの難易度。と思ってください。

アプローチ

  • タスクの一覧と今週何やる?何終わったの可視化の為 Trello を導入。
  • Trello単体ではストーリーポイントを取れないのでChrome拡張を導入
  • 週辺りのストーリーポイント認識の為、Google Spread SheetとGASを導入。

詳細

Trelloについて

Trelloは視覚的に楽しいタスク管理ツールで自由度が高い一方、使い方を定義する手間がかかるツールでもあります。自分の場合は、
  • 残りのタスク
  • 今週やること
  • 今日やること
  • 今週終わったタスク
という運用にしていました。



Chrome拡張のScrum for trelloを使うと各カードのタイトルを編集する際にポイントを設定出来るようになります。タスクを追加し、見積もる際に値を入力します。


タスク管理のざっくりとした流れとしては、
  • タスクの洗い出し(追加されたタスクがあればTodoに
  • 今週(今回のイテレーション)でやるタスクを「今週」のリストに
  • 朝会で今日やるタスクのカードを「今日」のリストに移動
  • 終わったら「終了」のリストへ
  • 週の終わりに「終了」のリストのストーリーポイントを集計し、そこから終了予定日を逆算する。
  • 予定が順調ならOK、間に合わないなら、さぁ、どのタスクを削る?それとも伸ばす?絶対に終わらせなきゃいけないことはなんだ?逆にあとに回せるものはなんだ?という議論を行う。
という流れです。
コレは自分の例なので、リストやボードの扱いにはいろいろ考える余地があったなぁと感じていて、例えば、タスクの中には、やんなきゃいけないけど、今じゃない。みたいなのがあって、それがずっとTODOにいるのはだるい。ってのがあって、
  • 「必須タスク」リストと「その他タスク」リストと分けてもいいかも
  • いっそ、残タスクは別ボードにして、毎週そこからTODO格上げ、格下げみたいな議論をしてもいい。
とかあったりします。そこは各チームの雰囲気やタイミングに合わせて変えると良いかもです。

終了ストーリーポイント計算すんのだるい問題。

で、ようやくここになるんですけど、最初はストーリーポイントを手動で計算してて
まぁ、だるいよね。っていう話になったので、TrelloはAPIあるし、なんかやるかーってことになりました。(しました、自分が)
でもコレのためにサーバー用意するのも、ってことでGoogleSpreadSheet+GASの流れになりました。

アプローチ

仕組みはこうです。
  • GAS上でトレロからカード一覧を取得。
  • GASのトリガーを使って一日一回
  • カードからストーリーポイントを抽出。
  • Spreadsheetにポイントを書き込む。グラフに反映させる。
この画像はちょっとでっち上げた奴ですが、イメージはこんな感じです。

プロジェクトのステータスはここを見ればわかるようにしてあかんっぽいかも、
という場合はどうする?どうする?とするような形にしました。
ついでにslackへも投稿出来るようにしたので見忘れも防ぎます。

画像はイメージ。


で、

GASでTrello叩くライブラリを作成中です。

一応、IDを入力すれば使えますが、まだいろいろぶっ壊れる可能性があるので
ご参考程度にとどめていただけると幸い。

別記事にまとめようと思ってるんですが
  • gappsコマンドでDriveにアップロード
  • gulpで監視、es6っぽく書いてbabelifyで変換、アップロードまで
みたいなアプローチで記述してます。
(このやりかた、概ね楽なんですが、テストとか、補完とかきっついなーという部分もあり、半分半分ですねー。という感じ)

こーんな感じで使います。(下にgist表示

今回はここまで。

このブログの人気の投稿

GoとDockerのお勉強 #golang #docker

[Unity]「落ちたら消えるオブジェクト」の作り方

ISUCONにてGoの正規表現で爆死 #ISUCON #golang