こんにちは、本好きサラリーマンのネルです。
今回は、「アジャイル開発は、”逃げ”なのか?」というテーマを考えていきます。
システム開発の仕事でよく使われる「アジャイル開発で進めよう。」という言葉。
この言葉が、一種の”逃げ”のように使われているんじゃないか、と感じた話をまとめます。
- アジャイル開発はメリットの大きいシステム開発方法
- ただし、逃げ言葉としてアジャイル開発が使われることも・・・
- アジャイル開発を採用するなら、最低限おさえておくべき条件がある
アジャイル開発とは
まず、「アジャイル開発」とは何か。
アジャイル開発とは、「システム開発」の現場でよく使われる言葉で、
「出来るところから、少しずつ機能を追加していこう!」
という手法・考え方のことです。
一気に全ての仕様を決めて、開発→導入と進めるのではなく、
「一部の仕様を決めて→開発→導入」というサイクルをぐるぐる回していこう!という進め方ですね。
【引用:Udemy アジャイル開発とは?】https://udemy.benesse.co.jp/development/system/agile.html
アジャイル開発って、最近になってよく使われるようになってきた印象があります。
それまでは、「どんなシステムにするかを最初に煮詰めて、完璧な仕様を作ってからシステム開発に取り掛かろー!」という手段が取られてきました。
これを、アジャイル開発とは反対に、「ウォーターフォール開発」と呼びます。
ウォーターフォール開発は、仕様作成も開発作業も1回で済むため、一見、合理的に見えます。
しかし、この方法にはとても大きな欠点があるんですね・・・。
どれだけ煮詰めて作ったシステムでも、いざリリースしてユーザーに使ってもらうと、
- 使ってみて気づいたけど、「〇〇」って機能は必須だったわ・・・。
- 仕様に入れてなかったけど、「XX」ってことはできないの!?当然できると思っていたわ。。
なんていう”悲劇”が、ほぼ100%で起こるんですね。
アジャイル開発のメリット
そこで、そのウォーターフォール開発の欠点を補うため、「アジャイル開発」という手法が受け入れられるようになりました。
繰り返すと、アジャイル開発とは「できる箇所から徐々に機能開発していこー!」というものです。
システムとして、「絶対に必要な機能」から徐々に追加していくことで、ユーザー側も、
- 今は〇〇まで出来るようになったから、次はこんな機能を追加してくれ!
- 最初は、✕✕という機能が絶対いると思ったけど、こうやって操作すると別に不要かも・・・。
と、「今できている機能」から、次のステップを考えていくことができます。
こうやって、必要な機能から考えていき、徐々に軌道修正していくことができるのが、アジャイル開発の大きなメリットなわけです。
ただし、アジャイル開発は逃げ言葉として使われる傾向が・・・
このように便利なアジャイル開発ですが、最近とても気になることがあります。
それは、アジャイル開発が「逃げ言葉」として使われている、ということ。
特に多いのが、外部の大きなIT会社さんにシステム開発を依頼したときのことです。
多くの部署を巻き込む、かなり大規模なシステムであるほど、全体として一気に仕様を作るのは非常に困難です。
そういったときにIT会社の方は、「アジャイル開発で徐々に出来るところから進めていきましょう!」と言いがちです。
進め方の1つとして、間違いなく良い方法だと思います。
しかし、「全体として仕様を作るのはほぼ不可能だから、まあ見えている範囲で開発を進めていけばいっか。」といった思いで、アジャイル開発を提案される会社さんが増えてきた?という気がするんですね。
それは、「アジャイル開発」ではなく、「行き当たりばったり」なだけ、、。
つまり、「アジャイル開発」という言葉に逃げて、実際は「行き当たりばったり開発」になってしまっている。
これが、多くのシステム開発プロジェクトで発生している現状だと思います。
「アジャイル開発」と「行き当たりばったり開発」の違い
こう書くと、「じゃあ、アジャイル開発と行き当たりばったり開発は、何が違うんだよ!」という話になってきます。
それで、一度考えてみました。
行き当たりばったりではない、「真のアジャイル開発」と言えるには、次の3つの条件が必要だと考えます。
【アジャイル開発と呼べる条件】
- 最初に、全体像のイメージが共有できていること
- 機能要望に対して、優先順位をつけて対応できていること(核となる機能から進められていること)
- 機能追加・変更が容易にできるようなプログラム構造になっていること
「1」については、”ほぼ”問題ないと思います。
全体像を描かず出発する開発プロジェクトがあるとしたら、さすがに経営層に止められるはずなので、、。
「2」について。
アジャイル開発をするにあたって、「優先順位を適切につけて対応できているか?」というのが重要です。
・・・というのも、「この機能が欲しい!」「あんな機能も追加してくれ!」という要望が次々出てくるのがアジャイル開発。
そんな中で、「要望された順」「権力のある人の要望順」で開発を進めていくと、どんどん横道にそれた機能が追加されていくことになります。
これまで何度もそういった事態を見てきました・・・。
重要なのは、「このシステムの価値を上げるために、次に”最も取り組むべき”機能はどれか?」を、じっくり議論することです。
最後に、「3」について。
「機能追加・変更が容易にできるようなプログラム構造になっていること」です。
表面上では同じ動きをするシステムであっても、それを支えるプログラムは、何万通りもの書き方ができます。
家造りと同じで、「どんな構造で作り上げるのか?」というのは、職人の手・プログラマーの手に任せられるわけです。
そして、アジャイル開発では機能変更が前提となっているので、「機能変更に強い構造」でプログラムを書けているかがとても重要です。
これができていないと、機能を1つ追加するのに「1日」でできていた前半と比べて、後半では「1ヶ月」かかる、なんてことが平気で発生してくるんです。
そして、これについては要望を出す側では、完全に制御できない。
IT会社側がどのように制御するのか?という話なわけです。
よって、発注者側として気をつけるべきなのは、「この会社にまかせて、きちんと柔軟な構造で開発を進めてくれるか?」を見極めてから発注をすることに尽きます。
(それが、非常に難しいのですが。。)
まとめ
今回は、アジャイル開発=行き当たりばったり開発ではない、という話をまとめてきました。
- アジャイル開発はメリットの大きいシステム開発方法
- ただし、逃げ言葉としてアジャイル開発が使われることも・・・
- アジャイル開発を採用するなら、最低限おさえておくべき条件がある
どれだけ大きな額をかけたシステム開発プロジェクトであっても、「行き当たりばったり開発」のような状態で進められている現場が案外多かったりするんですよね。。
アジャイル開発のメリットを活かすためにも、抑えるべき点はおさえないとな、と強く感じます。
アジャイル開発の基礎については、以下の本を参考にしました。
IT会社”以外”の方が読んでみると、特に気づきは多いと思います。
ソフトウェアの3分の2の機能は使われていないという、少々ショッキングな数値が示されています( 図表10-1)。
「そんなはずはない」と思ったなら、PCやスマートフォンで利用しているアプリケーションを開いてみてください。
(Kindle位置:593)
(この部分は、たしかに・・・。となった箇所です(笑))
また、Facebookを作ったマーク・ザッカーバーグさんは、こんな有名な言葉を残しています。
「Done is better than perfect」=完璧を目指すより、まず終わらせろ
このテーマにぴったりな内容だったので、引用してみました。
最後まで読んでいただき、ありがとうございました!
コメントを残す