アジャイル開発についての整理

年末にアジャイル開発について考えたことがあったので忘れないうちにまとめておこうと思う。

アジャイル開発では大事だとされている価値観や行動指針のようなもの(短いイテレーション・カスタマーファースト・計画に従うよりも変化への対応など)が多数存在するが、自分の中でどうもそれぞれの関係性や位置付けが見えておらず腹落ち感がなかった。改めて年末に少し考えてみたところ、不確実性への対処という目的のもとに整理できるように感じたのでそれについて書いていこうと思う。

 

プロジェクトにおける不確実性の問題は下記の2つに分けることができる。

  • A - 予想・計画していなかった悪いことが起きてしまう
  • B - 予想・計画していなかった良いことを起こせない

アジャイル以前の開発手法であるウォータフォール開発は、上記のどちらも苦手としている。

まずAに対してウォータフォール開発は下記の3つの問題がある。

  • 1 - 予想外・計画外の出来事に気づく活動がなく、気づくまでに時間がかかる
  • 2 - 事前の計画に固執し、気づいたあとの計画の変更に時間がかかる
  • 3 - 予想外の出来事が起きた場合に不要になってしまう活動(詳細なドキュメントの作成や緻密なプランニング)に時間をかけすぎる

これにアジャイル開発の価値観や行動指針は下記のように対応している。

  • 1に対して - 顧客との対話・素早いデリバリー
  • 2に対して - 計画よりも適応・短いイテレーション
  • 3に対して - 少ないドキュメント・少ない計画・シンプルさの追求

Bについてウォータフォール開発では、事前に立てた計画の遂行がチームの主な関心ごとであり、チームメンバーから計画外の創造的なアイディアが出ない・採用されないという問題がある。
そこに対してはアジャイル開発では

  • モチベーションの高い個人の重視
  • face-to-faceでのコミュニケーション
  • ビジネスメンバーと開発者のコラボレーション

といった価値観や行動指針で解決しようとしている。

下記は全体を整理した表である。

このように不確実性への対応という目的のもと整理することができた。
自分なりに整理することでアジャイル開発に関するモヤモヤが少しすっきりしてよかった。

アジャイルの考え方は不確実性に向き合うあらゆる場面で活用できそうだが、一方で「予想・計画外の悪いことが起きる」に関してメインで想定されているのは、作ったものがユーザ・クライアントに刺さらないという不確実性であり、そもそも作りたいものを作れるかに不確実性がある機械学習プロジェクトでの適用はどうなるのかについても改めて考えてみたい。