自分が入らなくてもうまく回っていて安心して案件を任せられるな、という良いチームの定義について考えてみた。
チームになっていること
チーム内で助け合う風土やコミュニケーションが十分にできていること。
朝会など頻度の高いコミュニケーションを行っていたり、技術的な議論やドメインの共有ができていること。
技術云々の前にこれができていないと、チームで物事を進めれず、生産性・開発物の質とスピードが圧倒的に落ちてしまうのでなかなか厳しい。
技術基盤ができていること
アプリケーションのコード基盤、CI/CDやローカル開発環境、コンテナやIaCなど変更に強いインフラ基盤、監視・アラートなどなど、最低限の基盤ができていること。アプリケーションコードのテストを書く習慣があること。
あるいはこれからできる素養があり、技術的に強いメンバーが参画したり、チームとして基盤技術をキャッチアップして現実に適用する能力があること。
プロダクトエンジニアリングで価値を出していくには一定以上の技術基盤は必要。 質とスピードに直結するし、オブザーバビリティ・セキュリティ・パフォーマンスなどは安定して運用するうえで重要。 チーム外のシニアエンジニアに一時的に手を借りて技術基盤を作ってもらったとしても、 その技術基盤に対してオーナーシップを持って積極的に保守・運用・改善を行うことが大事。
チーム外の有識者に適切なコミュニケーション・相談ができること
チームの経験不足を補う手段としてチーム外の有識者に適切なコミュニケーション・相談ができること。 また、技術者だけではなく、ビジネスのステークホルダーとのコミュニケーションが円滑にできていること。
ビジネスを回していくうえで、技術者・非技術者問わずステークホルダーと適切にコミュニュケーションするスキルは大事。 または、フォローしやすい体制を整えていくことも大事。
良いチームは誰が作るか
良いチームは「チームメンバーが作る」側面もあるが、そうなるように適切にフォローする・しやすい体制を整えるのが大事。
- 技術共有・ドメイン共有の仕組みを最初に整備してリーディングする。
- 技術基盤を整えるのにシニアエンジニアが一時的にお手伝いする。
- コミュニケーションのフックを作りやすいように1on1を設定してあげる。
などなど。