2024年6月21日・22日の2日間、Scrum Fest Osaka 2024が開催されました。Scrum Festはスクラムの初心者からエキスパート、ユーザー企業から開発企業、立場の異なる人々が集まる学びの場です。カンファレンスで登壇した伊山宗吉はNTTコムウェアで社内のアジャイル開発の推進、アジャイルコーチを務めており、社外向けエバンジェリスト活動も行っています。今回の講演ではアジャイル開発初心者向けに「プロダクトバックログアイテム(PBI)の改善」をテーマに考え方や取り組みを共有しました。
講演資料はこちら)※外部サイト

前提

プロダクトバックログアイテム(PBI)は、プロダクトバックログ(PBL)の構成要素であり、1つひとつのPBIにはプロダクトの要求事項や実現したいことが記述されています。PBLの全体像、ビジョンやプロダクトゴールとの整合、優先順位付けなどはとても重要な概念ですが、今回の説明では取り扱いません。あくまでPBIの部分に絞り、その改善をテーマとします。

スライド01

リリースしたらユーザーからクレームが!

実際の現場で起きた不具合を例に説明をしていきます(具体的なプロダクトや不具合は表現を変更しています)。

このゲームは、石(通貨に相当するもの)を3,000個使うことでガチャを回し、アイテムをゲットできるという仕様です。しかし、ユーザーがガチャを回そうとしたら、保有している石が2,000個しかないため、ガチャを回すには1,000個の石を購入しなければなりません。この場合、ガチャを回せるようになるまでの画面遷移は「ガチャ画面」⇒「ホーム画面」⇒「石の購入画面」⇒「ホーム画面」⇒「ガチャ画面」となっていました。

スライド02

ユーザーからこの導線が「わずらわしい」という意見がでたので、ユーザビリティ向上の観点でシンプルな導線にするためのアイデアを出しあいました。

Product Owner (PO)からは、「ガチャ画面から石を購入できるようにし、購入後にガチャ画面に戻るようにしたい。ユーザビリティが改善され、今よりも石を購入してもらいやすくなるはず。」という提案がありました。

スライド03

そして、POが以下のPBIを作成し、開発者は受入基準を明らかにして仕様を決めました。

▼PBI 「ガチャ画面に購入ボタン設置」
誰が
アプリユーザーが
何のために
ガチャを引こうとして石が不足している際に、直接「購入画面」に遷移できるように
何をしたいか
ガチャ画面に「購入」ボタンを設置
▼受入基準
  • ガチャ画面」に「購入」ボタンが設置されている
  • 購入」ボタン押下時、「購入画面」へ遷移する
  • 正常に購入後、「戻る」ボタン押下時は「ガチャ画面」に遷移する
スライド04

ここで違和感を持てるかどうか、というところが1つのポイントになります。
違和感の正体については、後述いたします。

開発者は仕様にしたがって開発を進め、ガチャ画面に購入ボタンを設置しました。ユーザーはガチャ画面からすぐに購入画面へ遷移し、戻るボタンでガチャ画面へ戻ることができるようになりました。チームはPBIの受入基準を満たすことができたので、変更内容をリリースしました。しかし、ユーザーからは「石を購入したのに、ガチャ画面では石が不足したままでガチャを回すことができない」というクレームが入りました。

スライド05

開発プロセスの問題点を探ろう!

では、この不具合の原因はどこにあったのでしょうか。

結論から先に述べると、「データの更新漏れ」がありました。従来の導線ではホーム画面からガチャ画面に遷移する際に、現在の石の所持数を更新していました。これはアプリ内部の変数を更新する処理として実装されていました。

しかし、開発者はこの更新処理の存在を把握していませんでした。新しい導線では、石の購入完了後は直接ガチャ画面へ遷移するため、新たに更新処理を実装する必要がありましたが、実装が漏れてしまったため、購入前の所持数で石が不足していると判定されてしまいました。

スライド06

実装が誤っていたことはわかりましたが、なぜこの仕様でリリースまで進んでしまったのでしょうか。

