こんにちは! マネーフォワード クラウド横断本部のWebエンジニアの はるやま (@linnefromice) です。
現在クラウド横断本部で行っている既存サービスのリプレイスプロジェクトにおける開発チームでの開発プロセスの紹介をさせていただきたいと思います!
背景
プロジェクト発足当時は2人だったのですが、現在5人にまでメンバーが増え、そのうちの1人は海外居住者なので現在入国できておらずフルリモートで参画しています。海外居住者でないメンバーに関しては最低週1出社としていて、チームとしてはほとんどがリモートでの勤務がベースになっています。 (当たり前なことではあるのですが、)途中参画したメンバーはそれまでの経緯や意思決定をキャッチアップも必要ですし、初期メンバーはそれに対するフォローだったり、メンバー同士の相談などもなるべく低コストでスムーズにしたいです。
上記のような背景があり、仮にフルリモートだとしてもチーム開発を問題なく継続していけるためのルール/仕組みづくりを行ってきました!
その前にリモートにおけるコミュニケーション問題
エンジニア周りに限った話ではないのですが、リモート化によって、何よりコミュニケーション自体の難しさがどのチームにもあり、今もまだ話題になることが多いです。 リアルで集まっていたときのような空気感による気軽さがなくなり、直接対面して会話していたときには伝わっていたようなニュアンスも伝わらなくなり...と、他にも様々な課題があると思いますが、新規参画者においては特に顕著に起こりやすく、自分たちのチームにはグローバルメンバーもいるので、参画当初は前述のような課題がありました。
このリモートにおけるコミュニケーションの問題においては、心理的安全性の確保など必要なこと/改善できることは色々あるとは思いますが、そこへ向けた対処の1つとして利用するコミュニケーションツールに関しては明確に文章で認識を揃えています。
- ビデオコミュニケーション ... Zoom
- テキストコミュニケーション ... Scrapbox
- チャットコミュニケーション ... Slack
ビデオコミュニケーションとして利用している Zoom に関して、社内では Slack 連携 / Google Calendar 連携を行っているので、必要な時に即座に起動させることができ、必要な人ですぐに集まることができています。
参考
Scrapbox を軸にしたテキストコミュニケーションの活用
特にチームでのコミュニケーションの円滑化に貢献している工夫の1つに、Scrapbox を利用したテキストコミュニケーションがあります。 リアルでコミュニケーションを取れているときにはなかった課題感と、この課題感を解消するに至った Scrapbox を活用したテキストコミュニケーションについて、Scrapbox 自体の簡単な紹介含め、どのように日々の活動に混ぜ込んで活用できているのか紹介します。
ビデオ/チャットコミュニケーションのみだった時の課題意識
前のチームの話ですが、出社してリアルでのコミュニケーションがベースになっていたときには、"Slack のチャットコミュニケーション"と"対面でのコミュニケーション"で十分円滑に仕事を進めることができていました。ところがリモートでの業務がメインになっていくにつれ、
- Slack でのチャットコミュニケーション
- (対面の代わりの)Zoom でのビデオコミュニケーション
のみでは、たびたびコミュニケーション不足で手戻りを発生させたり、反対にコミュニケーションコストをかけた割に進捗がないという事象が発生することがありました。個人的に、
- 対面で話せていた時ほど、Zoom での会話は内容がうまく伝わらずに、より伝えること/理解してもらうことの時間がかかる
- Slack で議論が白熱したときに、スレッドが肥大化したりして、経緯も結論も把握しづらい
というような課題を感じていました。 マネーフォワードでおける自身の以前のチームであるクラウド横断本部のわり算グループでは定期MTGのコンテンツ管理やナレッジシェアのために Scrapbox を使っていた経験があったので、先述の課題を解決できるようなチャット/ビデオの間の明示的なコミュニケーションツールとして利用することを試みました。
Scrapbox を軸においたテキストコミュニケーション
そもそも Scrapbox とは、"チームのための新しい共有ノート"というコンセプトの情報共有ツールであり、
- ページ内で使用している単語をカッコで囲うだけで、ページ間のリンクやグルーピングができる
- 複数人で同時編集可能
- チームで5人同時に触れることがあるのですがとてもサクサク動きます
というような特徴があります。
参考
開発チームでは、
- 定期MTGや日報で使用するテンプレート管理/運用
- メンバーの個人ワークにおける思考整理/調査・設計記録や複数人での会話ログ管理
など多くの活動を Scrapbox を軸においたコミュニケーションを行いながら進めていて、いくつかイメージキャプチャを添付しながら実際どのように利用しているか紹介していきます。
定期MTGや日報で使用するテンプレート管理/運用
チームの定期ミーティングである Daily Scrum にて利用する情報共有のためのテンプレート管理として利用しています。DailyScrumに限らず、定期ミーティングのテンプレートはミーティングごとにコピーして、コンテンツを各々埋めるような運用をすることで、決まったフォーマット/プロセスでミーティングを実施することを担保しています。
メンバーごとの日報のテンプレートとしても利用しています。
- TODOリストのように運用し、ステータスを先頭につける
- 作業に紐づくリンク(例えば GitHub など) を配置したりして、紐づく成果物を把握しやすくする
- 悩んでいること/困っていることについても個人ノートのように扱い、思考整理に利用する
ような方式でメンバー全員が利用することで、メンバーそれぞれの状況を常にチームに公開している状態にできています。誰かがつまづいている場合には、その人のページに他メンバーが書き込むことでテキストコミュニケーションでのフォローが自然と生まれています。
また、定期ミーティングの記録と日報で日付をリンク化させることで、全メンバーの日報がリンクとしてまとめて同じ箇所に表示されることを利用し、移動/確認しやすくしています。
メンバーの個人ワークにおける思考整理/調査・設計記録や複数人での会話ログ管理
個人の思考整理、調査、設計や作業の記録においても基本的に Scrapbox のページを利用することで、チームとして意思決定の理由や経緯を文章として残すようにしています。
誰かが主体的に調査/整理したことに対して他のメンバーが自分のアイコンをつけて書き込むことでテキストベースでのフィードバック/アドバイスなどをしたり、整理したい物事に対し最初から複数人で1ページに書き込むことでお互いの思考内容をアウトプットし交換しながらまとめる、というようなアプローチを柔軟に選択してチームとしての思考整理などができています。
チームでやっているいくつかの具体的な活用方法を紹介しました。 チームに Scrapbox を軸にしたテキストコミュニケーションを組み込みいくつかの利用パターンを定めることで、ビデオ/チャットの選択肢のみだった時のコミュニケーション課題を軽減し、
- ビデオ/チャットコミュニケーションの間としてちょうどいいコミュニケーションができている
- 対面で時間抑えて同期的にやるほどではない、けど、チャットですぐ決められそうでもない、という時に Scrapbox での非同期のテキストコミュニケーションがあってよかった
- もはやこれがデフォルトの選択肢になっている
- メンバー/チームの状況が見える化され、状況把握しやすい/相互フォローしやすい状態を維持できている
- 誰かにフォローしてもらいやすくするためにも、何をしているのか、と今の断面をなるべく維持する意識を自然と持てるようになった
- ↑を考えると、自然と作業内容が文章として残せているので副産物としてログ化もできている
- リアルの時には個人が発する言葉で埋めていた部分をきちんとテキストに落とせている
- テキストベースでコミュニケーションをしようとすると、相手に伝わるかどうかというチェックを自然とするので、コミュニケーション自体の質をあげることにも寄与できている
というような実感を得られています。
スクラムベースの開発プロセス
なぜスクラムなのか
そもそもなぜ開発プロセスのベースにスクラムを選択しているかというと、現在開発チームが取り組んでいるのは既存サービスのリプレイスなのですが、
- リプレイス後のサービスに対する要求定義/要件定義
- 現稼働中サービスのデータを考慮した設計
という上流工程と並行して開発をも進めていく必要があります。そのため、開発モデルとしてはウォーターフォールではなくアジャイルを選択し、アジャイル開発ではメジャーなスクラムを選択しています。
開発プロセスの概要
先述のコミュニケーションツールを利用しながら、実施しているスクラムベースの開発プロセスの概要は以下の通りです。
- スプリント期間 ... 2week
- デイリースクラム ... 毎日夕方30分
- スプリントレビュー ... 隔週1時間
- スプリントレトロスペクティブ + スプリントプランニング ... 隔週2時間
スクラム開発におけるプロジェクト管理ツールとして ZenHub を採用しています。 ZenHub を利用することで、Github Issue ベースのタスク管理が実施できます。さらに、複数の Repository の Issue をまとめて1枚のボード上に表示することができます。
こちらが実際に利用している ZenHub のボードになります。開発している Repository に紐づく Issue が列挙され、共通の Pipeline 設定をもって各 Issue のステータスや計画に組み込まれた Sprint などが表示され、全体状況が把握できます。
参考
イベントとツールの紹介をしましたが、これらを定義した上で次に大事なのがルールの文章化です。 (リアルの場でも必要なことですが)ルールの文章化ができていないと、リモートではより安定した運営ができないことが多いです。
ZenHub に関しても、利用ルールを文章化し、どう使うかという認識をチームで揃えています。 例えばラベル管理について、
- 作業に落とし込み切れていない課題を整理するためのタスクとして Spike というラベル
- 個別のタスクを1つのユーザーストーリーとして管理できるように Epic というラベル
というように使用するラベルとユースケースの説明を定義しています。
チームのスクラム開発における ZenHub と Scrapbox の立ち位置(下記キャプチャ)と各種イベントのフローについてもルールの文章化をしており、これから実際の文章も含めて各種イベントについて紹介をしていきたいと思います。
(スクラム開発における ZenHub と Scrapbox の立ち位置)
各種イベントの運用方法と工夫
デイリースクラム
デイリースクラムでは下記をメインに実施しています。
- (先ほど紹介した Scrapbox の)日報をベースに個人の作業報告
- タスクで困っていることや学んだことも共有する
- ZenHub のボードを参照し、Sprintに組み込まれたタスクの更新ステータス確認
わざわざデイリースクラムのために日報を作成するというようなことをするのではなく、日報ページ自体を利用してメンバーがそれぞれ作業記録や作業に対する思考整理をすることで自然と終業前には日報ができているという状態になるようにしています。 ↑が当たり前になると、自然とそれぞれのメンバーが考えていることが文章になるので、チーム全員がお互いの状況を把握しやすくチームとして普段からフォローしやすい状態になります。
スプリントレビュー
スプリントレビューでは下記をメインに実施しています。
- ZenHub のボードを参照し、Sprint に組み込まれたタスクの消化状況を確認し、消化できた StoryPoint から見積もりからの進捗率の確認
- メンバーごとに issue 単位でチームにFBできる点があればこの段階で共有したりしています
- ex) estimate point から実績がズレたことの所感、予定外の課題、新しく学んだことetc
- メンバーごとに issue 単位でチームにFBできる点があればこの段階で共有したりしています
- 既存のIssue, Epic(Issue の取りまとめができる上位概念)見直しや、新規作成
- 消化した Issue や既に管理している Issue、また周囲の状況を元に改めてバックログをチームで見直します
スプリントレトロスペクティブ + スプリントプランニング
チームで特徴的なイベント運用はここかなと思っています。 スプリントレトロスペクティブとスプリントプランニングを連続で実施していて、スプリントレトロスペクティブは1.5時間くらいかけて実施することが多いです。
スプリントレトロスペクティブ
先述のキャプチャでの説明は少ないのですが、スプリントレトロスペクティブでも Scrapbox でテンプレートを準備して実施しています。
現在の大まかなフローは以下です。
- MTG前
- スプリントレビューが終わった後、メンバー個々でKPTを書き出す
- 件数の制限はなしです
- (Scrapbox 運用の共通ルールですが、)発言者として後ろに自分のアイコンを配置する
- スプリントレビューが終わった後、メンバー個々でKPTを書き出す
- MTG実施
- 簡単に記載内容共有
- 1人2票深堀したいトピックに投票
- KPTどこにあるものを選択してもOK
- 投票自体はトピックの先頭に自分のアイコンを配置することで表現する
- 各Topicに対するディスカッションをする
- 次に向けた改善案を出すことを意識し、可能な限り次週トライする具体的なTODO化を目指します
- ディスカッションのサマリや決定したTODOを共有
トピックに投票することで深掘り/議論するテーマを決める Lean Coffee の形式を採用することで、毎週の振り返りで必ず次週に向けた改善のためのTODOを設定できており、毎週の改善サイクルを回せています。 投票されたトピックに対して深掘り/議論する際には、重要な意見やチームのみんなで考えたことをそのまま Scrapbox に書き込みながら会話をすることで、意見交換しながら経緯の記録を残して最終的にTODOを設定することができています。
↓実際の活動風景を撮ってみました。
スプリントプランニング
スプリントプランニングでは翌週の Sprint に組み込むタスクの選定と見積もりを実施しています。
- 前週のベロシティを確認し、目標 StoryPoint の認識を合わせる
- Sprint に組み込む Issue の選択/アサイン/見積もり
- 1.の目標 Story Point にほぼ一致するまで下記を繰り返す
- 2-1. 各自で対応する Issue を選択する
- Issue でスコープが不明瞭だったり既に気付いている不確実性がある場合は、ここで議題にあげなるべく事前にリスクを低減させる
- 2-2. 選択された Issue に対して Planning Poker を行い、見積もりを設定する
Story Point の見積もりをする際に、ZenHub の Planning Poker の機能を利用していて、こちらを利用することで 簡単に Issue ごとのチームメンバー全員の投票リクエスト を設定することが可能です。 金曜日のうちにスプリントプランニングを実施し、翌週月曜日からの Sprint のタスクをアサイン完了した状態にすることで、翌週の最初からタスクに対して集中することができるようにしています。
まとめと感想
長文になりましたが、チーム開発を整えるためにこれまでやってきたことと工夫を紹介させていただきました。
- ビデオ/チャットに加え Scrapbox でのテキストコミュニケーション
- ZenHub でのタスク管理
- これらツールを利用した各種プロセスやイベントにおけるルールの文章化
により、リアルからリモートになったことで出てきたコミュニケーションにおける課題を解消し、リモートベースのチームでも Scrum にあわせたタスク管理を実施可能にし、チームでフルリモート可能なアジャイル開発を実践できています。 リモートベースでお仕事をしている方もそうでない方も、チームマネジメントに関して少しでも参考になることがあれば幸いです!
最後に宣伝です! クラウド横断本部では、社内基盤サービスの改善や既存サービスの技術的負債解消に取り組んでおりこれらを一緒に推進していく仲間を募集しております...!
【サーバサイドエンジニア】_東京(田町) | 株式会社マネーフォワード 【フロントエンジニア】_東京(田町) | 株式会社マネーフォワード
また今回の記事に関連して、マネーフォワード全体でもチームリードをしていただけるような仲間も募集しております...!
【エンジニアリングマネージャー】CTO室_東京(田町) | 株式会社マネーフォワード 【スクラムマスター】マネーフォワードクラウド_東京(田町) | 株式会社マネーフォワード
もし興味を持っていただければ、是非カジュアル面談でお話しさせてください! 最後までお読みいただきありがとうございました。
マネーフォワードでは、エンジニアを募集しています。 ご応募お待ちしています。
【サイトのご案内】 ■マネーフォワード採用サイト ■Wantedly ■京都開発拠点
【プロダクトのご紹介】 ■お金の見える化サービス 『マネーフォワード ME』 iPhone,iPad Android
■ビジネス向けバックオフィス向け業務効率化ソリューション 『マネーフォワード クラウド』
■だれでも貯まって増える お金の体質改善サービス 『マネーフォワード おかねせんせい』