CodeZine(コードジン)

特集ページ一覧

オーナーシップを持って開発しよう! サイボウズのWebエンジニアが開発体制の改善に乗り出した話【デブスト2021】

【A-3】一人ひとりがオーナーシップを持って開発できるチームを目指して

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2022/02/01 12:00

 サイボウズでkintoneの新機能の開発に従事してきたWebエンジニアの村田篤亮氏。フロントエンド刷新プロジェクトに携わることになったのをきっかけに、オーナーシップを持って開発するための地盤作りに乗り出した。オーナーシップを持つとはどういうことか。従来の開発体制と何が違うのか。村田氏はこれまでの自分を振り返りながら、同取り組みの意義のほか、取り組みを実践して得られた効果について、Developers Boostの講演で語った。

目次

フロントエンドの技術刷新と同時に開発体制を再構築

 導入事例2万社を超えるサイボウズの主力製品「kintone」は、人事や労務、営業など、開発の知識がない現場の人たちでも業務に合ったシステムを作ることができるクラウドサービス。そのkintoneでは現在、フロントエンドを刷新するプロジェクトが進んでいる。10年以上前からフロントエンド開発で使用してきたClosure Toolsを、Reactを始めとした技術スタックに移行するという内容だ。

 このプロジェクトでは技術的な刷新と同時に組織の再構築を進めている。村田氏が目指しているのは「開発者一人ひとりがオーナーシップを持って開発できるチーム作り」だ。

 オーナーシップを持つ人とは、どんな人か。同プロジェクトに携わるkintone開発チームのWebエンジニア、村田氏は、「当事者意識を持って物事に取り組んでいる」「責任感を持っている」「自分の能力を客観的に評価できる」「周囲に助けを求めることができる」人のことを指すと定義する。

 その村田氏はこれまでオーナーシップを持つことなく開発していたと、「Developers Boost」の講演で振り返る。

 「当時は開発チームのエンジニアが3〜5名ほどのチームに分かれて、プロジェクトマネージャーと密にコミュニケーションを取りながら製品を開発していた。顧客理解度の高いプロダクトマネージャーが開発する機能の優先度を決め、エンジニアは優先度の高い順に機能を開発していた。顧客が求めている機能を確実に届けることができていたため、ここ数年間のkintoneは魅力的なアップデートを施すことができている。多くの人たちが知恵を出し合い協力したことで、魅力的な機能を提供できるようになった。一方で、開発チームへの認知負荷は年々増加していた。kintoneは開発が始まってから10年以上経過したアプリケーションで、全体を理解するには多くの時間を要する。しかし、開発チーム全体のミッションに基づき割り振られたタスクを何でもこなさなければならなかったため、常にアプリケーション全体を見る必要があった。そのため、チームの強みを持つことや、発揮することが難しいと感じていた。また、1つの機能を開発するにしても、その意思決定がチーム全体に及ぶため、チームメンバー全員に合意をとる必要があった。人にもよるが、自分はメンバー全員に合意をとる負担が大きく、提案を躊躇ってしまうこともあった」(村田氏)

 挑戦することへのハードルが高いと感じる日々が続き、気づけば村田氏は言われたことだけ取り組むようになった。徐々に自分で考えることを放棄するようになったという。

 「このままではダメだ」と自身の現状に危機感を覚えた村田氏は、開発体制の改善を提案し、同じような問題意識を抱えているメンバーと議論を重ねた。その結果。フロントエンド刷新プロジェクトから体制を立て直すことが決まった。

 既存の開発体制の課題は2つある。1つは、各チームの担当範囲が不明確で、チームごとの強みを発揮しにくくなっていたことだ。チームの担当範囲が不明確な状態で優先度の高い順に流れ作業的にタスクに着手していたため、常にアプリケーションの全体を把握する必要があり、チームの認知負荷が大きくなっていた。もう1つは、1つの意思決定がチーム全体に及んでしまうことだ。物事を進めるにはチームメンバー全員の合意を得る必要があり、能動的に動くことへの心理的な足かせになっていた。

 村田氏を含むフロントエンド刷新プロジェクトのメンバーは、これら課題を解決するには、開発チームに自治権や自主性を持たせるような体制に再構築する必要があると考えた。

 ポイントは、チームやアプリケーション単位でタスクを分割して影響範囲を明確化し、決定に対するスコープを小さくして、個人が挑戦する際のハードルを下げること。これを実現するために、2つの取り組みが行われた。

 1つは、それぞれのチームが自分たちで意思決定できる体制作りだ。

 新しい体制では、6名以下推奨、10名以下必須の職能横断チームを複数作り、開発チーム全体のミッションにつながるミッションおよび、ミッション達成に必要なタスクはそれぞれのチームが考える。チームの担当範囲を明確にして、チーム内のコミュニケーションは密に、チーム間のコミュニケーションをある程度制限することで、チームの独立性を高め、チーム内で意思決定して開発を進められる体制にする。

それぞれのチームで意思決定できる体制を構築する
それぞれのチームで意思決定できる体制を構築する

 もう1つの取り組みは、チームそれぞれが開発の独立性を保てるよう、アプリケーションに境界を設けることだ。

 「具体的には、複数のパッケージを共通のリポジトリで管理するMonorepoを活用している。例えば、team1が管理しているディレクトリの中にkintone-rteというモジュールがある場合、team1がkintone-rteの開発に責任を持つことになる。これをteam2が管理しているディレクトリの中で使用したい場合は、team1がkintone-rteをnpm registryなどにアップロードし、 team2はkintone-rteをnpm registry経由で利用したいバージョンを指定して使う。この方法であれば、team1がkintone-rteに新しい変更を加えたとしても、team2がバージョンを上げなければteam1の変更がteam2に影響することはない。チームが責任を持って開発しているパッケージが他のチームの開発に影響しないようにすることが狙いだ。チームそれぞれが開発において独立性を担保できるので、技術的な挑戦、意思決定がしやすい環境になる」(村田氏)


関連リンク

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:【デブスト2021】セッションレポート

著者プロフィール

  • 谷崎 朋子(タニザキ トモコ)

     エンタープライズIT向け雑誌の編集を経てフリーランスに。IT系ニュースサイトを中心に記事を執筆。セキュリティ、DevOpsあたりが最近は多めですが、基本は雑食。テクノロジーを楽しいエクスペリエンスに変えるような話が好きです。

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5