バグの混入原因は、アプリの既存機能および仕様の理解不足による実装誤りでした。では、バグの流出原因は何でしょうか。それは、ユースケース観点の試験漏れです。すなわち、石を購入後にガチャを回すまでの試験をしていなかったのです。さらに突きつめると、本来のユーザーの目的や後続操作の考慮不足があったと言えます。

スライド07

全体を俯瞰してみると、開発プロセスの問題点が見えてきます。まず、PBIを作成する段階で目的や確認範囲の認識ずれがあったと考えられます。さらには既存の仕様認識誤りや考慮漏れ、試験観点やレビュールールの不足などが問題点として挙げられます。

今回はこの事例をもとに、目的や確認範囲の認識ずれを防止することに焦点をあてて、PBIの改善を紹介します。

PBIの問題点とは?

さて、PBIの受入基準確認のプロセスまで戻って、問題点を検証してみましょう。

スライド08

この事例のPBIでは、目的にあたる「何のために(Why)」が「購入画面へ遷移できること」になっています。そして、「何をしたいか(What)」が「購入ボタンを設置すること」になっており、開発者目線になっているのです。この違和感にPO、開発者が気づいていないことがポイントです。これはさまざまな案件でありがちな状況です。

スライド09

ユーザーの本来の目的が「ガチャを回す」ことであるが、その目的達成を確認できるような受入基準になっていません。石を購入後にガチャ画面に遷移すれば受入基準を満たし、後続処理は確認不要という認識につながっています。

スライド10

目的を明らかにすることはとても重要なことであり、PBIで実現したいこと、その理由が明確になっていないと、この事例のようなことが起こります。

PBIを改善しよう!

具体的なPBIの改善ポイントを紹介していきます。

1)ユーザーストーリーの改善

参加しているメンバーがPBIの問題点に気づかなかった原因は、PBIの書き方に問題があったことです。

この事例のPBIで記述したユーザーストーリーは、「誰が」、「何のために」、「何をしたいか」という記述になっています。

▼PBIで記述したユーザーストーリー

ガチャ画面に購入ボタンを設置する

誰が
アプリユーザーが
何のために
ガチャを引こうとして石が不足している際に、直接「購入画面」に遷移できるように
何をしたいか
ガチャ画面に「購入」ボタンを設置

しかし、本来のユーザーストーリーは、以下のようなフォーマットで記述することが推奨されています。

<ユーザー>として
<結果>が欲しい
なぜなら<理由>だからだ

<ユーザー>(Who)
  • その機能を実際に使う人やその人の職業、役割などを具体的にイメージして記入する
<結果>(What)
  • システム要件(システムがどうやって要求を達成するか)を記述する
  • 検証可能(テスト可能)な記述にする
<理由>(Why)
  • システム要件によって解決したい問題や、実現したいビジネス価値・効果などを記入する

あらためてPBIで記述したユーザーストーリーを見直すと、開発者目線でありユーザー目線になっていないことに気づきます。ユーザーの本来の目的は何か、ということを認識して表現することが大切です。

▼書き直したユーザーストーリー

石の不足分を購入してガチャを継続できるようにする

誰が
アプリユーザーが
何をしたいか
ガチャを引こうとして石が不足している際に、ガチャ画面からすぐに石を購入したい
何のために
不足分を補ってガチャを継続できるように

関係者の間で「何のために」という目的を正しく認識し、議論できるようになれば、誤解なくプロダクトバックログの品質が向上します。

さらに、改善後のユーザーストーリーには具体的な実装内容が記述されていないことに注目してください。目的が明確であれば、「購入ボタンの設置」「購入画面へ遷移」以外の手段や、既存の実装を考慮した低コストでの実現方法も提案しやすくなります。

PBIには「本来の目的」を正しく認識し、議論できるようにする重要な働きがあるのです。

スライド11

2)受入基準等の改善

受入基準や機能を明確化することで、適切な試験範囲や試験方法が見えてきます。

