Skip to content

Instantly share code, notes, and snippets.

@msroz
Last active January 9, 2019 11:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save msroz/7b114c26943b0009d3b5ff2095f7c9b3 to your computer and use it in GitHub Desktop.
Save msroz/7b114c26943b0009d3b5ff2095f7c9b3 to your computer and use it in GitHub Desktop.
Software Engineering at Google(31 Jan 2017) by Fergus Henderson

Software Engineering at Google(31 Jan 2017) by Fergus Henderson を読んでメモ

  • 英語間違え、意訳を含む... 🙇

1. Introduction

2. Software development

2.1. The Source Repository

code ownership

  • コードには少なくとも2人のオーナーが記載されている
  • オーナーがwriteアクセスを制御する
  • 誰でもコード変更可能だが、オーナーがapproveすることですべての変更レビューを保証

2.2. The Build System

2.3. Code Review

  • すべての変更は少なくとも自分意外のエンジニアにreviewされなければならない
  • 緊急時はreview前にcommitされるが、事後にreviewerが承認する必要がある

2.4. Testing

2.5. Bug tracking

2.6. Programming languages

  • 言語はC++,Java,Python,Go,JavaScriptに限定
  • 利用言語を最小化することで、言語が違うことでの障害を取り除き、再利用性やエンジニア協業をしやすくする
  • 言語間のやりとりはProtocol Buffersでやる
  • DSLとかは適宜ある

2.7. Debugging and Profiling tools

2.8. Release engineering

  • 数少ないチームにはリリースエンジニアがいる
  • メインは各チームのソフトウエアエンジニアがリリースエンジニアリング業務を行う

2.9. Launch approval

2.10. Post-mortems

  • インシデント時はPost-mortems(障害報告書のようなもの)を書く
  • タイトル/サマリ/インパクト/根本原因/タイムライン/やったこと/ やらなかったこと
  • 将来に当該インシデントをどう避けるかにフォーカスし、責任所在問題や人にはフォーカスしない
  • インパクトは定量的に書く(発生件数)

2.11. Frequent rewrites

  • 2,3年に一度コードを書き直す
  • 一見コストが大きいように見えるが、Googleのアジリティ(敏捷性)や長期的な成功のキーと考えている
  • 数年前のソフトウエアは数年前の要件に沿って設計されているので現状最適とはいえない
  • さらに、累積的に複雑性が増している
  • リライトすることで過去の重要でなくなった要件や複雑性を減らせる
  • リライトすることはNewerやチームメンバーにオーナーシップや知見を移行させることができる
  • オーナーシップは生産性の鍵
  • リライトはエンジニアのmobilityをあげる
  • モダンな技術や新手法を利用する助け(機会)になる

3. Project management

3.1. 20% time

  • 20% timeは承認なしに業務時間の20%を使っていい
  • 初期では理解されないようなアイデア、プロトタイプ作成に時間のかかるアイデアに時間を与えることができる
  • 全社のポリシーとカルチャーがあれば(=20%ルール)があることで、そのactivityがオープンになり、"よくある"コソコソ内職を避けることができる
  • 100%業務だと疲れる/燃え尽きる。少し自分のやりたいことに時間が使えると楽しい
    • 疲れたエンジニアとモチベ高いエンジニアの生産性は20%以上ある
  • 20%ルールはイノベーションカルチャーを作る
    • 楽しく実験的20%ルールをやることで相互刺激しあえる

3.2. Objectives and Key Results (OKRs)

3.3. Project approval

  • プロジェクトローンチプロセスはあるが、プロジェクトの承認/中止プロセスはない
  • 筆者は10年来Googleにいるけどどういう意思決定してるか完全には理解してない
  • チームの範囲内でエンジニアが自由にプロジェクトを動いて決まる場合もある(bottom up)
  • 経営陣やマネージャー陣から決まる場合もある(top down)

3.4. Corporate reorganizations

4. People management

4.1. Roles

Engineering Manager

  • 唯一のピープルマネジメント職
  • 他職種はピープルマネジメントしてよいが、EMは常にピープルマネジメント業務を行う
  • EMはSWE出身であることが多く、ピープルマネジメントスキルに加え必ず深い技術専門性を有する
  • テクニカルリーダーシップとピープルマネジメントは明確に区別される
  • EMは必ずしもprojectリードしない
  • projectリードはTech Leadが責務を持つ(EMかもしれないが、多くの場合はSWE)
  • Tech Leadはプロジェクトの技術的な最終決定を下す
  • EMはtech leadの選択とそのteamのパフォーマンス最大化に責務を持つ
  • キャリア開発のコーチング、支援、評価、報酬決定の一部、採用の一部に責任をもつ
  • EMは3-20人くらいをみる(多くは8-12くらい)

Software Engineer(SWE)

  • Googleソフトウエア開発の多くはSWE
  • Googleは開発とマネジメントのキャリアステップが分離されている
  • マネジメントができないと昇進できないわけではない
  • リーダーシップは求められるが、リーダーシップを発揮する箇所は多方面に渡る
  • これは、多くの組織でみられるエンジニアのキャリアの行き着く先がマネジメントでありそれを拒むということを避けられる

Research Scientist

Site Reliability Engineer(SRE)

  • SRE本を読んでね

Product Manager

  • Product Managerはユーザー代表、エンジニアリング業務のコーディネート/ クロスファンクションで協働する / バグトラック / スケジュール管理 に責務
  • 加えて、高品質プロダクトを出すためのすべてもやる
  • Product Managerはコードはかかないが、"正しく"コードを書くことを保証するためにSWEと協働する

Program Manager / Technical Program Manager

  • Product Managerと多くは似てるが、よりプロジェクト管理やプロセス/運用管理に責務をもつ
  • Technical Program Managerは上記をより技術専門性をもって業務にあたる
  • SWEとProduct Manager/Program Manager比率は4:1から30:1くらいの範囲

4.2. Facilities

4.3. Training

4.4. Transfers

4.5. Performance appraisal and rewards

5. Conclusions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment