アジャイル開発は走りながら計画する
アジャイル開発で一番よくある誤解は、分析や設計などをせず、直接プログラミングだけをするというものです。それは、スラムダンク方式であって、アジャイル開発ではありません。スラムダンク方式というのは、開発方法論を全く使用せず、勘でプログラミングをしている状態を示す言葉です。アジャイル開発はよく誤解されますが、開発方法論の一種ですから無計画でするものではありません。
では、いつ分析と設計をするのでしょうか?「それは、今でしょう。」というのは半分冗談ですが、真実も含んでいます。というのも、ウォーターフォール型開発とは違い、最初の段階で集中してするものではありませんが、しかるべき時にするものだからです。
具体的には、その時点でわかっている範囲(スコープ)で、分析と設計をします。適切な用語がないので、私はこれをドメインスコープもしくは関心領域と呼んでいます。より細かく実例を言うと、私はお客様と会話しながら、運用イメージに至るまで、全ての開発行程を脳内でやります。この時、お客様が要望している範囲がドメインスコープであり、その範囲内および、接点と思われる部分をすべて分析と設計を同時にしています。
先ほど言ったのは私個人の技ですが、集団作業をするときも考え方としては同じです。分析と設計は実装とセットで常に行うものなのです。例えば、アジャイル開発の一種スクラム開発をする場合、お客様が望んでいる範囲の分析と設計を作業とみなし、プロダクトバックログに優先順を高くして入れます。バックログに入れるのは実装作業だけと誤解している人も多いようですが、プロダクトバックログは、実装に限らずシステム開発に必要なもの全てが要素です。従って、しかるべき分析と設計もバックログに入れるのです。
ただし、アジャイル開発がウォーターフォール型開発は大きく違いますから、一度バックログに入れて、やったらおしまいというものではない点に注意してください。仕様が変更されたり、実装結果から新しいことが判明したりしたら、また分析と設計の作業をバックログに入れます。常にやるときは今なのです。
現実で起こる変化に対応して、アジャイル開発のバックログ(やるべき作業)は常に変化します。しかしだからと言って、状況に流されながら、先を考えずに実装だけしていればいいというものではありません。プロジェクトの闇の中、常に見通せる範囲の分析と設計を行います。一般的に分析と設計というと、硬直したもののように感じられるでしょう。ですが実際は、変化に対応して、柔軟に分析と設計を行うのです。無計画に現実に流されるのと、現実を直視して計画を変更しながら開発するのとでは大きな差があります。
アジャイル開発は言葉のイメージだけが一人歩きしている感がありますが、実際に現場で行っているものとは違うことが多いので注意してください。どうやら、アジャイル開発に限らず、流行ると言葉のイメージが独り歩きするようです。一例をあげると、オブジェクト指向もアジャイル開発同様、イメージが独り歩きしているようです。一部をすべてだと錯覚したり、データ中心とプロセス中心を無暗に排除したり、実際のものとは違うものをオブジェクト指向と勘違いしている人が多々見受けられます。もしかしたら、有名で知っているつもりの言葉ほど疑って、よく調べる必要があるのかもしれません。