こんにちは、ヤフオク!アプリ開発部の山下です。
今回は、こちらの記事「全社員フリーアドレスオフィスにおけるクリエイターの働き方」で弊社CTO藤門が紹介した8209Labsとそこで導入されている開発手法について詳しくご説明いたします。
8209Labsは20年間にわたりアジャイル開発をおこない、その実践ノウハウを提供しているPivotal Labs社に参加したクリエイターたちが、ヤフーに戻った後も同じスタイルで開発できるようPivotal Labs社と全く同じ開発環境を構築したブースになっています。
入り口にある渾身のデザインの特注のれん以外のPC、モニター、デスク、椅子は全てPivotal Labs社と全く同じものを使用しています。
8209LabsはPivotal Labsで学んだ開発手法「Lean XP」を徹底的にシャドウイングしています。Lean XPとはリーンソフトウェア開発とアジャイル開発の一種であるエクストリームプログラミングを組み合わせた開発手法です。
それではさっそく8209Labsの開発手法を見てみましょう。
8209Labsの開発チームはプロダクトマネージャー、エンジニア、デザイナーの三つの役割があります。
プロダクトマネージャー
例としてiOS版ヤフオク!アプリの商品詳細画面の開発を担当した場合を考えてみましょう。
まずは商品詳細画面の開発を複数のエンジニアで分担するためにタスクとして分割しなければならないのですが、皆さんならどう分割しますか?
ここではプロダクトマネージャーがユーザーに見える機能の単位で細かく切り分け、その一つ一つはストーリーと呼ばれていてユーザーに価値があるもの順に並べられています。
画像の赤枠の要素に各々に複数のストーリーがあり、「残り時間」パーツのストーリーだけでも16個のストーリーがあるほど細い粒度になっています。
ストーリーの詳細を見てみましょう、詳細はプロダクトマネージャーが実装完了後に受け入れテストをすぐ行えるよう、Gherkin書式というシステムの振る舞いを記述するための自然言語に近い書式で書かれています。詳細には実装者が迷わないようワイヤーフレームも添付されています。
エンジニアが一週間で完了できる分量だけストーリーを用意したところで、各々のストーリーに対しプロダクトマネージャーがエンジニアに各々のストーリーに対して3つの質問をします。
- このストーリーはユーザーにとってなぜ価値があるのか?
- このストーリーは大きすぎるか、それとも小さすぎるか?
- このストーリーを実現するために技術的な課題はあるか?
この質問に答えたあと各ストーリーの見積もりを始めます。
ジャンケンで工数を見積もり工数は実装の複雑さで決まり時間ではなくポイント制でやっています。
- テストに影響のない場合は0
- テストに影響があり実装が簡単な場合は1
- テストに影響があり実装のやり方は分かっているが面倒な場合は2
- テストに影響があり実装のやり方は分からず検討が付かない場合は3
これでエンジニアが実装に入るための準備が整いました。
エンジニア
8209Labsのブースでは、PCとモニターを用意してモニターにPCの映像をミラーリングし、マウス、キーボードを2台ずつ用意してどちらでも同じPCが操作できるよう接続することでペアプログラミング環境を構築しています。
エンジニアはペアを組み片方がナビゲーター、もう片方がドライバーとして役割を分担しています。
ストーリーを開始したらエンジニアはテスト駆動開発という手法で開発をしていきます。初めにナビゲーターがまず失敗するテストコードを書きます、ドライバーは失敗したテストを通すためのコードを書きます、最後にナビゲーターがリファクタリングをして1つのサイクルが完了します。そしてプロダクトマネージャーがストーリーの詳細に記載されている通りに受け入れテストを実施します。
エンジニアはストーリー毎にナビゲーターとドライバーの役割を入れ替えこの一連の開発サイクルをリズム良く繰り返していきます。
開発メンバーは自動テストを最も大事にしていて、各ペアのソースコードがマージされる度に自動テストが回る仕組みになっているのですがインテグレーションに失敗した場合は最優先で自動テストを修復します。
ペアのメンバーは毎日入れ替えているのでメンバー全員が案件の仕様を細かく知っています。
デザイナー
エンジニアがエッジケース、エラーケースを含む全ての機能の実装が終わった段階でデザイン適用のフェーズに入ります。Lean XPでのデザイン適用は実装の初期段階では変更の可能性が高くリスクが大きいので機能の実装より後回しにされます。デザイン適用時はエンジニアとデザイナーがペアになり一つ一つの要素を確認します。実装が完了したらプロダクトマネージャーとデザイナーが受け入れテストをします。
全体
Lean XPではこのようにプロダクトマネージャー、エンジニア、デザイナーが三位一体でプロジェクトを進めていきます。
最後にLean XPを導入したことによるメリットとデメリットを記載します。
メリット
- テスト駆動開発によりコード品質が格段に向上し、受け入れテスト時に発生するバグが激減し、大規模なリファクタリングが気軽にできるようになった
- ペアプログラミングによりエンジニアの技術が全体的に底上げされた
- タスクがユーザーに見える機能の単位で分割され優先度の高い順に並べられているので、できたところまでテストしたいと突然言われても即座に対応することができるし、進捗を正確に把握することができるようになった
- コミュニケーションの質が上がり量も増えたのでドキュメントを書くこととミーティングがほとんどなくなった。ドキュメントはメンバー全員が仕様、ソースコードを把握しているため書く必要がないし、ミーティングは一週間で見積もりと振り返りのみなので合計1時間半のみ
デメリット
- コードの書き方が「どうやって実装するか?」ではなく「どうやって失敗するテストコードを書くか?」と考え方が違うため慣れるまで時間がかかる
- ペアプログラミングとどこでも働けることができるヤフーの社内制度「どこでもオフィス」との相性が非常に悪い
- 同時に複数の案件を持つことができない
- 全員同席とコミュニケーションが基本のためオフショア開発はできない
- プライベートな時間が一切なくマイペースで働くことができない
最後に
8209Labsで実践されているLean XPはルールが厳格ですが、日本で得意としているチームワークの力を最大限に高め個人ではなくチームで結果を出す開発手法です。
今後さまざまなプロジェクトをLean XPで開発していくのでアウトプットをいくつか出すことができれば他の開発手法と比べて開発速度や品質がどう変化したのかが見えるはずです。
そのときはまた記事を執筆しようと思うのでお楽しみにください。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました