Azit Inc.

to Developer

フルリモートチームで開発を円滑に進めるための要求仕様書の進化の変遷

  • #チーム
  • #開発
  • #プロダクト

2022.07.22

Sogame Masato

当初はオフィスで口頭ベースで情報共有していた

フルリモートになる前はコアタイムは設けていないにせよ、皆でオフィスに来て作業をして家に帰るというサイクルで日々の業務をしていました。

その頃は物理カンバンを用意して夕方デイリースタンドアップをチーム全体で実施して進捗やヘルプしてほしい事などを共有しながら進めていました。

また、PMとエンジニアの間の連携は、月曜日に前後半にわかれたスプリント計画の定例を開催し、
前半でPMからユーザーストーリーやバックログについて共有を受け、
後半でエンジニアがサブタスクに分解しながら見積を実施して、スプリントのスコープを決めてPMに共有して、物理カンバンに個別のタスクを付箋として貼っていく

というサイクルで実施し、それ以外のプロジェクトの背景等は別途別のMTGや定例等で口頭で伝える形をとっていました。
この頃は、メンバーが日々オフィスで同期的に顔をあわせる頻度がたかく、またチームメンバーもあまり変動がないチームでした。

新規事業の立ちあげにチームのミッションが変化して発生した課題

上述の口頭ベースで運用がされていたプロジェクトは、プロジェクトも開発されてから長く、チームも一定期間キープされつづけていたチームでした。

しかし、チームのプロジェクトが既存事業への改善や機能追加から新規事業のMVPファーストリリースを目ざす事に変化したために、不確実性やスコープ、仕様の変更等のリズムが従来チームが慣れていた頻度から大きく変化したために、様々な混乱が発生しました。

そのため、しっかりとプロジェクト自体への期待を周囲のステークホルダーと改めて揃え、プロジェクト全体を俯瞰で把握するための土台をつくらなければならないと感じ、インセプションデッキやユーザーストーリマッピングと共に要求仕様書として開発物のターゲットを体系的にまとめました。

その時の詳細は以下の記事にまとめてあります:

https://tech-blog.pocket7878.com/entry/20200916/1600187438

その際に、要求をどのようにして体系的にまとめるべきかを学び、要求仕様書をどう書くべきかについて以下の本をつかって勉強しました。

[改訂第2版] [入門+実践]要求を仕様化する技術・表現する技術 -仕様が書けていますか?

そして、以下のような構造でユーザーストーリー単位でビジネスの背景と実現したい細かい挙動の仕様についてまとめはじめました。

# 要求カテゴリ1
## 要求サブカテゴリ
### 要求: ○○が△△の時□□の時XXできるようにしたい
- 理由: 要求が存在するビジネス的背景・届けたい価値
仕様
- [ ] ○○の時XXボタンを表示する
- [ ] △△ページに、○○のxxx情報を表示する

業務委託中心のフルリモートチームになって

その後、さらに別の事業にチームのミッションが変化すると共に、チームメンバーも既存のメンバーから業務委託として時間帯や稼動時間がそれぞれ違うメンバー達を中心としたチームになりました。

また、社会情勢の影響もありオフィス勤務という形からフルリモートで働く形のチームへとも変化しました。
このように、既存の関係性や暗黙知が共有されていて同期的に働くメンバーというチームから、新たに会ったメンバーたちと非同期的に働くというチームへとチームの構造が大きな変化を迎えました。

そのため、チームの中での情報の共有のあり方も

  • オンラインでの共有や読みあわせがしやすいよう文書を中心とし
  • 各メンバーの稼動時間の違いの影響が低くなるようローコンテキストに
  • メンバーのいれかわりや新規追加等による在籍期間の差があっても、情報の差が発生しづらいように後から読み返しても記録性や理解がしやすいように

という事を重視して、プロダクトチームだけでなく会社全体のナレッジを文章を中心として透明性高く管理するようになりました。

プロジェクトの目的や背景の文書化・明確化

要求仕様書のレベルでも、個別の機能のWhy, Whatだけではなくプロジェクト単位での事業上の意義やユーザーへの価値提供を伝えられるように明記するようにしました。

また、よりオーナーシップをもって開発を進められるようにするためには、決定した形だけでなく「なぜ他の形ではないのか」についても情報に簡単にアクセスできるようにする事が重要であると考え
要求分析の元となった議事録等についてもセクションとして追加し文書から参照しやすいように改善しました。
その後、現時点で開発中や分析中・検討中のものもふくめて、45個ほどプロジェクト要求仕様書を積みかさねてきて段階的に改善をしてきました。

