はじめての進行管理。フロントエンドエンジニアがコンポーネント専任チームを回してみた。
皆さん、こんにちは、Gaji-Labo フロントエンドエンジニアの石垣です。
Gaji-Labo はスタートアップのプロダクト支援をやっている会社で、いまの自分はあるクライアントの技術難易度が高いプロダクト開発に関わっています。
バックエンドは Rails、自分が関わっているフロントエンドは Next.js + TypeScript です。
全体で数十人規模。複数のチームにわかれている開発部門で、 Gaji-labo だけではなく様々な外部パートナーもチームメンバーになる複雑めの開発組織です。
その中にReact コンポーネントを作って各画面に組み込む専任チームがあり、自分はそのチームの進行管理を担当させてもらうことになりました。
チームを動かした経験が少ない中、抱えた5つの悩み
任せていただいたチームは、React コンポーネントの作成と組み込み専門で、プロダクト全体の進行に合わせた進行管理が必要になります。
前述の通り、チームメンバーは社外のフリーランスのエンジニアやパートナーさんも多く、稼働日や時間帯が不規則。しかも、全員フルリモートです。
- 誰にタスクをアサインする?
- タスクごとのスケジュールの伝え方やマイルストーンの引き方どうする?
- 各メンバーごとのタスクに対する進捗確認は?
- メンバーが困ったことがあるときの相談はどう受ける?
- タスクの進捗が遅れてそうな場合どうする?
コンポーネント専門のみとはいえ、チームリーダーとしての経験が少ない自分としては、日々こういった悩みに直面していました。
ただ、先に結果を書くと、この5つの悩みは解決できました。
この記事では、どの悩みをどのように解決したかを書いていってみようと思います。
試してみて効果的だったこと。
試したことはいくつかありますが、効果があったことを中心に書き出してみます。
同期コミュニケーションの場をつくった
スクラムではないのですが、同期的なコミュニケーションの時間を作るためにデイリースタンドアップ的な朝会をやってみることにしました。
前述のように、フリーランスのパートナーさんの稼働日や時間帯が不規則なので、みんなが参加できるように調整して、毎日ではなく週3回程度に絞って実施しました。
同期の時間は短く30分以内。
作業者であるエンジニアには作業に集中してもらいたいので、できるだけ時間は短く、効率的に必要な情報を得るようにしています。
ポイント
- 進捗と困りごとを共有してもらう
- 短い時間で効率的に必要な情報を得る
基本的にチーム内で同期的なコミュニケーションをする場を増やしすぎないように、この朝会だけに絞っています。
これは大変効果的で、「進捗確認」「困ったときの相談」という悩みが解決されたように思います。 非同期かつフルリモートというのは働き方としては素晴らしいのですが、やり方を間違えるとコミュニケーションのロスが生まれて非効率になってしまうことがあります。
週1〜1.5時間程度で非効率なところをなくせるのであれば必要な時間だとチームメンバーも理解してくれていると思います。
また、朝会で話したこともドキュメントに必ず進捗共有のログを残すようにしており、後から確認したり非同期コミュニケーションで使ったりもしています。
効率的な開発のためのIssue管理
タスク管理は GitHub issues とカンバンで行っていて、
- Todo
- In Progress
- In Review
- In Review(先方確認中)
- Done
上記 5レーンでシンプルに運用しています。
基本、カンバンとそれぞれの issue の中身を見ただけで作業着手でき、完了したらすぐに次の作業ができるような作りにしているのですが、以下の取り決めをしたことで「タスクを誰にアサインするか」と「タスクごとのスケジュールの伝え方」などの悩みがクリアされました。
Todo レーンにある issue をセルフアサインしてもらえるように
作業者の手が空く時間を作らないよう、やるべき作業からセルフアサインできるような取り決めをしました。 フルリモートで、なおかつ稼働している時間もそろっていないチームメンバーが、「これやりましょうか」と質問をしても、答えが返ってくるのが数時間後だったりすると効率の良い仕事はできません。そのため、誰に聞かなくてもメンバーが自律的にタスクを拾って作業に入れるようにしてあります。
issue にはラベルを付ける。
作業者がタスク(Issue)を拾う際、自分が他に担当した作業に近いものを選ぶことが多いと思いますが、 優先度高 リリース近い などの優先度をつけることで、優先順位を見て判断してもらえるようになりました。
issue に想定工数とレビュー開始期限を記載
優先順位だけではなく、いつまでに着手できていればOKか、いつまでにレビュー開始して欲しいかを記載する取り決めをしました。
作業者は目安を立てやすく、自分のような専門のPMではない進行管理者としても状況判断しやすくなりました。
issue に詳細ドキュメントへのリンクなど、情報をしっかり記載
アサインされた Issue を見るだけでは作業のための情報が足りていないということは割とあるとかと思います。
Issueの整備がされなくなって荒れていくと、要件とズレた実装をして手戻りが発生するので、手間はかかっても近道であると信じてコツコツIssueに詳細を記載するような整備をしています。専門のPMからすれば「こんなのは当たり前」と言われそうですが…
また、詳細ドキュメントを読み込むのは作業者にお任せしていますが、齟齬が起きないように朝会の中で要件をざっと共有する機会も作っています。
(朝会では共有だけで、実際の疑問点解消はIssueの中で非同期にやっています)
どのように運用しているか、取り決めをしても共有されていないと機能しませんので、チームに新しい人が入ってきたときには念入りなオンボーディングをするようにしています。
ともかく連携・共有。
自分に任されたチームの調整だけではなく、しっかり開発組織の全体を見て「誠実な調整」をすることこそがGaji-Laboの提供する支援だと思います。
「タスクの進捗が遅れてそうな場合どうする」という悩みをクリアするためにやったのは以下のような調整や報告です。
- 他のチームや全体に影響する遅れが発生する場合は、すぐにアラートを上げる。
- コンポーネント専任チームは、他のフロントエンドチームやデザイン、バックエンドに対して確認することが多い仕事です。
わからないことが発生してから確認するのではなく、できるだけ事前に確認する内容をまとめて他チームの負担を下げることを意識しました。 - すぐに確認した方が良いことは、粒度を問わず発生した瞬間に確認して、定例会議などを待たずに確認しています。 ここをしっかりやれば信頼を得られて諸々スムーズになるので、進行管理の一番大事な点だと感じます。
他にもやったこと
- 定期的なKPT(振り返り)。個々人が抱えているもやもやの可視化。
- 朝会やKPTだけではなく、細かな問題を日々取りこぼさないように気をつける。
- パートナーさんに考えなくていいことを考えさせたり、その人の職責ではないことをさせる時間をなくす。
- アサインしたタスクは主体性をもって確認・進行をしてもらう。
この取り組みは自分ひとりで考えたものではなく、悩みながら Gaji-Labo 社内でも相談し、具体的な解決策を提示してもらったり、考え方のヒントをもらいながら試行してきたものです。
Gaji-Laboのスタートアップ支援は「頭数ではなく、チームワークを提供する」を大切にしているのですが、特に「チームメンバーのパフォーマンスを最大化する」ということに重点を置いてGaji-Labo社内から色々なアドバイスをもらえました。
各作業者がタスクをぶん回せるようにサポートすればチームのパフォーマンスは上がるし、最終的にプロジェクト全体が前に進むと実感しています。
結果、どうなったか?
結論、あんなに苦しんで悩んでいたことは、ほぼ解決してチームでの開発は今のところきれいに回っています。
なにより、取り決めに対して柔軟に対応してくれた外部パートナーを含むチームメンバーや任せてくださったクライアントの協力の賜物ですが、そのおかげでチームメンバーが元気に活躍するようになり、クライアントのプロダクトに貢献できています。
開発組織の他チームとの連携もでき、プロダクトオーナー(クライアント)からの信頼も得られていると感じます。
チームを回すだけで精一杯ではありますが、もっと効率よく稼働率を上げて、チームメンバーがより快適にパフォーマンスを発揮できるような仕組み作り・雰囲気作りを頑張ってプロダクトの成長に貢献したいところです。
そして、まだまだ不安は尽きないですが、油断をしないことも進行管理には大事な心構えだと思っているので、この緊張感をもってこれからも頑張っていこうと思います。
Gaji-Labo は新規事業やサービス開発に取り組む、事業会社・スタートアップへの支援を行っています。
弊社では、Next.js を用いた Web アプリケーションのフロントエンド開発をリードするフロントエンドエンジニアを募集しています!さまざまなプロダクトやチームに関わりながら、一緒に成長を体験しませんか?
もちろん、一緒にお仕事をしてくださるパートナーさんも随時募集中です。まずはお気軽に声をかけてください!