こんにちは。LIFULL でネイティブアプリのスペシャリストをしている菊地です。 普段は LIFULL HOME'S アプリ(iOS, Android)の開発チームで Tech Lead をしています。
今回、Tech Lead としての活動が5年目となることから、LIFULL HOME’S アプリにおける Tech Lead の事例をご紹介いたします。
ご自身のキャリアパスの一つとして Tech Lead を検討されている方、Tech Lead という役割を導入したい方々の参考になれば幸いです。
はじめに
Tech Lead とは
Tech Lead はプロダクトに携わるエンジニアチームの技術リーダーになります。
Tech Lead は数年前から浸透してきた役割ですが、会社やチームによって Tech Lead に求められるものが異なるため、明確に「これが Tech Lead」 というものはないと言われています。
Tech Lead の役割
Tech Lead の主な役割(責任範囲)として挙げられるのは以下の3つの要素になります。
- コードの品質
- チームが作るソフトウェアの品質を守る
- チームの生産性
- チームが設計・実装する上で障害となるものを事前に取り除く
- アーキテクチャ・設計
- チームに技術的なビジョンを示して、そこに導く
Tech Lead に求められるスタンス
Tech Lead に求められるスタンスなどが書かれた有名な記事がありますので、こちらも参考にしてみてください。
LIFULL HOME'S アプリの Tech Lead とは
LIFULLでは主力サービスである LIFULL HOME'S を iOSアプリ、Androidアプリとして提供しています。
iOS アプリと Android アプリそれぞれに対して専属の開発チームが存在しており、この二つのアプリを開発するチームをまとめてアプリ開発チームとして扱うことが多いです。
アプリ開発チームは以下の三つの職種から構成されています。
- 企画
- デザイナー
- エンジニア
この三つの職種から構成されている LIFULL HOME'S アプリ開発チームに対して 2016年10月に Tech Lead という役割を導入しました。
Tech Lead を導入するまで
Tech Lead を検討した理由
LIFULL HOME'S アプリ開発チームで、Tech Lead の導入を検討した理由はいくつかありますが大きな理由としては、iOS アプリ開発チームと Android アプリ開発チームに分かれているために iOS アプリと Android アプリという OS を横断した動きというものがとりにくかったということが挙げられます。
それぞれ普段の業務としては各OSのアプリの開発・運用となるため、各職種の活動範囲や責任範囲がどちらかのアプリに限定されてしまうことがあり、いくつかの課題が上がっていました。
技術的な窓口の分散
各OSアプリ開発チームのエンジニアにはリードエンジニアは存在していましたが、LIFULL HOME'S アプリとして全体をリードするエンジニアは存在していませんでした。
そのため、他部署や他職種(アプリ開発チーム内)からの問い合わせなどへ対応する際に各 OSのエンジニアがそれぞれ対応を行うため
LIFULL HOME'S アプリとしての回答に時間がかかる
共通で検討されるべきことがどちらかのプラットフォームのみで話されてしまう
といったことがありました。
サービスとしての体験の違い
各OSで開発を行う際に、影響範囲として考慮されるのが所属しているチームの担当 OS の範囲内になってしまうことがあり
LIFULL HOME'S アプリとして違う体験になってしまっていることがある
どちらかのアプリだけに存在している機能や仕様というものが増えてきた
どちらかのプラットフォームのみを利用しているユーザーには影響はないかもしれませんが、両方のプラットフォームを利用しているユーザーやプラットフォームを乗り換えたユーザーにとっては、同じサービスなのに体験が違ってきてしまうという課題がありました。
エンジニアのスキルセット
当たり前のことですが、iOS アプリエンジニアは iOS アプリ、Android アプリエンジニアは Android アプリのスキルセットを持っています。
ですが、iOS アプリと Android アプリの両方の技術についてスキルセットとして持っているエンジニアはいませんでした。
そのため、iOS アプリと Android アプリ で共通の機能開発を行う際に
どちらかの OS では実現できるが、どちらかの OS では実現できない
スケジュールの都合で、どちらかの OS が先行して機能開発を行った際に、後続の OS の事が考慮されていない API 開発や仕様調整が行われる
という課題がありました。
Tech Lead を導入した理由
アプリ開発チームとしてのリードエンジニアの必要性
これらの課題を抱えていたことにより、LIFULL HOME'S としてアプリ(iOS、Android)を成長させていく際に、アプリ(iOS、Android)共通の話や将来的な思想といった部分がまとめにくく、アプリ開発チーム全体としてのレベルをあげることが難しい状態でした。
そこで iOSアプリ開発チーム、Androidアプリ開発チームというOSを飛び越えて動ける存在として Tech Lead という役割を導入し、プロダクト全体としてチームのレベルをあげるために Tech Lead の導入を行いました。
Tech Lead を導入してから
Tech Lead として求められたこと
LIFULL HOME'S アプリの Tech Lead として求められたことは以下になります。
- プロダクトチーム全体の生産性の最大化
- 技術的負債の管理
- 設計・開発の妨げになるものの排除
- アプリとして共通のビジョンを提示すること
- OSを限定せず技術でプロダクトチームをリードすること
- エンジニア以外についても技術視点から意見を伝えて、起案段階から確度の高いものになるようにすること
- 新たな体験の提供や価値の創造
- 最新技術の調査・検証・プロトタイプ
- 最新技術をサービスに落とし込み、チームに展開する
- チームの技術に対する責任を持つ
- プロダクトが採用する技術や品質に対する責任
- エンジニアの技術に対する責任
- 技術的な最後の砦になること
- いることでチームに安心感を与えること
Tech Lead としてやってきたこと
LIFULL HOME'S アプリの Tech Lead として求められてきたことを実現するために実際にやってきたこと、気をつけてきたことは以下になります。
最新技術の調査・設計・プロトタイピング
WWDC、Google I/O などで発表される最新技術などを最新技術を使うだけではなく、アプリの機能や体験にどう落とし込むのか?を検討して、チーム(または各職種)に展開します。
時には技術資料をまとめて、時にはプロトタイプを作ったりして、職種毎にイメージしやすいように展開の仕方を変えるようにして、アプリ開発チームとしてスムーズにサービスに取り入れやすくするために様々な土台づくりをしています。
基本的には、LIFULL HOME'S アプリで提供している「かざして検索」のように事前にプロトタイピングを行った上でアプリに導入することになりますが、場合によっては LIFULL HOME'S アプリとは別アプリとして提供することもあります。別アプリとして提供した例としては Google が提供していた Tango プラットフォームでお部屋の模様替えを体験できるアプリのプロトタイピングを行い、アプリとしてリリースしたという事例もあります。
プロジェクトマネジメント
Tech Lead の本来の仕事でないのですが、アプリの共通施策や大規模な機能開発、最新技術の開発といった場合にプロジェクトマネジメントも行うことがあります。
かざして検索のプロジェクトでは全体のプロジェクトマネジメントを行いながら、Android アプリ側での実装を行うといったことも行いました。
技術的負債の管理
iOS アプリ、Android アプリの双方で抱えている負債の把握を行い、将来的なアプリのあるべき姿に向けて施策などが行われる際に合わせて負債も返却できるような提案を行って、返済できるようにしています。
いま出来ることと(負債により)出来ないことを把握して、アプリ開発チームがやりたいことをやりたいときにスムーズに行えるようにするため、障害となり得るものの排除を行っています。
エンジニアの育成
Tech Lead は Enginnering Manager でないということもよく言われていることかと思います。
エンジニアのキャリア形成や人事考課、チームの方向性の評価やキャリアについては Tech Lead の範囲ではなく、技術的な観点についての育成についてについてが Tech Lead の範囲となっています。
具体的には、コードレビューについてとなりますが、普段のやりとりや流れてくる会話の中で技術的な観点でこう考えてほしいなどの助言をしたり、エンジニアとして、他職種と関わる際に意識することでチーム全体でより良い開発ができるような助言を行なっています
アーキテクチャの設計
各OSアプリ毎に将来的に必要となるものを導入しやすい下地を作るため、アーキテクチャの選定や、影響の大きいライブラリの選定なども行っています。
Tech Lead が選定したものが導入されるというわけではなく、あくまで議論するための素案となります。最終的には各OSのアプリ開発チームと話し合った上で導入まで進めていきます。
これまで、iOS では Clean Architecture の導入、Android では Instant Apps 対応時の multi module 導入や、Dynamic Feature Module の導入なども行っており、チームとして話すための素案などをまとめてきました。
チームの生産性向上
Tech Lead はエンジニアチームの生産性の向上だけではなく、チーム全体の生産性の向上も求められています。
そのため、LIFULL HOME'S アプリ全体としての技術窓口として、企画やデザイナーと起案段階から技術的な観点で事前に相談を行なったり、ユーザーからの問い合わせなどについても把握しておいて相談がスムーズに行えるようにしたりなども行なってきました。
また、アプリ開発チームにおけるコミュニケーションのルーズボールを率先して拾って、適切なところに受け渡したり、対応を行なったりという一見地味なことも行なっています。
技術的な最後の砦になること
Tech Lead の役割として、常に安定していてチームの最後の砦のような存在になるようにするということがよく言われています。
これは言葉としては単純ではあるんですが、とても大事なことなのに難しいなと感じています。
どんな状況、どういった問題に対しても、常に落ち着いて対応をする必要があるため、それまでの状況の把握だけでなく対応するために必要な知識や情報を常にアップデートし続ける必要がありました。
私の場合は、iOS と Android の両方について Tech Lead という役割を持っているため、カバーしなければならない範囲が iOS、Android だけではなく共通で使用する API(マイクロサービスや全社的なもの含む)やそれの裏側の設計、さらには技術的な話以外でそれぞれの業界の動向などとかなり広くなってしまいます。
そのため、Tech Lead として職種間やアプリ開発チームのやりとりをスムーズにするために、技術的な観点以外にも最新の UI / UX、業界の動向やビジネス領域についてもキャッチアップをおこない続ける必要がありました。 一見関係の無いようなものであっても新しい体験を生み出す時に組み合わせられることもあるため、そういったものについてもキャッチアップをするように心がけています。
現時点でもカバーしきれていない領域があるとは思いますが、出来る限り幅広い知見を持つことで、アプリ開発チーム内で起きる問題に対して安定して対応することが出来るように、Tech Lead に聞けばなんとかなると思ってもらえることで安心感を与えるために、常に知見を増やし続けるようにしています。
まとめ
今回、LIFULL の LIFULL HOME'S アプリにおける Tech Lead の役割についてご紹介させていただきました。
既に Tech Lead のようなことをやられている方もいるかと思いますが、Tech Lead という役割を導入することによって、その方のキャリアパスが明確になったり、チームにおける窓口が明確になることで得られるメリットなどもあるかと思います。
もしあなたのチームに Tech Lead という役割がまだないのであれば、Tech Lead の導入を検討されてみてはいかがでしょうか?
LIFULLではメンバーを募集しております! カジュアル面談もありますのでご興味ある方は是非ご参加ください!