I attended a very interesting presentation tonight on Agile Methods: covering the processes and practices of Agile software development. I’ve done a fair amount of reading around the subject, initially starting with Extreme Programming, and it was good to have someone pull the whole lot together.
Some of the questions that came up after the presentation got me thinking about the changes in software development practices, especially the ongoing move from monolithic approaches like SSADM and other waterfall methodologies to the more flexible approaches espoused by XP and Agile practitioners. What factors are driving this?
I think you have to look at history. Computer programming was originally (and arguably still is) an engineering discipline. Traditional engineering has always been driven by clearly defined blueprints (specifications), expensive machine tools (hardware), and a relatively cheap workforce. Programming languages couldn’t talk to each other, and in most cases they only ran on one platform. So the programmer was locked in to a set of methodologies by the hardware limitations, and the relative cost of doing it any other way.
Time passes, and hardware gets progressively cheaper and faster. Development tools are improved. Everyone can have a development environment to play with on their own PC, rather than waiting to buy time on the company mainframe. It’s not until you have a cheap fast toolset that you can afford to get into iterative development practices.
Another factor that I think is very important is the role of the customer. I’ve often encountered a fair bit of resistance to the idea of the customer being intimately involved in the project at all stages, but Agile methods promote this. Personally, I look at it from the viewpoint of the customer, and I considered the analogy of the architect built house (you’ve seen the TV programmes)…
As a customer do I ask my architect for a house with 4 bedrooms, 2 bathrooms, a kitchen and 3 family rooms, then take a step back and let them get on with it? Am I likely to get my dream home, or somebody else’s vision?
No, I want to be on site at every major stage. If a wall goes up, and I decide I would really like a door in it, then that change happens early in the project when the cost is still relatively low. I am able to tweak the build at all stages and get the home I really wanted.
If we accept that competitive edge is built on having a unique selling proposition and maintaining it, we can begin to see why custom solutions are important to modern businesses. Otherwise, everyone would be using off-the-shelf software.
So where are we heading? Assuming development tools, platforms, SDKs continue to get faster, cheaper and more clever. And assuming that the customer will be increasingly more closely bound with the project. I’m asking what will be the next major move in software development methodology? (No really, I’m asking!)
My personal thanks go out to Akbar Zamir from Valtech for keeping me awake and thinking.