2/19/2017

Googleでのソフトウェア・エンジニアリング (4.1)

Googleでのソフトウェア・エンジニアリング」と題する論文。

4. 人事管理


4.1. 役割

以下で詳細は説明するが、Googleはエンジニアリングとマネジメントのキャリアアップの職制を分け、テックリードの役割とマネジメントとを分け、エンジニアリング内に研究職を組み込み、プロダクト・マネージャ、プロジェクト・マネージャ、サイト信頼性エンジニア(SRE)というエンジニアをサポートしている。これらの慣習の少なくともいくつかは、Googleで開発された革新的な文化を維持するために重要と思われる。

Googleでは、エンジニアリングの中にも少数の異なる役割を持っている。各役割の中には、一連の段階でキャリアアップの可能性があり、次の段階で実績を評価して昇進(例えば給与のように報酬の改善に関連する)の可能性がある。

主な役割は次のとおり:

  • エンジニアリング・マネージャー

    このリストの中で唯一の人事管理を行う。ソフトウェア・エンジニアのような他の役割の人は人を管理することもあるが、エンジニアリング・マネージャは常に人を管理する。エンジニアリング・マネージャはしばしば元ソフトウェア・エンジニアで、必ず相当な技術的専門知識を持つ人と同じようなスキルを持っている。

    技術的リーダーシップと人事管理の間には差異がある。エンジニアリング・マネージャは、必ずしもプロジェクトを率いるわけではない。プロジェクトはエンジニアリング・マネージャなることはできるが、ソフトウェア・エンジニアであることが多いテック・リードによって率いられる。プロジェクトのテック・リードには、プロジェクトの技術的決断の最終決定権がある。

    マネージャーはテック・リードの選定、チームの実績に責任がある。彼らは指導やキャリア開発の支援を実行し、業績評価(水平評価から情報を使う、以下を参照)を行い、報酬のいくつかの側面に責任がある。彼らは採用プロセスの一部にも関与している。

    エンジニアリング・マネージャは通常3〜30人の間の範囲で直接管理するが、8〜12人が最も一般的である。

  • ソフトウェア・エンジニア (SWE)

    ソフトウェア開発を行うほとんどの人はこの役割を担っている。Googleでのソフトウェア・エンジニアの採用制約は非常に高い。群を抜いて素晴らしいソフトウェア・エンジニアだけを採用することで、他の組織を悩ます多くのソフトウェア問題は回避あるいは最小限にできる。

    Googleではエンジニアリングとマネジメントのためのキャリアアップの進路が分かれている。人の管理をソフトウェア・エンジニアが行ったり、ソフトウェア・マネージャの役割に移管することは可能だが、もっと高い段階でも人の管理は昇進の要件ではない。より高い段階で、リーダーシップを示すことが必要である。しかし、多くのタイプが提供される。例えば、非常に大きな影響があるとか、とても多くの他のエンジニアによって使われる素晴らしいソフトウェアを作るだけでも十分である。素晴らしい技術スキルを持つが、人を管理するスキルや熱意に欠ける人は、マネジメント・トラックを取る必要がない優れたキャリア・アップ・パスがまだあることを示すため、これは重要である。一部の組織では、社員が昇進のために管理職で終わることに悩んでいるが、チーム内の人事管理を無視するという問題を回避している。

  • リサーチ・サイエンティスト

    この役割の採用基準は非常に厳密で、制約は非常に高く、論文実績とコードを書く能力によって優れた研究能力を立証することが必要である。ソフトウェア・エンジニアの役割にふさわしい学術界の多くの天才たちは、Googleでのリサーチ・サインティストにふさわしくない。Googleでのほとんどの博士号を持つ人は、リサーチ・サインティストというよりソフトウェア・エンジニアである。リサーチ・サインティストは論文を含め研究成果で評価される。しかし、それと職名は別として、Googleではソフトウェア・エンジニアとリサーチ・サインティストの役割にそれほど大きな違いはない。どちらも未発表の研究を行い、論文を発表するが、 新しい製品のアイデアや新しい技術を開発することもでき、どちらもコードを書いたり製品を開発できる。Googleでのリサーチ・サインティストは、普通ソフトウェア・エンジニアと同じチームで働き、同じ製品や同じ研究に取り組んでいる。エンジニアリングの中に研究を取り込む慣習は、新しい研究を出荷中の製品の中に取り込みやすさに大きく貢献する。

  • サイト信頼性エンジニア(SRE)

    運用システムのメンテナンスは、従来のシステム管理者タイプよりもソフトウェア・エンジニアリング・チームによって行われる。しかし、SREの採用要件はソフトウェア・エンジニアリングの要件とはわずかに異なる(ソフトウェア・エンジニアリング・スキルの要件は、ネットワーキングやunixシステム内部などの他のスキルの専門知識の補償があるため、わずかに低くなっている)。SREの役割の本質と目的は、SRE本[7]の中で詳しく説明されているので、ここではこれ以上議論しない。

  • プロダクト・マネージャ

    プロダクト・マネージャは製品の管理に対して責任がある。製品利用者の代弁者として、ソフトウェア・エンジニアの仕事を調整し、ユーザに重要な機能を説き、他のチームと調整し、バグを追跡して予定を決め、高品質の製品を生産するために必要なすべてを保証する。プロダクトは通常、コード自体を書くのではないが、ソフトウェア・エンジニアと協力して正しいコードが書かれることを保証する。

  • プログラム・マネージャ/テクニカル・プログラム・マネージャ

    プログラム・マネジャは、製品を管理するよりプロダクト・マネージャとほぼ同じ役割を持ち、プロジェクト、プロセス、運用(例えば、データ収集)を管理する。テクニカル・プログラム・マネージャも同様だが、例えば音声データを扱う言語のような、仕事に関連する特定の技術的専門知識を必要とする。

    プロダクト・マネージャとプログラム・マネージャに対するソフトウェア・エンジニアの割合は組織全体で異なるが、一般的には高く、例えば4:1から30:1の範囲である。