Retty Tech Blog

実名口コミグルメサービスRettyのエンジニアによるTech Blogです。プロダクト開発にまつわるナレッジをアウトプットして、世の中がHappyになっていくようなコンテンツを発信します。

ワーキングアグリーメントからふりかえるチーム文化の成長

この記事は Retty Advent Calendar 2020 18日目の記事です。 adventar.org

はじめに

こんにちは。RettyでWebエンジニアをやっている池田です。
技術的にはバックエンド系が好きなのですが、最近CSSの楽しさにも目覚め始めました。楽しいですよね、CSS

さて、今年は新チーム編成〜チーム移籍があった年でした。
新チームになってチームビルディング的なものを意識してあれこれ取り組み、編成初期と後期でチーム文化が大きく変わったなーという経験をしました。
そこでチームのワーキングアグリーメント(Working Agreement)をふりかえりながら、どんなことに取り組んでどんな風にチーム文化が育ってきたのかをご紹介したいと思います。

ワーキングアグリーメントの導入

今年の3月に新チーム体制になり、ちょうど良いタイミングだと思ったので「チームとしての目標を決めてみてはどうか」という提案をしました。 そこからEM(Engineering Manager)の提案もありドラッカー風エクササイズ&ワーキングアグリーメント導入を実施しました。

ドラッカー風エクササイズとは以下の質問にメンバー全員が答えてチーム内の期待値をすりあわせるチームビルディング手法です。

  • 自分は何が得意なのか?
  • 自分はどういうふうに仕事をするか?
  • 自分が大切に思う価値は何か?
  • チームメンバーは自分にどんな成果を期待できるか?

なかなか答えにくい質問もありますが、この質問でお互いを知ることでチーム内のコミュニケーションがより円滑になることが期待できます。

ワーキングアグリーメントとはチームが大切だと思うことを明文化したチームの約束事です。 チームみんなで考えたルールをみんなで守ることで「チームの価値観」を共有でき、自律したチームとして動きやすくなります。

最初のワーキングアグリーメント

まずは「どんなチームになりたいか」をベースにブレインストーミング形式でルールの案をみんなで出し合いました。 そこからチームの価値観として大切にしたいものを話しあっていくつかピックアップし、最初のワーキングアグリーメントを以下に決めました。

  1. 今日終わらせるべきストーリーを朝会でみんなで確認
  2. 朝会 月火水金: 11:00 夕会 水 16:00
  3. 分からないことがあれば10分以内に質問
  4. 悩んだことは体裁関係なしにチームチャンネルに流す
  5. 会議では声を出してリアクションする
  6. 出社/リモート出社問わず勤怠(出社、ランチ、退社)状況をチームチャンネルに伝える
  7. 人が抜けた際には優先度低いストーリー持っている人が入る
  8. 着手中のストーリーがはみ出そうならチームメンションとスクラムチャンネルに共有する
  9. DMを使わずにチームメンションに質問する

スクラムチャンネル: プランナー、デザイナー、エンジニア全員が入っている業務チャンネル)

このルールに決まった背景として以下のような意見がありました。

  • 優先度の高いストーリーから順にチームで進める意識を持ちたい
    • 個人にストーリーを割り当てる意識を変えたい
  • オープンなコミュニケーションにしたい
    • チームのSlackチャンネルは気軽に質問できる場にしたい
    • DM(ダイレクトメーッセージ)だと当人たちしか見えない
  • 1人でずっと悩まないようにしたい
  • リモート主体になったのでコミュニケーションの取り方を工夫したい

Rettyでは開発体制にLeSSを採用しています。 engineer.retty.me

編成当初はチームのストーリーを個人に割り当ててその人が完遂する傾向にありました。
f:id:rettydev:20201213180914p:plain:w400

ですが、プロダクトの価値を最大化する開発をするためにはこれを脱却し、チームのストーリーはチームで完遂することができるチームになりたい、という思いが中心にありました。

第1回ワーキングアグリーメントふりかえり&見直し

スプリント毎のふりかえりだけじゃなくて1ヶ月単位ぐらいでのふりかえりもしてみたいよねという話をし、ワーキングアグリーメントの見直しも兼ねてふりかえりをすることにしました。

