この記事は「Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス」という本の1つの章を読んでの感想になります。
本書を読んだ中で特に「エンジニアリングの生産性の計測」という章について読みました。
翻訳本であり、そもそも高度な組織と内容を扱うため、わかりにくい部分がある本のため、
自分が理解した概要とキーワードなどを抜き出して記録しておきたいと思います。
この章の概要は、 エンジニアリングの生産性を計測することの意義とその手段 について、
コードのリーダビリティ(読みやすさ)を改善することを例に、 その計測手法 を紹介するものでした。
エンジニアリングの生産性を計測する
エンジニアリングの生産性を計測することについて次のような内容と理解しました。
ビジネス拡大を考える際、組織の規模が大きくなるとコミュニケーションコストが増大し、ビジネスの対象範囲をスケールアップすることは難しい。
そのため、 エンジニアの生産性向上 を通じてビジネスを拡大する方が良いが、その際にも人的コストがかかる。
単に生産性を改善するだけでなく、効率的に改善することが重要。
そこで、エンジニアリングの生産性の計測をすることによって、データによる裏付けを行いながら改善する。
エンジニアリングの生産性向上の計測手法について
生産性向上の施策として「コードのリーダビリティを改善」する場合、
この施策の計測手法についてはいくつかの観点が紹介されました。
トリアージ:そもそも計測するほどの価値があるか?
計測できる部分は多いが何を計測すべきなのか?
その計測が改善の行動の結果を判断でき、次の行動に繋げられるものでないと
計測自体の価値がないかもしれないとありました。
GSMフレームワーク
ゴール、シグナル、メトリクスの頭文字をとった名称。
・ゴール:望ましい最終結果
・シグナル:最終的な結果を達成したことを知る方法(それ自体は計測できない可能性もある)
・メトリクス:シグナルの代用品(実際に計測可能なもの)
これは目標に対する達成指標を決める際に大事なステップであると思いました。
ありがちな失敗として、計測しやすい指標だけを集めて、そこから結論に紐付けようとしてしまいがちですが、
このフレームワークに従ってゴール、シグナル、メトリクスを繋いで示しておくことで、
ゴールから外れないようになると思いました。
また、メトリクスについては定性的なものであっても、複数の指標を持って継続的に観察することでおおまかには外れない指標になるという考え方が紹介されていました。(アンケートのようなもの)
街灯効果
計測しやすいものを採用してしまうことで、本来の目的にふさわしくない指標となってしまうこと。
本書では、コードの品質を探る際のコード行数などが指標にはなり得ないことをなどを例示。
夜道で鍵を落として探そうとする際に、街灯で照らされている箇所だけを探してしまうと
正しい場所を探していることにはならないという例から。
GSMフレームワークはゴールから辿ることができるため、街灯効果になりにくい。
生産性の5つの中心要素(QUANTS)
・コード品質(Quality of the code)
・エンジニアの注意(Attention from engineers)
・知的複雑性(Intellectual complexity)
・テンポと速度(Tempo and velocity)
・満足(Satisfaction)
ゴールの網羅性を取るために用いる指標として紹介。
たとえば極端な例として、レビュー速度を早くしたいならば「レビューを省いてしまう」などの施策が良い結果として計測してしまうなどの問題が発生しうる。
コードの品質と開発速度などトレードオフな要素を抜き出したものである。
ゴールを決めるための網羅的な観点も必要と記載されていました。
まとめ
感想として2点を得ました。
1つ目は、エンジニアリングの生産性を計測することの意義。
システムの開発現場ではさまざまな改善施策をうつことになるが、その成果を評価することは正直に言うとあまり意識されていません。
実際に効果があったのか評価をする際も様々な観点を用いることはなく、感覚的な指標になっているのが現実だと思いました。
2つ目は、GSMフレームワークは、データを裏付けてなにかの施策の効果を計測したい場合にたいへん有効だろうと思ったことです。
街灯効果(言葉そのものは今回知りましたが)になってしまい、結果としてそのゴールに近づけたのかよくわからなくなってしまうなどはよくあることと思います。
特に2点目GSMフレームワークはエンジニアリングの範囲にかかわらず、学習や自己啓発の目標設定などの場面にも使える考え方で、応用して取り込んでいきたいと思いました。
「Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス」 - オライリー
https://amzn.to/3UQpuCy