夜中におもむろに書評を書き出す第2段。
この本自体はとても面白いし首肯できる部分も多いが、1箇所だけイチャモンをつけたい。
そもそもアジャイルソフトウェア開発という概念自体、マニフェスト(注:アジャイルソフトウェア開発宣言のこと)の発表よりも3年早く、1998年に日本の研究者から提案されている。
南山大学の青山幹雄教授による一連の研究である。 (同書より引用)
ここで紹介されている「1998年」の「提案」とは、おそらくICSE1998で青山先生が発表した論文 "Agile Software Process and Its Experience" のことだろうと思う。Agile Software Process(ASP)という、実際に富士通の社内で実践されたソフトウェア開発方法論を論文としてまとめたものだ。
で、たまたま私はこの論文をつい最近目を通したのだが、最初に断言すると、これは2023年現在アジャイルと呼ばれているものとは異なる手法である。
ASPが「アジャイルソフトウェア開発という概念」を世界でいち早く提唱した、と書くと否定しきれない部分もある。 ただ、ASPが源流となって今主流になっているアジャイル開発の手法が生まれたのか、ASPが今のアジャイルの先を行っていたのか、と言われると、それは当たらない、と言えるだろう。
ということで、紛らわしい表現は正しておきたい、と思ったのがこの記事の趣旨である。
以降はそのことについて、もう少し詳細に書いていきたい*1。
前提:アジャイル以前
まず前提として、アジャイルが生まれる以前のソフトウェア開発モデルの歴史に軽く触れる。
元々、1970年のRoyceの論文が起源となってウォーターフォール型の開発モデルが起こり、世界的に普及した。
しかし、最初に全てを計画し、開発期間ずっとその計画のとおりに開発する、というスタイルには問題も多く、特に1990年前後からその見直しを図るような動きが出始めた。そのうち有名なのが1986年のBoehmによるスパイラル開発、その後の1990年代のBoochに代表される反復型開発である。
これらの流れの後に現代のアジャイルも青山先生のASPも存在する。実際、青山先生の論文ではBoehmやBoochを参照している。
現在アジャイルと呼ばれるもの vs ASP
Boochらの反復型開発の時点で既に、短いイテレーションを回しながら作りたいソフトウェアを部分的に少しずつ作って拡張していく、という思想は出来上がっていた。
ではアジャイルとは何なのか、といえば、誤解を恐れずに言えば、反復型開発を前提として顧客からのフィードバックを受けて自らが学習し、開発を軌道修正していくのが一番の特徴であり、それが方法論の中に組み込まれている。
そして、青山先生のASPにはこの特徴はない。論文では、ASPを実践してみて得られた恩恵の1つに "Higher quality by earlier feedback from the customers"(顧客から早い段階でフィードバックを得ることでの品質の高さ)を挙げている(7.1節)だけで、それを意図的にプロセスに組み込むといったことはしていない。
ASPはアジャイルではないのか
では、ASPは全く「アジャイル」ではないのか、というと、必ずしもそうは言い切れない。 論文の中では
Agility means quick adaptations to changes in requirements and surrounding environments.
(アジャイルとは要求や周囲の環境の変化に素早く適応することである)
と書かれていて(2節)、これは今のアジャイル開発が志向するものと同じだ。
つまり、ASPはアプローチが異なるだけで、「アジャイル」を志向しているという意味では現在のアジャイルと同じである。
「アジャイル」という概念の起源はどこなのか
では、この「アジャイル」という考え方はどこから来たのか。青山先生の論文では現在のアジャイルと呼ばれる方法論は一切参照していない(たとえばスクラムの論文は1995年に出ているが、青山論文では参照されていないし、実際参考にもしていない)し、逆に現在アジャイルと呼ばれる数々の方法論もASPを参照した形跡は見えない。
つまり、両者の「アジャイル」の概念には、実は共通する先祖がいるのである。
青山先生の論文では、アジャイルの概念について以下の "Agile Competitors and Virtual Organizations: Strategies for Enriching the Customer" という本を参照していた。自分は読んでいないが、半導体生産にまつわる経営手法の本らしい。
で、どうやらこの本がアジャイル開発宣言にも影響したらしい。Harbard Business Reviewの記事 "The Secret History of Agile Innovation"によると、
Although they disagreed on much, the group eventually settled on a new name for the movement: agile. The word was suggested by one attendee who had been reading the book Agile Competitors and Virtual Organizations: Strategies for Enriching the Customer.
(多くの点で意見が分かれたが、最終的にグループは、このムーブメントの新しい名称を「アジャイル」に決定した。この言葉は、"Agile Competitors and Virtual Organizations: Strategies for Enriching the Customer" という本を読んでいた参加者の一人が提案した。)
と書かれている。この記事の著者にはこの会議の参加者でスクラムの提唱者の1人でもあるJeff Sutherland もいるので、信憑性は十分あるだろう。
ということで、おそらく当時の様々な世界的潮流のなかで、青山先生も、現在アジャイルと言われる数々の方法論の提唱者も、同じ「アジャイル」という概念に着目したのだろう。
そして、その「アジャイル」の概念をソフトウェア開発方法論の名前に使用した、という点では、青山先生がアジャイル宣言より3年ほど早かった。しかし、だからといって青山先生のASPが今のアジャイルの源流になっているわけでもないし、今のアジャイルの特徴をASPが先取りしていたわけでもない。ASPが他より「早い」と言えるのは、「アジャイル」という概念とその名称を使用したことだけだ。
ASPのアプローチ
ここからは少し余談になるが、ではASPはどういった特徴を持つ方法論なのか。
それは、複数の少人数チームからなる分散開発をベースにした反復型開発であり、特に初期は並列開発によるリードタイムの短縮を企図していたようだ。マルチコアのプロセッサでプログラムの実行速度を上げる、といったのとベースの発想はほとんど同じだ。
つまりASPでは、ソフトウェア開発を分散並列型にすることで「アジャイル」を達成しようとしていたようだ。
実はこの話、ちょっと面白いなと思うところがある。
最近、Joe JusticeがTeslaやSpaceXで展開しているxM(eXtreme Manufacturing)というのが、既存のアジャイル(特にスクラム)をベースに、徹底的な分散並列開発を志向してリードタイムを極限まで縮めるような開発方法論なのだ。
ついでにいうと、xMのキモは徹底したモジュール化なのだが、青山先生はASPの論文を発表した後、まさにソフトウェアを独立性の高い「コンポーネント」の集合体として捉え、それらコンポーネントの組み立てだけでソフトウェアを開発する「コンポーネントウェア」の研究に邁進されている。
そう考えると、青山先生は非常に感度が高く、先進的な研究をされていたんだな、ということが伺える。「アジャイルの起源」と「勘違い」されそうになるのも、仕方ないのかも知れない。
*1:ちなみに、私は学生時代から青山先生には様々な面でお世話になった。そのへんは先生が逝去されたときに書いたが、いずれにせよ、そういう人間がこの記事を書いている、ということは付記しておく。