I attended a seminar on Agile Software Development Methodology. The seminar had some meat but was mainly a platform for several tools companies to promote their wares. It was great because it got me excited about the software development process again.
More than a dozen years ago my boss asked me to look into the problem of software productivity. The vast majority of large software projects missed budget and schedules with an embarrassing percentage failing to deliver anything usable. At that time ISO certification, software development lifecycle models, documentation, repeatability and 6 sigma were discussed. The mainstream thinking was that spending more time up front detailing exactly what was needed gave product teams a steady target, made the process more predictable and insured what was delivered was what was specified.
Over the years it became clear to me that very few organizations could detail a solution that would be useful several years later. It seemed few organizations could even ensure they would be intact after a few years! Market windows seemed short and getting shorter. An opportunity would be identified. A product defined. The marketing department would detail a fantastic product that would do everything except slice bread. Often the projects got bogged down, features cut and something workable might limp to market late and over budget.
In reaction to the reality of changing requirements, short market windows and rapid change at the corporate executive strategy level my thinking changed too. Why waste time detailing and designing a feature that may be changed, canceled or deemed non-strategic? The the longer the time frame the more likely a founding assumption would change. The larger the project the more complex it was. Large, long time frame projects were the ones most likely to fail.
The solution was to work on smaller projects and turn them around quickly. To take it further the projects should be broken down into smaller parts that could be demonstrated early. That rapid prototyping allowed testing of assumptions. Frameworks allowed discussion of features in relation to something real that we could play with. It allowed iterative development. Since we no longer had to design for things very far in the future that may never be used engineers felt empowered and were more productive. We called it just in time engineering or just enough engineering.
Agile is a family of methodologies that embrace and formalize the iterative development process. In each iteration a team defines a small set of goals, implements and tests them. After each iteration you have a high quality piece of software. The idea is when you get an iteration with an acceptable set of featuers you can ship it.
The beauty of iterative development is you can get feedback from customers early on. It allows you to change the priority of features with little cost. If you are on the wrong track you can cut your losses early. Since quality is built in and testing is started early on real code better products are built. From other research we know the earlier a software defect (bug) is fixed or avoided the cheaper it is. Combining the early extinguishing of bugs with reduced work on unneeded features makes products developed using Agile less expensive than using other methodologies.
Agile makes a whole lot of sense for the majority of software projects. I'm not sure how it would work for huge multi year projects like software to support a man on Mars mission. However the majority of projects are not that big or complex. Even huge projects could benefit by using ideas from Agile. I do believe planners of Mars mission software would benefit by breaking their software needs into the smallest chunks possible. Anyway I digress.
There are different flavors of Agile development. Lean or Extreme programming, Scrum and others exist. People argue the pros and cons of the fine points of these styles. To me it doesn't matter as long as an incremental, iterative process is used. Start small. Add working features a bit at a time. Make sure the software works at each step. Get feedback. Evaluate. Repeat.
If you are not using Agile development methodologies you are at risk of wasting resources, producing software with more defects and, worst case, missing your market window. You owe it to yourself and your organization to investigate and incorporate Agile development methodologies.
Copyright © 11/6/2009 Carl Wohlforth
We are affiliates of the businesses listed above. Clicking through our link before doing business with them helps support this website. Thank you!