ここでのふりかえりはワーキングアグリーメントを上から眺めつつチームで上手くできた・良くなったと思うことを挙げ、なぜ上手くできたか・良くなったかを話すやり方にしました。 (これはAppreciative Inquiryの要素を参考に取り入れました)

このふりかえりで見直されたワーキングアグリーメントが以下です。

  1. 今日終わらせるべきストーリーを朝会でみんなで確認
  2. 朝会 月火水金: 11:00 夕会 水 16:00
  3. 分からないことがあれば10分以内に質問
  4. 悩んだことは体裁関係なしにチームチャンネルに流す(DMでのやり取りはなし)
  5. 会議では声を出してリアクションする
  6. 出社/リモート出社問わず勤怠(出社、ランチ、退社)状況をチームチャンネルに伝える
  7. ストーリー着手時に進め方の認識をチームで合わせる
  8. 着手中のストーリーがはみ出そうならチームメンションとスクラムチャンネルに共有する
  9. ワーキングアグリーメントのふりかえりを月イチで開催する

概ね内容は一緒ですが、大きく変わっているのは「人が抜けた際には優先度低いストーリー持っている人が入る」から「ストーリー着手時に進め方の認識をチームで合わせる」になったことです。

チームメンバーからは以下のような意見が出ていました。

  • 1人1ストーリーで作業を進めるのではなく、必要に応じて複数人でストーリーを進めるようになってきた
    • みんなが自分のストーリー以外の状況をざっくり把握してくれているようになった
    • フォローしやすい、してもらいやすくなった
  • チームチャンネルに何でも投稿するようにしたことで気軽に相談して解決しやすくなった
  • 複数人でストーリーを着手するようになって、以下のルールで解決したかった課題が解決できているように感じた
    • ストーリーの担当が抜けた場合は優先順位の低いストーリーを持っている人がフォローする
  • チームとしてのアウトプットを少しづつ意識できるようになってきた
    • ここを成長させてもっと良いアウトプットが出せるようになりたい
    • チーム内だけではなくチーム外へも目が向けられるようになるといいなぁ

チームでタスクを進めることは意識できるようになってきたけど進め方はまだまだ模索中、という感じでしょうか。
ストーリーが1スプリント内に終わりさえすればそれでいいのか?チームのより良いアウトプットとは何か?という疑問も出ました。

チームで進めることで常にお互いをフォローできている状態になり、「人が抜けた際には優先度低いストーリー持っている人が入る」というルールの元になっていた課題が解消されました。
そこでこのルールを削除し、チームで進めることを仕組みとして維持するために代わりに追加したルールが「ストーリー着手時に進め方の認識をチームで合わせる」です。

ストーリーにはチームで取り組む意識がある一方で、チーム外(エンジニアの別チームや他の職種のチーム)との連携となると個人で対応している印象がありました。
f:id:rettydev:20201213234202p:plain

反省はありつつも全体を通してポジティブな側面からふりかえったことで、チームメンバー各々が成長を感じることができて好評でした。ですので、定期開催するルールをワーキングアグリーメントに追加しました。

第2回ワーキングアグリーメントふりかえり&見直し

前回から約1ヶ月後に2回目のふりかえり&見直しを実施しました。やり方は前回と一緒です。
このふりかえりで見直されたワーキングアグリーメントが以下です。

  1. 今日終わらせるべきストーリーを朝会でみんなで確認
  2. 朝会 月火水金: 11:00 夕会 水 16:00
  3. 出社/リモート出社問わず勤怠(出社、ランチ、退社)状況をチームチャンネルに伝える
  4. 悩んだことは体裁関係なしにチームチャンネルに流す(DMでのやり取りはなし)
  5. 分からないことがあれば10分以内に質問
  6. 他チームとのストーリーの話にチームメンションをつける
  7. スプリントプランニング時にストーリーの内容や進め方をチームで確認する
  8. 着手時に複数人で対応方針を相談、認識を合わせる
  9. 着手中のストーリーがはみ出そうなら早めにスクラムチャンネルに共有する
  10. ワーキングアグリーメントのふりかえりを月イチで開催する

ストーリーをチームで進めるためのアクションを少し具体的に書いています。

