The rise of dynamic software development methodologies such as Extreme Programming or Agile Programming, reflect the inherent dynamism of modern software design. The malleability of software, the rapid evolution of consumer and technology driven requirements, the difficulty of writing accurate specifications given all the unknowns, and the sheer complexity of the software ecosystem itself makes the ancient development waterfall from specification through execution and QA to release a hazardous and mostly futile affair.
Most software developments fail. While the situation has improved over the last decade, this remains mostly true today. Less than a third of all software projects meet their objectives in approximately the time expected. Over 10% of all projects fail without deliver anything, and most of the rest under-deliver, are terribly late, or way over budget.
This blog post is a thinking-out-loud exploration of how modern Agile methods address these problems and how my thinking is evolving with regards to how success is defined and the probability of success maximized.