アジャイル(Agile)ってよく分からないんだけどと言われて

アジャイルって?

今年度からアジャイル開発の部門に配属され、他の部署の同期や後輩から「アジャイルってよく分からないんだけど」ってよく言われるようになった。

そんな時にパッと上手く回答出来なかった(それはそれで問題)ので、どんな回答が良いのかグーグル先生と相談しながら考えてみた。

アジャイル(Agile)とは「素早い」「機敏な」という意味があるらしい。

じゃあ「素早く開発すること」っていう回答で良い気がする。

何が早いのかイメージが付かないので、ちょっと図にしてみた。

ウォーターフォールとアジャイル

図の上がウォーターフォールで下がアジャイル。

馴染み深い人が多いと思うので、ウォーターフォール行に書いてある各工程の説明は割愛。

ここで重要なのはユーザがシステムを初めて触る「ユーザ受入れ」「リリース」のタイミング。

図ではm+13月となっている。

アジャイルではイテレーションと呼ばれる短期間で開発(設計〜テスト・ユーザ受入れ)を行い、その期間で出来上がった機能をリリースしていく。(注:必ずしもリリースしなければいけない訳ではない)

ということで、早いのは「ユーザに開発機能を提供する時期」というイメージなのかと。

 

アジャイルソフトウェア開発宣言とアジャイルソフトウェアの12の原則

アジャイル開発で重要なものといえば【アジャイルソフトウェア開発宣言】と【アジャイルソフトウェアの12の原則】。

去年、IPAからアジャイルソフトウェア開発宣言の読みとき方というものが公開されていて、考え方や行動規範が書かれているので、興味のある方は読んでみると良いかと思う。

アジャイルソフトウェア開発宣言

アジャイルソフトウェア開発宣言は2001年に、軽量ソフトウェア開発で有名な人達が集まって作成したものらしい。

私たちは、ソフトウェア開発の実践
あるいは実践を手助けをする活動を通じて、
よりよい開発方法を見つけだそうとしている。
この活動を通して、私たちは以下の価値に至った。

プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、

価値とする。すなわち、左記のことがらに価値があることを
認めながらも、私たちは右記のことがらにより価値をおく。

ここで気をつけたいのは、左側のものに価値があるのは認めているということ。

たまに「アジャイルは設計書は作らなくて良い」って言う人がいるけど、動くものを優先するけど(開発に必要であれば)設計書も作る。

「左側のものそれよりも右側のものを優先するだけで、左側のものはゼロでは無い」と言うイメージの方が良いかもしれない。

アジャイルソフトウェアの12の原則 (勝手に番号をつけています。)

私たちは以下の原則に従う:

  1. 顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。
  2. 要求の変更はたとえ開発の後期であっても歓迎します。
    変化を味方につけることによって、お客様の競争力を引き上げます。
  3. 動くソフトウェアを、2-3週間から2-3ヶ月というできるだけ短い時間間隔でリリースします。
  4. ビジネス側の人と開発者は、プロジェクトを通して日々一緒に働かなければなりません。
  5. 意欲に満ちた人々を集めてプロジェクトを構成します。
    環境と支援を与え仕事が無事終わるまで彼らを信頼します。
  6. 情報を伝えるもっとも効率的で効果的な方法はフェイス・トゥ・フェイスで話をすることです。
  7. 動くソフトウェアこそが進捗の最も重要な尺度です。
  8. アジャイル・プロセスは持続可能な開発を促進します。
    一定のペースを継続的に維持できるようにしなければなりません。
  9. 技術的卓越性と優れた設計に対する不断の注意が機敏さを高めます。
  10. シンプルさ(ムダなく作れる量を最大限にすること)が本質です。
  11. 最良のアーキテクチャ・要求・設計は、自己組織的なチームから生み出されます。
  12. チームがもっと効率を高めることができるかを定期的に振り返り、
    それに基づいて自分たちのやり方を最適に調整します。

実際にアジャイル開発をやったり、アジャイルのコミュニティに参加して他の人から話を聞いたりしていて、個人的に難しいと思ったのは4番と5番。

この二つは結構出来ていない現場が多いらしい。

 

アジャイルで開発するメリット・デメリット

では、アジャイルで開発するとメリットは?

  • ユーザーに機能を提供する時期が早い
  • イテレーション(短期間)で機能を開発していくため、作成した機能や後続機能の仕様変更をしやすい
  • 各イテレーションをユーザ(顧客)と一緒に進めていくので、ユーザとコミュニケーションを取りながら開発していける(ユーザの意見が反映されやすい)

デメリットは?

  • 各イテレーションでユーザの意見を取り込みながら開発を進めていくので、当初の製品企画の内容と乖離する場合がある(良い意味と悪い意味で。)
  • 上記の理由で、全機能のリリース時期がウォーターフォール開発よりも遅くなる可能性がある
  • ユーザ(顧客)の負荷がウォーターフォール開発より高い

 

 

最後に

アジャイルは銀の弾丸という訳では無く、メリット・デメリットのあるものなので、ユーザや開発する製品(システム)の性質を見極め、どの方法で開発するのが最適なのかを見極めることが重要かと。

 

豚たま について

〇〇系エンジニアと言ってみたい。