Sustainable Software Development -- 持続可能なソフトウェア開発(アジャイルとジャグリング!?)
かねてから、「持続可能な」ソフトウェア作りについて考えたいと思っていました。工業モデル、サービス業モデル、などで語られることの多いソフトウェア開発を、むしろ、農業や水産業、「育てる」モデルで捕らえたい。そうすれば、きっとチーム作りの面が強調されたアジャイル開発が浮かび上がるはず…。こんな話を、2000年以降、何度も天野さんや懸田さんとした記憶があります。KentBeckも、「ソフトウェア開発をガーデニングのメタファで捕らえたい」といっていました。
とてもいい本が出ていたので、紹介します。
Kevin Tate のSustainable Software Development: An Agile Perspective (Agile Software Development Series)です。
4つの原則(Principle)を出して、大きな2つのボールと合わせて「6つのジャグリングのボールをまわす」、という例えがうまい。ちなみに2つの大きなボールは、「機能追加」と「バグフィックス」。4つの原則とは、
- 動くソフトウェア(Working Product)
- 欠陥の予防(Defect Prevention)
- 設計の重視(Design Emphasis)
- たゆまぬ洗練(Continual Refinement)
です。ようは、持続可能なソフトウェア開発をするには、「機能追加」と「バグ修正」だけではだめで、上の4つの原則の視点を織り交ぜながら、バランスをとってジャグリングせよ、ということです。
それぞれの原則に、「実践」(Practice)が定義されています。例えば、「Working Product」原則の実践の中には、パフォーマンスを軽視しないことや、メモリーリーク、i18nなどへの「実装より」の視点もあります。(これは筆者の3Dグラフィックス、という開発経験のバックグラウンドを反映していると思われる)
そして、「Defect Prevention」原則には「軽量な原因追求」があります。これは、「なぜなぜ5回」と似ていて、根本に向かって原因を分析するものです(ただし、ライトウェイトにやれ、となっています)。
あと、おもしろかったのは、キーストーン種、ならぬ「キーストーン・プラクティス(実践)」を定義して、これがプラクティスの中でも重要な位置を占める、としていること。これは、持続可能性から、エコシステム、への連想で出てきたものでしょうが、メタファとしても秀逸だと思います。キーストーンプラクティスとしては、
- 繰り返し開発
- テスティング
- ふりかえり
- コーチングとチーム作り
- 頻繁な設計会議
- 容赦なきテスティング
が含まれていました。うれしいのは、
「ふりかえり」、「コーチングとチーム作り」が入っていること。持続可能、ということからはじめて、ここにたどり着くとは!
本書の内容は、「アジャイル開発」そのもので、特に新しいことはありません。しかし、「持続可能」、という目的から切った視点が新しいのです。
さらに、こういう開発に「変化」するための、ファクタとエネイブラをまとめて、締めくくっています。リーダーシップや経営陣のサポート、などが含まれていて、なるほどなるほどです。付録には、XPについての言及も。。。
序文を、「アジャイルプロジェクトマネジメント」の Jim Highsmith おじさんが書いています。
マインドマップは、クリックで拡大しますが、PDF版、PNG版もつけておきます。
画像ファイル
http://www.change-vision.com/files/kenji.hiranabe/SustainableSoftwareDevelopment-Review-Kenji-J.png
PDF
http://www.change-vision.com/files/kenji.hiranabe/SustainableSoftwareDevelopment-Review-Kenji-J.pdf
※今回は、先に英語のブログを書いたので、マインドマップは英語です。それに、付箋紙を貼るイメージで、日本語訳と解説をオーバーラップさせてみました。マインドマップとしては邪道かもしれませんが、字幕スーパーの1手法として新しくトライしてみました。(トライ重要!)
※追記(7/26): 達人プログラマー、他の邦訳で有名な村上雅章さんの記事、
「アーキテクトニクスからホーティカルチャーへ」と関連があることを、mixi でこさるさんより教えて頂きました。
http://www.biwa.ne.jp/~mmura/SoftwareDevelopment/twentyfirstcentury1.html