アジャイルソフトウェア開発とは

明確な定義なんてものは別になくてよいと思ってますが、自分の考えを表明するのは悪くないと思い書いてみようと思います。

自分の中での定義

「ソフトウェア開発においてムダを排除する努力と態度」

※ 努力とは「現時点の技術力をもってチームが行える範囲での努力」 ※ チームができる範囲を超えた努力を求めるのは間違っています

何がアジャイルなのか?

“agile”の意味を調べると

敏しょうな、素早い、機敏な、身のこなしの軽い、しなやかな、機動的な、鋭敏な、 いきいきした、活気のある、頭の切れる、頭の回転の速い

といった言葉になるみたいです。 これだけ読むとアジャイルは短納期にソフトウェアを開発する手法なのでないかと思ってしまうかもしれません。 しかし実際には素早くソフトウェアを開発する手法なんてものはないと思います。あるといったらきちんとCI環境でテストコードを動かすなど単純作業の自動化であって、それ以上でも以下でもないのはないでしょうか。 それではアジャイルとは何に対して”agile”なのでしょうか? それは変化への素早い対応であって、目的はムダを抑えることです。

なにがアジャイルではないのか?

  • 予算を低く抑える
  • 短納期で開発する
  • 品質を高める

(自分が考える)アジャイルソフトウェア開発では「ムダを抑える」ことに目的をおいているのでこれらの3点は目的ではありません。 取り組んだ結果として、少ない予算で済んだり、品質が高まったりすることがあるかもしれませんがそれらはあくまでも結果であってアジャイルの目的ではありません。

  • ソフトウェア開発におけるムダとは?

色々あると思いますが思いつく限りあげてみます。

  • お客さんの要望とは違うものを作ってしまった
  • リリースしたものの誰も使わない
  • 自動化できる作業を手動でしている
  • 人はたくさんいるけどチームとして機能していない
  • 過剰な品質への投資
  • 見積に含めるリスク工数
  • 社内政治
  • etc …

いかがでしょうか。みなさんでも考えてみてください。

アジャイルを支える技術

  • Extreme Programming(XP)
  • スクラム
  • リーン

ここで1つ1つを説明することはしませんが、「ムダを抑える」ための手法、プラクティス、フレームワークとして学んでみたらどうでしょう。 間違っても低予算、短納期、品質のためのアジャイルとして捉えないことをおすすめします。

結局何が言いたいか

というと、誰も使わないソフトウェアなんてつくりたくないし、余計な社内政治にも振り回されたくないし、アジャイルなんてキーワードに踊らされずに自分たちが持ってるチカラを最大限駆使してソフトウェアを開発したいですよね、そういう仕事をしたいですよね。ということです。