アジャイル開発においてよくある誤解として、「アジャイル開発は計画をしない」というものがある。今回は実際にそういう質問を受けたので、マジメに答えてみる。
なぜ誤解が生まれるのか
アジャイルソフトウェア開発宣言にある4つの価値の中の1つである、
計画に従うことよりも変化への対応を
から誤解する人が多いように感じる。あるいは間違った解釈でアジャイル開発を騙っている方に巡り合ってしまったのではないだろうか。
でもよく読んでみると(いや、読まなくても)、「計画をしない」なんて一言も書いてない。
むしろ計画を大事にする
自分はアジャイル開発をするようになってから、むしろものすごく計画を大事にするようになった。
なぜなら変化に対応するためには、
- 変化があったことを知ること
- 変化の度合いを知ること
が必要だからである。
行動する前に計画を立てておくことで、計画とズレたことがわかり、どれくらいズレたのかもわかるのである。
それが「次はこうしよう=学習」につながり、結果として変化に対応することにつながる。
気づけないことには、対応も何も生まれないのである。
計画する目的と投資
特にソフトウェア開発の現場において、ほとんどのケースにおいて不確実性が高い。なので頑張って計画を立てたところで、計画通りにいかないことが多い。ここで考えたいのは、うまくいかなかった計画はムダなのだろうか。
自分の考える計画の目的は、学習を最大化することである。
頑張ってみたところで当たらない計画であれば、当たるかどうかはさして重要ではなく、そこから何を学べるかが重要である。つまるところ、学習効果が高い計画とはなにかを考えて計画をするようになる。
ただし、そこにどれくらい時間をかけるのかという投資判断は必要だ。かける時間(コスト)に対してどれだけのリターン(学習)があるのか、またどれだけ時間(コスト)をかけられるのかは現場の状況によって違うので、ROIを考えながら計画をする。
正確な計画とはなんだろう
なんとなく正確な計画をしなければ意味がないだろクラスタがいる気がするので少しだけ。
不確実性の高い状況とは情報がない状態である。情報がない状態で、いくら計画に時間をかけたところでさして正確性はあがらない。
では情報をどうやって集めるかというと、学習するしかないのである。
計画の精度が上がるのは、チームの学習が積み上がり、かつ「前と同じくらい」「前のと比べてこれくらい」という情報(経験)が積み上がった時だけである。
正確な計画云々と言うのであれば、ぜひその具体的なHowを教えていただきたいものだ(一休さん方式)。
最後に
考えてみた結果、計画を大切にしたい人も、変化に対応することを大切にしたい人も、結局のところ計画を大切にするしかない。
アジャイル開発とはあまり関係ない内容になってしまったが、得てして本質を考えるということはたいていそんなものだと最近思う。
もちろんこの考えが必ずしも正しいとは思っていないので、奇譚なきフィードバックをいただけると自分の学習になるので幸いである。