アジャイルで高速開発は実現するのか?

最近アジャイルを導入しただとか、大手SI会社がアジャイルの人材育成に乗り出したりとなんだか盛り上がってますが、うちの会社でも今年からアジャイル開発に取り組んでいます。高速開発を実現するためです。ただ、実際にアジャイル開発によって、開発のスピードが上がるのか?というと僕はそんなことはないと思っています。 アジャイル開発というのは、スピード感を持つことはできるけれど、アジャイル開発そのものはスピードが上がるものではない、というのが僕の考えです。

スピードとスピード感。ぱっと聞くと何がどう違うのか一瞬戸惑いますが、言葉の通り物理的なスピードと、その速度を感じられるかどうか、という違いがあると思います。

例えば、新幹線ののぞみは最高速度が時速300kmで東京-大阪なら2時間半で走りますが、実際にそれがどのくらいの速さに感じるかは、のぞみに乗って流れる景色を眺めるのが一番なわけです。逆に、のぞみに乗っていても目隠しされていたらそのスピードは視覚的には体感できません。

何が言いたいかというと、スピードは「速い」か「遅い」かであって、スピード感は「ある」か「ない」かだと思うのです。

アジャイルというと、一定のスパンで成果物を顧客に見せて随時方向修正していくという開発プロセスが思い浮かびます。これはスピード感を感じさせるものであって、スピードを上げるものではありません。一定のスパンで方向修正していっても、スピードは上がらないのです。

もちろん、方向修正によって無駄な作業が減ったり、卓袱台返しを食らわずに済む分効率が良くなる可能性はあると思います。しかし、いつまでも反復が終わらないというリスクも存在するんじゃないでしょうか。

じゃぁどうしたらスピードが上がるのかというと、ひとつはアジャイルのプラクティスにも登場する、TDDやCIなどの自動化。自動化は手作業の量を減らすので、上手く活用すればスピードは向上します。しかし、自動化すること自体には時間がかかるため、特に実践してすぐはなかなかスピードがあがりませんし、これらはアジャイルだからやるべきことではありません。

そしてもうひとつは、プログラマのスキルアップです。例えば、UNIXコマンドを覚えてサーバ上で出来る作業が増えれば、それだけ作業効率が上がります。DBの知識を身につけて、今までDB管理者に質問していた時間が減ればやっぱり作業効率が上がります。今まで1時間かけて書いていたプログラムが30分で書けるようになれば、残った30分で自動化の作業ができます。 プログラマのスキルアップというのは、最もシンプルにスピードを向上させます。

高速開発を実現するためにアジャイル開発を導入する、というのがおかしいとは思いません。実際に、スピードが「速い」か「遅い」かなんてのは相対評価ですし、作るものの質にも依存しますから、開発の素人(である場合が多い)顧客には判断できません。顧客が求めているのはスピードももちろんですが、スピード感の方が重要なのだと思います。顧客がスピード感を感じて、速いと言ってくれさえすれば、それは高速開発が実現できていると言っていいのです。

ただプログラマは、スピード感よりもスピードを大事にして欲しい。今後開発プロセスがどのように変化していっても、本当にスピードアップに貢献するのはプログラマの腕だけだと思います。日々スキルアップに励み、目の前の作業をより速く、効率的に、必要であれば自動化して、どんどんスピードアップしていくことが本当のプログラマだと思います。

そしてアジャイルの本質というのは、顧客にスピード感を感じさせることによって、プログラマの努力によるスピードアップを見せていくことにあるんじゃないでしょうか。