役割とは
まず、一般的にリーダーやマネージャーと言われるポジションの人に求められる役割とはなんでしょうか。それは、自分が管理しているチームにおいて、アウトプットを最大化することだと思います。リードエンジニアについても同様です。自分のチームのアウトプットを最大化することが役割です。エンジニアですから、技術的なことばかりに目がいきますが、それは一つの手段にすぎません。開発現場では、技術だけでは解決できない問題がたくさんあります。それらを一つずつ解決し、最大化していかなければなりません。では、アウトプットの最大化とは具体的にどのようなことでしょうか。
期間
どの期間におけるアウトプットを最大化するのかを判断しなければなりません。例えば2ヶ月かかるプロジェクトであれば、その2ヶ月間のアウトプットを最大化することに全神経を使うべきです。ローンチ後の安定稼働しているプロダクトであれば、数年間というスパンでアウトプットを最大化しなければなりません。
つまり、アウトプットする期間を決めなければ、目の前の成果に注力するのか、長期的スパンで考えて目の前の成果よりもチームの育成に注力するのかを判断しなければなりません。スタンスを明確にしておくことが大切です。
方向性
何を、いつまでに、どのように作るか、その計画を立てることが重要です。技術面と経営面の両方を考えてどの機能をどういった順番でローンチしていくかなど、何をいつまでにといったところを決めるのがリードエンジニアです。短期的な計画もそうですが、中長期の計画も必要になってきます。そして、どのように作るかという判断ですが、コードの品質を担保する上でアーキテクチャの選定は重要な役割です。エンジニアとしては、この「どのように作るか」が重要視されがちですが、チームのアウトプットを最大化するという面から言うと一つの手段にすぎません。
全体量
アウトプットの全体量は、ベロシティのようなものです。システム障害のような負のアウトプットも考慮しなければなりません。アウトプットの全体量としては、メンバーの業務スキル、プロジェクトの生産性、安定性、コミュニケーションコスト、障害点などのファクターがあります。リードエンジニアは、これらについて優先順位を決めてメンバーをアサインし、アウトプットを最大化していかなければなりません。メンバーのスキルや人間性を把握したり、その人が成長していけるようにタスクを入れたりアサインを考えるなどのヒューマンマネジメントも重要な役割です。マネージャーなどの管理職と連携しながらチームを導いていかなければなりません。