I think we are on the verge of something happening in the software development industry. I don't really have anything to back up this feeling, but I can just see the ripples beginning to develop. Agile has been the big idea on the block for quite a while now, but are we sure it produces the best solution to a given problem?
Kanban seems to be picking up steam and helps address some of the realities of software development, but I think we're moving to something more in the future. The big question for me is always "How do we ensure that we have the best solution for a given problem"?
I always look to the natural world for synergies and creative ways of accomplishing tasks. I started thinking about how evolution produces some amazing products and the more I thought about it, the more I began to wonder how we could take key principles of evolution and apply them to software development. A search for evolutionary software development brings up a whole host of interesting pages and research. All of them going back to iterative development, which essentially speaks to me as one of the ways of delivering an agile project.
Evolution to me means more than just being iterative and releasing to a client often. Evolution is about branches, about experimenting, about taking risks, about killing off unsuccessful combinations, about tracing back lineage and most importantly it is about the unique assembly of given problems. It is the survival of the fittest.
If you are going to create an environment where only the best solution will survive, then you need to create an environment that has the following conditions:
1. More than one solution
2. A method to measure the success of a given solution
3. A way of quickly combining solutions to create a new, unique solution to the same problem
Many years ago I remember reading a research paper from a scientist that had created a chip that was able to evolve and recombine its own circuits to solve a problem (If I remember correctly it was comparing to audio signals to see if they were the same). After many generations the scientists looked at the circuitry and discovered that they chip was now utilizing unique methods they had never dreamed of (There were some electromagnetic properties now at play with the configuration of the chip - See http://www.damninteresting.com/on-the-origin-of-circuits for more information).
If in the 90's we as a global community could produce a chip that could evolve, self develop and ultimately leave researchers baffled as to how it functioned, couldn't we do the same with software? Instead of doing paired programming, couldn't we come up with two unique solutions, which are then measured, combined, discarded or built upon?
If you take an idea like Test Driven Development, utilize it with a technology like GIT and take the above suggestion you end up with:
1. More than one solution
2. A method to measure the success of a given solution
3. A way of quickly combining solutions to create a new, unique solution to the same problem
What are your thoughts? What's next after Agile?