各ストーリーで受入基準を明確にするための議論と線引きが必要
  • 何ができたらこのストーリーは完成か
  • エラー処理、フロー、例外処理がどこまで含まれるか
  • どこまでの機能があれば、POとして、このストーリーの「受入テスト」をOKとするか
  • 他のストーリーとの切り分けができているか(境界が明確か)
機能の明確化が必要
  • 機能とは、入力されたものを変換して出力するもの
  • ある入力に対して、出力が一意に規定されないとテストができない
    スライド12
  • 書き方
    Given, When, Thenで書く
    例 (Given) 詳細検索画面で、
    (When/INPUT) メーカー名を選択して検索ボタンを押すと、
    (Then/OUTPUT) そのメーカーの車種リストが表示される。

この事例の受入基準を改善すると、次のようになるでしょう。

受入基準
  • 「ガチャ画面」に「購入」ボタンが配置されており、タップすると「購入画面」に遷移すること。
  • 「購入画面」で正常に購入成功(既存機能)後、「戻る」ボタンで「ガチャ画面」に遷移すること。
  • 「ガチャ画面」で現在の石の所持数の表示が購入後の所有数に正しく更新されており、購入前の所持数では実施できなかったガチャが実行できること。
デモ内容
  • 11連ガチャに対して石不足の状態から「購入」ボタンタップ~購入完了~「ガチャ画面」に戻り、「ガチャ実行」まで
  • データ例:所持2,000 → 購入1,000(所持3,000) → 11連ガチャ(3,000使用)を実行→ 所持0
試験範囲
  • スプリント中はガチャ管理システムの検証環境が使えないため、スタブ・モックによる試験を行う。
  • 購入後の後続操作で、石不足の判定等に影響する「ガチャ実行」のAPIリクエストが正常に送信されていることを確認する。
  • 補完試験の必要性:低(APIの正常性が確認できれば、以降は動線追加による影響懸念がないため)

受入基準だけでなく、デモ内容や試験範囲も具体化することが望ましいと考えます。そのために、最も大切なことは関係者と対話して認識齟齬・考慮漏れを防ぐことです。どこまでの内容を記載するかはチームの成熟度によって異なります。

アジャイル開発では対話が重要!

この事例のような事態を防ぐために、プロダクトバックログの質の向上が重要であることをユーザーストーリー中心に紹介しました。

ユーザーストーリー:
  • 対話のきっかけとして、要件の意図や本質を簡潔に記す。
対話:
  • ユーザーストーリーを基に、メンバー間で内容を具体化し、共有する。
  • 必要に応じて、その内容を書き留める(UIのスケッチ、ビジネスルールなど)
確認:
  • 期待される振る舞いを明示する(受入基準)

アジャイルでは対面での対話が非常に重要とされています。そして良い対話を行うためには、PO、開発者、スクラムマスター(SM)との関係が良いことが前提になります。関係が悪いと対話したくない、という状態になり、紹介したような改善が行われづらい状況を生み出します。

現場でありがちなのが、「POからの要求過多により、開発者が開発作業を優先し、議論に時間を割かない」、「不具合が起こった時に責任を押しつけ合う」、「言われたことをやっていれば自分たちの責任にはならないので、自分たちから踏み込まない」といったことです。このような当事者意識の欠如が関係を悪くし、対話をしないことにつながっていきます。

ユーザーへの価値提供、ビジネスやチームの成長には適切な対話が必要であり、メンバー全員がチームの雰囲気作りに気を配ることの大切さを改めて認識していく必要があります。

スライド13 対話の重要性

今回は初心者向けに事例を紹介しましたが、長く開発しているチームでもPBIの質が低い事例が見受けられます。その場合も多くは適切な対話ができていません。今一度、自分たちのチームでも適切な対話ができているか、振り返ってみてほしいと思います。

繰り返しになりますが、重要なのは対話を通じて内容を具体化し、関係者間で共通認識をもつことです。そのためには日頃から現場で良好な関係を構築していかなければなりません。特にSMはチームの状況に気を配り、改善に取り組むことが期待されます。