みなさんこんにちは。@ryuzeeです。
スクラムでは、スプリントに投入するプロダクトバックログ項目はReady(準備ができている)である必要があります (Readyとはどんな状態なのかについては以前に詳しく説明したので、そちらを参照してください)。 Readyにしておくことによって、成果の量が安定しプロダクトオーナーやステークホルダーにとっては予測精度が向上していきます。
Readyにする活動は単に受け入れ基準を用意したり、プロダクトバックログの内容を精緻化したり、並べ替えたりするだけではありません。 スプリント内でプロダクトバックログ項目が完成する可能性を上げるために必要な活動すべてが含まれます。 そしてその中の1つが技術的な調査です。 スプリントでプロダクトバックログ項目に着手してから実現方法を調べたり、技術的な制約によって大幅な方針転換したりするのでは遅い上に予測性が低いので、先に技術調査をするわけです。 このことをスパイクと呼びます。
今回はスプリントを実際に開始したあとで、スプリントを回しながらどのようにスパイクをしていけばよいか見ていきましょう(スプリント0の立ち上げ期間中にもスパイクを実施しますが、今回はスプリントでの活動にフォーカスします)。
まずは、AgileDictionaryというアジャイル用語解説サイトの定義でスパイクの定義を確認しましょう。 そこでは以下のようになっています(拙訳。一部改変)。
リリース可能なプロダクトを作るのではなく、質問に答えたり情報を収集したりすることを目的とした作業。 開発チームが技術的な質問や設計上の問題を解決するための実際の作業を行うまで、見積りができないようなプロダクトバックログ項目が出てくることがあります。 解決策は、「スパイク」を行うことです。 目的は、質問に対する回答やソリューションを見つけることです。
スパイクという用語は、エクストリームプログラミング(XP)に由来します。 そこでは、「スパイクとは、非常に簡素なプログラムのことで、ソリューション候補を探求するのに使われる」とされています。 ウォード・カニンガムは、c2.comというwikiでこの用語がどのようにできたかを述べています。 「ベック、自分たちが正しい方向に進んでいると確信できる、もっとも簡単なことは何だろう?」 手に余りそうなものを小さくして進めることで、単純で説得力のある解決策につながりました。 ケント・ベックはこれをスパイクと名づけました。 私は大きなフレームワークの保守をしているときでも、このプラクティスが特に役立つことを発見しました。
つまり、スパイクの目的は以下のように整理できます。
スクラムではスプリントごとに「リリース判断可能なインクリメント」を作ると決められています。 それぞれのスプリントで、スプリントゴールを満たすように進めていかないといけません。 したがって、スプリントの時間をスパイクで埋め尽くしてはいけません。 以下の手順で進めていくとよいでしょう。
スパイクを進める上ではいくつか注意点があります。例を挙げておきましょう。
スパイクをプロダクトバックログに入れるか、スプリントのバッファで行うかは悩ましいポイントです。 考え方としては、以下のようにしておくと良いと思います。
なお、プロダクトバックログの並び順の最終決定権限はプロダクトオーナーにあります。 したがって、スパイクのプロダクトバックログ項目の重要性を開発チームとしてプロダクトオーナーに伝えて、スプリントへの投入を決定してもらう必要があります。
繰り返しになりますが、準備のできていない(Readyでない)プロダクトバックログ項目、完成できる自信のないプロダクトバックログ項目をスプリントに投入するのは避けるようにするべきです。 そして、プロダクトバックログ項目は着手前に、要求の観点だけでなく技術の観点なども含めて完成できそうかを確認しておく必要があります。 そして、技術の観点ではスパイクは有効な手立てになります。 どの程度のスパイクが必要なのかは、開発チームの扱っている技術や経験に大きく左右されますが、重要な問題にフォーカスしタイムボックスを設定して取り組むと良いでしょう。
それでは。