
アジャイルの「反復」 と「再帰」で何を問うか
「スクラムを回す」という言葉がある。上手いこと回して、アウトプットを得ていこう、という意図を込めて使われる。この「回転」のイメージは次のようになる。

特に違和感は無いだろうか。時系列的に左から右に流れているイメージだ。この回転の連鎖によって、価値や意味ある何かを得ようという営みになる。ところが、このイメージがミスリードを生むところがある。上図の通り、インプットとアウトプットは分割されて、別のモノとして捉えられる。このイメージは「順次、各回転毎に期待するアウトプットを五月雨に生み出す」という見方が可能になっている。
もっと端的にいおう。必要なモノ、欲しいモノを予め決めておき、それを小さく分割し、回転にインプットしその分のアウトプットを得る。アウトプットをすべて揃えることでパズルのように断片化されていたプロダクトの機能群がまとまり、一つの単位になる。だから、アウトプットの進捗を都度測り、意図通りに生み出されているかをマネジメントしていこうとなる。
これはアジャイルで実現したいこととイメージがあっているだろうか?
思考上の実験をしてみよう。あえて、上の図から「時系列」を落としてみる。

当然ながら、回転は重なることになる。スプリント1とスプリント2の区別はこの図ではつかない。回転が重なることで、イメージされるのは「再帰構造」だ。一つの回転を終えるときに、自分と同じ回転を呼び出し、次とする。一つの回転で生み出すアウトプットは次の回転に引き渡され、インプットになる。回転は同じではあるが、実際にそれぞれの回転で扱う具体は異なる。
この捉え方でどういう違いが生まれるのだろうか。
時系列を伴う反復 → 五月雨に出力されるアウトプットの管理
時系列を抜いた再帰 → アウトプット=インプット、常に全体を扱う
例えば、何からユーザーの体験を伴うプロダクトを作っているとする。前者で回転を捉えた場合、スプリント1でXXX機能をつくり、そのスプリントレビューでXXX機能分の吟味を行い、スプリント2ではYYY機能の吟味を行う、といった具合に本来ひと繋ぎであるはずの体験を分割してしまいかねない。スプリント毎の最適化を行っているようなものだ。一方、後者であればスプリント毎に常に全体の体験を問うことになる。インクリメントの増分がある上で、全体の良し悪しを吟味する。
本来のスクラムの意図としては、「全体を問う」のほうである。であるし、こうした反復と再帰の見方をわざわざしなくても、「全体を扱う」ということを自然とやれる現場ももちろんある。一方で、五月雨アウトプット開発として捉えてしまうケースはとてつもなく多い。回転の意図違いを理解するために、こうした思考実験は一助になるかもしれない(ただし、ほどほどにもしておこう)。
