アジャイル開発の本質は頻繁なリリースにある
アジャイル開発の本質はどこにあるのか?を考えてみた。
ラフなメモ書き。
アジャイル開発の特徴は一体何があるか?
それはタイムボックス形式で小刻みにリリースすること。
それは小規模リリース。
それは設計と開発に区別がないこと。
それは人を重視したプロセス。
それはリーン開発である。
それはテスト駆動開発である。
それは変化を受け入れるプロセスである。
色々言われているけど、本質は何だろうか?
僕は「頻繁にリリースできること」だと思っている。
技術・マネジメント・環境の3つの観点で考えてみた。
【技術】
以前に比べると、「頻繁にリリースできる技術」は確実に進歩している。
XPが生み出した継続的インテグレーション(CI)はその最たるものだ。
CIの本質は、常時リリース可能なコードラインを保持出来る点にある。
trunkをHudsonでワンクリックすれば、すぐにビルド&デプロイできるのだ。
Cobolやアセンブラの開発が主流の頃に比べると、ワンクリックでリリースできる技術が既にある。
従来は、手作業でビルドして、FTPでサーバーにアップして、サーバーを再起動する手間がかかっていた。
そのコードラインの品質を保持するための技術が、TDDでありリファクタリング。
頻繁にリリースするために、コードラインにたくさんの手が入り、強固なルールが無ければすぐに品質は劣化する。
だから、テスト駆動で開発するし、継続的にリファクタリングしてソースの品質を維持する。
昨今は特にソフトウェア構成管理(SCM)の技術革新の影響が大きい。
MercurialやGitのような分散バージョン管理のおかげで、ブランチ管理とブランチの品質維持がすごく容易になった。
そのおかげで、コードラインを特定の目的で使い分けることができる。
リリースブランチは障害修正だけで品質重視。
trunkは常時最新の機能を反映しておく。
タスクブランチやトピックブランチは、特定の目的のためにパッチを作るための一時的なブランチ、など。
それらのブランチは分散バージョン管理の優れた自動マージ機能ですぐにtrunkへ安全に反映できる。
だから、勇気を持って新機能を実験できるし、それをすぐにリリースして反映できる仕掛けがある。
【マネジメント・プロセス】
PMBOKもScrumもスコープ管理を重視する。
例えば、PMBOKの品質管理では、スコープ外の品質向上の作業は「金メッキ」と呼ばれて、けなされる。
Scrumでは、バックログを常に保守してリリース予定の機能を優先順位付けするし、スプリント計画を実行している間は、外部からチームへ割り込みの作業を許さない仕掛けがある。
Scrumの言う日次Scrumは、PFの朝会のようなものだ。
日次Scrumは、メンバーに自身の役割を自覚させるだけでなく、スプリントのゴールを共有し、スコープから外れないように意識づける仕掛けだ。
そして、日々の問題はScrumマスターが解決するように動く。
アジャイル開発は、繰り返し開発の一つ。
繰り返し開発には、漸進型開発(インクリメンタル)と反復型開発(イテレーティブ)の2種類があると思う。
漸進型開発が反復型開発よりも優れているのは、頻繁なリリースがあるために、自然にスコープに制約がかかること。
リリースが定期的にあるため、イテレーションを超えるスコープは実現できない仕掛けがある。
昔も今も、リリース作業は大変だから。
RUPのような反復型開発は、内部で繰り返し開発があるものの、最後の1回しかリリースしない。
だから、スコープがどんどん増えてしまい、WF型開発と何ら変わらない。
よくある失敗例は、設計工程だけ、開発工程だけ、などのように、工程ごとの繰り返し開発を実践して、スコープが発散してしまい、リリースには程遠い品質になってしまうこと。
「頻繁にリリースする」という小規模リリースの制約条件が、スコープの発散にたがをはめるのだ。
アジャイル開発を運用すると、当初見積もったタスクよりも作業は増える。
実際、Redmineの1個のバージョンに、WBSから落としたタスクを一括インポートするものの、バグが出たり、設計漏れが出たり、予期していない技術リスクが判明したり、当初予定しなかったチケットがどんどん増える。
だから、予定通りにリリースするには、チケットの整合性を図りながら、タスクを削ってリリースする時が多い。
これが本来のマネジメントなのだ。
そして、これが「変化を抱擁する」ことなのだと思うようになった。
【環境】
とはいえ、アーキテクチャや品質を度外視してリリースできるわけではない。
でも、以前に比べると、ソフトウェアを巡る環境が随分良くなってきている事実もあると思う。
まず、強力なフレームワークが普及したおかげで、アーキテクチャの作り込みに力を注ぐ必要が減った。
例えば、RailsやSeasarがあげられる。
これらのフレームワークのおかげで、アーキテクチャの開発は不要になり、アプリケーション層の業務ロジック実装に専念すればいい。
つまり、頻繁に変わりやすい業務ロジックやUIに注力すればいい開発スタイルが主流になりつつある。
また、安いHWのおかげもある。
HDDは壊れても取り替えた方が安い。
サーバーも安くなったので、スケールアップしやすいし、更には、仮想化技術を使って、開発環境そのものを仮想化できる。
仮想化された開発環境で何度もテストできる。
更に、頻繁にリリース可能なデプロイ環境が普及したこともある。
例えば、Webシステムならば、warファイルをデプロイするだけでリリースが終わる。
組み込み製品でも、例えば携帯電話ですら、ソフトウェアアップデート機能が標準化されたおかげで、アプリケーションを販売後に更新できるし、更にはROMすらもアップデート可能になった。
だから、ある程度の品質を確保できたならば、リリースを優先して、後から細かなバグFixしたソフトをバージョンアップする戦略も取れる。
これらを考えると、アジャイル開発しやすい技術やマネジメント、環境が普及して、より早くリリースできるようになったと思う。
昨今「2週目のアジャイル」「Agile2.0」と呼ばれるブームはそのような背景があるのかもしれない。
| 固定リンク
「プロジェクトマネジメント」カテゴリの記事
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる(2023.02.18)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える(2023.02.14)
- PM理論では課業志向の方が関係志向よりも生産性が高いことを主張しているのではないか(2023.01.22)
- 現代日本人の弱点はリーダーシップ不足と生産性が著しく低いこと、そしてリスク許容度が著しく低いことだ(2022.12.23)
「ソフトウェア工学」カテゴリの記事
- アーキテクチャ設計はベストプラクティスを参照するプロセスに過ぎないのか?~Software Processes are Software, Too(ソフトウェアプロセスもまたソフトウェアである)(2024.09.22)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「システムアーキテクチャ構築の原理」の感想(2024.05.06)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- マイクロサービス設計は従来のアーキテクチャ設計と何が違うのか(2024.01.02)
「チケット駆動開発」カテゴリの記事
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- プロジェクト管理の基本はテーラリング、Redmineはプロセスをテーラリングするツール(2022.04.21)
「Agile」カテゴリの記事
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- 概念モデリングや設計原則は進化しているのか(2023.10.21)
コメント
少し前のブームは人中心でしたね。
今回のチケット駆動のブームはツール中心でしょうか?
でも、本質は「変化を抱擁する」だと思います。
投稿: さかば | 2010/02/04 09:27
◆さかばさん
僕のブームはツールでした。
周囲のブームは又違う側面な気がします。
Agile2.0については再考が必要だと思ってます。
投稿: あきぴー | 2010/02/07 21:17