この1ヶ月間は前回の疑問「チームのより良いアウトプットとは何か?」に対する答えの1つとして「優先順位の高いストーリーを少しでも早く終わらせる」を目指し、色々な進め方を試しました。

  • ペアプロやモブプロの導入
  • モブワークと称して色々なことを複数人で集まって進める
  • 他チームとの連携時にチームメンションをつける

チームメンバーからは以下のような意見が出ていました。

  • モブプロ、モブワーク、他チームへの働きかけ系がふりかえりでよく上がってきた1ヶ月
  • 優先順位の高いストーリーからチームで取り組むという流れは得意になってきている
  • みんなでやる方が効率が良いことを知った
    • ストーリーについて複数人知っている人がいることでより柔軟に動ける
    • 差し込みやお休みなどがあってもチームとしてそのストーリーの速度を落としにくい
    • お互いにレビューしながら進めている状態になってる
    • それぞれの得意領域の掛け合わせで仕事が進められる
  • ストーリーに対して個々人で感じている難易度のギャップを早めに知り、埋める動きが良い

複数人で取り組むことで結果的に安定して早く終わらせることができる、ということに手応えを感じています。
チーム外の連携にはチームメンションを含めて連絡することで、連絡した人以外のメンバーでも代わりに答えやすい工夫をしました。
そのために追加したルールが「他チームとのストーリーの話にチームメンションをつける」です。

また、複数人でストーリーを進めることを仕組みとして維持するために追加したルールが「着手時に複数人で対応方針を相談、認識を合わせる」です。

全体としてチームのストーリーの詳細な状況をできる限り多くのチームメンバーが知っていることを意識していました。 f:id:rettydev:20201213234040p:plain

この時期にはチームでストーリーを進めるというのにかなり慣れてきていてます。
例えば以下のような進め方ができるようになりました。

3人でストーリーを眺めて状況把握
→ 対応方針を決定
→ 実装&必要に応じて他チームに実装方針を相談

特に私の目線だと以下のような進め方になっており、これはチーム編成当初には確実にできなかった動きでした。

3人で集まって対応方針を相談
→ 自分がちょっとだけ実装してコミット
→ 別の打ち合わせで1時間ぐらい席を外す
→ 席に戻ると残りの実装が終わっていたのでみんなでレビューする

一方で1ストーリーにチーム全員が当たっているかというとそうでもなく、いくつかのストーリーを並行して進めているのが実情でした。

第3回ワーキングアグリーメントふりかえり&見直し

チームがバタバタしていてタイミングを逃し、前回から約3ヶ月後に3回目のふりかえり&見直しを実施しました。やり方は一緒です。

  1. 朝会 月火水金: 11:00 夕会 水 16:00
  2. 出社/リモート出社問わず勤怠(出社、ランチ、退社)状況をチームチャンネルに伝える
  3. 10分悩んだことは体裁関係なしにチームチャンネルに流す、またはMeet or Discord(DMでのやり取りはなし)
  4. Meet or Discordでのコミュニケーション後は議事録を残す
  5. 他チームとのストーリーの話に作業ペアの相手もメンションに含める
  6. スプリントプランニング時にストーリーの内容や懸念事項をチームで確認する
  7. 着手時に複数人で対応方針を相談、認識を合わせる
  8. チーム外に報連相を積極的に行う
  9. ワーキングアグリーメントのふりかえりを月イチで開催する

リモートワーク主体の働き方が長くなってきたこともあり、リモートでも上手くコミュニケーションを取るための方法をルールに追加しています。

チームメンバーからは以下のような意見が出ていました。

  • 必ずしもチームメンションで共有しなくても大丈夫なのかも
    • 達成したいのは「チームでタスクを進める」というやり方
    • まずはペア or モブで作業している人に伝われば良い(必要なら適宜メンション先を増やせば良い)
  • スプリントプランニングで以下を確認できると良さそう
    • ストーリーの内容
    • 懸念点
      • そもそも業務ドメイン的にわからない
      • 「◯◯の考慮しなくて大丈夫かな?」みたいなやつ
  • ステークホルダーへの連絡はもっとしても良い気がする
    • スプリント内に終わらなさそうな時だけじゃなくて、順調に進んでてもそのことを連絡してあげた方がよい

