背景
筆者はソフトウェア開発チームの一員として日々開発を行なっているが、ここ最近2週間毎に区切っている開発期間に実施すべき開発タスクが未達になってしまう状態が続いている。
いわゆるスプリントゴール未達成ってやつ。
この原因を探り、改善すべく施作を考える必要に迫られているのだが、改めて我々は以下のような質問に回答する術を持っておらず、今後の開発生産性向上ための正確な打ち手を打てないでいる。
- 我々の開発パフォーマンスの良いのか悪いのか?何を持ってパフォーマンス良し悪しの指標とするか?
- 我々の開発パフォーマンス・成果はチーム内外のステークホルダーの期待に添えているか?
- 我々の開発パフォーマンスの期待値設定は適切か?
- もしかしたら開発パフォーマンスが低いのではなく、スプリントゴールの設定に無理があるのではないか?
現状の開発パフォーマンスの正しい把握なしに適切な期待値設定はできない。
また、パフォーマンスの度合いを知る術もないままやれ開発進捗が悪いだのスプリントゴールが達成できていないだのとチーム内で議論をしても、議論は空中戦になってしまう。
結果としてノルマ未達の原因を探るにも、正しく原因や現状を知るためのファクトが何もないまま、根拠なき推測によってのみ仮説が立てられ、NextActionが実行される。
一度本当にあった不幸な事案として、「開発者の開発能力が足りないのでは?」という仮説が立ってしまい、対応案として開発進捗の監視(≒プレッシャー)強化と有識者による開発補助制限(各人のスキルアップのためらしい)という厳しい措置が取られ、チームの雰囲気が悪くなってしまった。
改善策実行結果何が改善されたのかを知る術はもちろんなかった。
課題
- 開発チームの開発生産性を測定する術がない。それによって、
- 一定期間にこなせるタスクを見積りにくい
- 各種ステークホルダー(PM・EM…etc)との開発スケジュールや成果物の期待合意が正確にできない
- 開発成果が期待値を下回った際の原因調査をする術がない。それによって、
- 一定以上根拠のある改善策をTryすることが難しい
- 次回以降の期待値調整を正確に行うことが難しい
- 実行した施作の効果を測定する術がない。それによって、
- 再現性のある施作ない施作の判断ができない
解決策(案)
現状、上記のような問題に対処するために、何かしら開発パフォーマンスを可視化できる指標を立て、それを測定することによって開発のパフォーマンスを継続的に測定する仕組みをつくりたい。
以下、有用メトリクス。
どうやって測るかは検討余地あり。
Four Keys の文脈
Google Cloudの記事より、以下の指標が参考になる。
- デプロイの頻度 - 組織による正常な本番環境へのリリースの頻度
- 変更のリードタイム - commit から本番環境稼働までの所要時間
- 変更障害率 - デプロイが原因で本番環境で障害が発生する割合(%)
- サービス復元時間 - 組織が本番環境での障害から回復するのにかかる時間
Space の文脈
以下の記事より、
- Satisfaction and well-being
- Performance
- Activity
- Communication and collaboration
- Efficiency and flow
開発成果やパフォーマンスを直接測るというよりかは、従業員の満足度やコラボレーションなどの度合いも図り目先の成果以外の通知含めて総合的に測定する試み。
その他参考指標
筆者の所属している開発組織でよく用いられている数値。
開発生産性そのものと、生産性に影響を与えるであろう数値の2つに分類してみた。
生産性そのものとして活用できそう(?)な数値
- デプロイ頻度
- プルリククローズ速度(プルリクリードタイム)
- コード変更頻度
- Rollbackにかかる時間
- 不具合件数
- ベロシティ
- 手戻り率
- リリースにかかる時間
- RollBackにかかる時間
- PBI/SBI 処理のリードタイム
生産性に影響を与えると考えられる数値
- コードカバレッジ
- 循環的複雑度
- PRのコメント数
- E2Eテストにかかる時間(Autify/Magicpod)
- テストカバレッジ
- CI / テスト 実行時間
- 脆弱性件数
- リクエストレイテンシー
- リクエストエラーレート
終わりに
次回以降の記事で以下について考察したい。
- Fourkeys の具体的な活用法
- Space の具体的な活用法
- その他参考指標の
- 収集方法
- 改善活動への活かし方