Notionに積みかさねてきている要求仕様書 (プロジェクト毎にプロジェクトのテーマにそったアイコンを付けるのを密かに楽しんでいます)

実装方針の議論や認識擦りあわせ

実装方法についての認識を揃える

上述のように段階的に「要求」という観点から明確化してきた文書ですが、
実際にそれを実体化してユーザーに価値を届けるためには、それをソフトウェア上に実装する必要があります。

そして、ソフトウェア上に実装するという事自体もメンバー間での情報共有や認識の共有等も必要で複雑で難しい事です。
当初は要求仕様書の目的で共有していましたが、しだいに開発メンバーが要求仕様書の色々なところに開発中に検討している事や検討すべき事などについて「開発メモ」のような物を自主的に追加しはじめてくれていました。

そのように実装についても情報が共有されるようになった事で、開発メンバー間での開発に関する情報共有が成されるようになった一方で、
文書としてのパターンや構造がなくなってしまい、長期的な文書としての記録性については下ってしまったと感じました。

そのため、そのような情報を正式に構造として文書に組み込みたいと考え、実装設計というセクションを設けました。
また、このタイミングで要求仕様だけでなく実装設計等も含めて体系的に記載する文書であるという観点で名称をDesign Docに変更しました。

また、開発の実装方針等の「議論の過程」については議事録の一種であると考え、文書中に都度走り書きする形式ではなく、別の文書に書いておきリンクしておくようにしました。

そして、実装設計のセクションに議論を経てのAPIエンドポイントの設計やモデルに対する変化を記載するようになりました。
この記載が、JIRAのカンバンで管理するようになった開発のタスクの元となりチームでの作業の分担の土台となるようにしました。

課題: 実装と対応する要求仕様の関連を時間が立つと見失うよう事が発生した

最初はPMが主に責任を持つ要求仕様のセクションと開発チームが責任を持つ実装設計は別のセクションにしていました

1 要求仕様
1-a ○○としてXXしたい
1-a-1 理由
1-a-2 仕様
2 実装設計
2-1 モデル
2-1-a [ActiveRecord, 新規] FooBar
2-2 API
2-2-a GET /foo/bar/baz

しかし、こうした事によってプロジェクト開始から時間がたつと「この実装設計はどの要求の実現のためにつかうやつなのか」という認識の齟齬が発生発生し、実装方針のミスや、レビュー時の負担が増えました。

責任を持って内容を管理するセクションを分けるという事と、実際に正しい実装を通してユーザーに価値が早く届くという事では、当然後者の事が大切です。

そのため、セクション設計を変更し

  1. 背景
  2. モデリング
    1. システム関連図
    2. ユースケース図
    3. ドメインモデル図&オブジェクト図
    4. オブジェクト図
    5. ドメインモデル図
  3. 要求仕様書
    1. ○○としてXXしたい
    2. 理由
    3. 仕様
    4. 実装設計
  4. 4. 議事録・開発メモ

と、実装設計を各ユーザーストーリーのセクションの中に配置する事とし、実装社もレビュワーもどの要件がどのように実現されようとしているのか(いたのか)という把握がしやすいように改善しました。

事業ドメインが複雑になって要求も複雑になった

その後、様々なクライアントからのニーズを把握し重要な価値提供をするために機能を追加していくにつれて、プロダクトであつかう事業ドメインが段々と複雑になってきました

https://love-from.azit.co.jp/article/ddd

そのため、プロダクトに新たに追加しようとしている(もしくは既存の機能を変化させようとしている)部分がどのような立ち位置やユースケースを事業ドメイン上持つのかという事を要求分析の段階から意識する必要があると共に、チームメンバーとも意識を共有する必要があります。
そのため、sudoモデリングの図についてもDesign Docに乗せ、現在は以下のようなセクション構造になっています。

一つ一つのセクションや構造について追加する意義を考えながら段階的に改善する

このように、Azitのプロダクトチームでプロジェクトの情報共有をするための文書は、直面した課題に対してアプローチするために段階的に育ててきました。
他社で同様にDesignDocと呼ばれている文書の中にはまだ、今現在の弊社のDesignDocには設置されていないセクションもあります。
もちろん、他社のテンプレートをそのまま持ってくるという方法もあるとおもいますが、チームの中でただ盲目的に「セクションに内容を書くという事になっているからとりあず書く」というような文書化する事自体が目的化してしまう事は避けたいと考えているため、文書の構造をすばやく改善していく事を重視し、一つ一つのセクションや構造について「なぜここにそのセクションがあるのか」をきちんと理解した状態で文書を育てていきたいと考えています。

この記事をシェアSHARE

この記事をシェアSHARE

MORE ARTICLES