チーム全員が全てのストーリーの詳細な状況まで知らなくても良いのではないかという意見から、ストーリーに関してできる限り多くのチームメンバーが知るという方針をこのタイミングで変更しています。
チーム全員で1ストーリーに取り組む方向に舵を切ることもできたかもしれませんが、ストーリーが十分に小さければ少人数で円滑に進められるパターンも実際に増えてきたからです。

新しい方針として、以下の進め方にしました。

  • スプリントプランニングではストーリーの内容や懸念事項をチームメンバー全員が納得できるまで確認する
    • 誰がどのストーリーに対応するかわからないため概要はチーム全員がちゃんと知っておく
  • ストーリーの実際の対応は2人以上で進める

これにより作業を複数人で進めるメリットを維持しつつ、メインで進めるメンバー以外はデイリースクラム等で状況をざっくり把握している状態になりました。
ですが、ストーリーの概要はメンバー全員が知っているため、最悪何かあってもメインで進めていないメンバーがフォローできる体制になっています。 f:id:rettydev:20201213233951p:plain

これに伴い他チームとの話に「チームメンション」をつけるルールから「作業ペアの相手」をメンションに含めるルールに変わっています。

また、チームメンバーが自信を持ってストーリーを進めるためにみんなで話したいのは「細かい進め方」ではなく、「不安なこと、わからないことの解消」だね、という意見が出ました。
進め方の認識だけ合わせても、どうしてこの進め方なんだろうか、本当にこの進め方でいいんだろうか、という不安があると自信を持って進めることができないからです。

これに合わせてルールの一部を見直し、「スプリントプランニング時にストーリーの内容や懸念事項をチームで確認する」としました。
実際に着手するタイミングで細かい進め方の認識を揃えるとちょうど良いので、着手時に対応方針を確認するルールはそのままにしてあります。

この時期には優先順位の高いストーリーを少しでも早く終わらせるために、チームの動き方だけではなく技術面でのアプローチも実施するようになります。

特に意識が大きく変わったのがリファクタリングです。
これまでは今のコードにどうやって追加すれば機能を実現できるかを第一に考え、リファクタリングは余裕があれば、という立ち位置でした。
ですが、この辺りから「機能を実現するためにどんなコードが理想か、その理想と現状のギャップはどれぐらいか」を考え、必要があれば先にリファクタリングしてから機能を追加する、という動きが少しずつ出てきます。
実際にメンバーから「既存にどうやって追加するかから、後から読む人に意図が伝わる方法が何か、その為にリファクタする必要があればしよう!という思考に変えたい」という趣旨の発言があったぐらいの大きな変化です。

「ストーリーを少しでも早く終わらせるっていうのは目の前の実装を早く片付けることじゃなくてプロダクトの継続的な成長を支えるために早く終わらせることだよね」ということをチームメンバーで何度も話したり、リファクタリングをすることで機能追加のコードがシンプルになる例を実際にやってみたりしたことが変化につながったのかなと思います。

まだまだ自分たちのスピードには満足しておらず、ストーリーごとに「どうやったらもっと早く終わらせられたか」という小さいふりかえりをしたらどうか、などの案も出てきました。

ですが、この1ヶ月後にチーム編成が変わることとなり、これが私が参加した最後のワーキングアグリーメントふりかえりとなりました。

まとめ

ふりかえってみて一番の学びは「ちゃんと言葉にして向き合うことで成長できる」ということです。

チームメンバーですから、良いプロダクトを作りたい、良いアウトプットを出したいと考えて色々取り組んでくれると信頼しています。
ですが、どんな状態を目指しているかは人によって異なりますし、そのためのアプローチも人それぞれです。
この状況で良いチームを目指したいなーと何となく進めていても、メンバー全員が同じ方向を向いてチームとして成長することは難しいと思います。
ですが、「どんなチームになりたいのか」を言葉にして向き合いそれぞれ意見を出し合うことで、同じ「チームのゴール」へ向かって成長することができました。

今回はチーム文化の成長にワーキングアグリーメントがとても役に立ちました。ある時点でチームが大切だと思うことのスナップショットになっているからです。
定期的に見直すことでその差分からチームにどんな変化・成長があったのかをメンバー全員で感じることもできました。

チームが変われば状況も変わるので常に同じやり方で成長できるとは限りません。
ですが、言葉にして向き合うということはどんなチームになっても続けていこうと思います。