Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス
ソフトウェア開発会社としてのGoogleをテーマとし、Googleの開発チームが従う哲学、プロセスを示す書籍。
序盤の、概念・文化についてのところを読んでみた。
ソフトウェアエンジニアリングとは何か
時間と変化
寿命が短いソフトウェア、プロジェクトについては、その維持をあまり考える必要はない(使い捨て)。
しかし、Google検索、Apacheのように無限に継続すると思われるプロジェクトは、それを維持する中で長期的なアップデートが必要。
Hymmの法則
Hymmの法則:あるAPIを使用するユーザーが十分いれば、そのシステムのあらゆる観察可能な挙動に対して依存するユーザーが現れる
つまり、十分ユーザーがいれば、変更すること自体がユーザーへの大きな影響となる。(緩和はできるけど根絶はできない)
何も変更しないことを前提とするのも現実的ではない。(セキュリティパッチを適用できないと詰む)
時間とスケール
プロジェクトが持続するなかで、人的資源やコンピューティング資源はスケールしていく。
トレードオフとコスト
Googleレベルの会社だと、開発のコストに社会コスト(社会への影響)を含むことは避けられない。
上記のような観点から、持続可能なコードベースを保持していくための有用なフレームワークを提示したい。
文化
チームでうまく仕事をするには
エンジニアは、未完成の仕事を公開することを嫌がる、怖がる傾向がある(批判されたくない わかる!)
しかし、それは大きな問題である。
- 間違ってても気付けない
- 自分が消えればプロジェクトが終わる
- 人の目が多ければ多いほど、フィードバックループが得られる
隠れることはリスクが多い!
こういった効果のあるチームを作る方法:謙虚、尊敬、信頼
Google的であること:強力なリーダーシップを表象し、「謙虚、尊敬、信頼」を体現するものとして我々が求める、属性と品行のセット。
フィードバックを尊重する、現状に立ち向かう、ユーザーを第一に置く、チームを思いやる、正義を為す
結論
チームをめぐって、謙虚と信頼と尊敬に根差した健全な文化が必要。リスクを取ってときには失敗もすることが必須となる。人々がそうした失敗を受け入れるには、健全なチーム環境が存在しなければならない。
ここまで読んでみて
チーム内で個人が分断されている状況では開発・保守はうまくいかないということだと思う。これまでのプロジェクトでの経験でも感じたところ。
関係者同士でピリピリしてコミュニケーションとりづらい状況だといろいろ難しいね…。