How many of you have grand parents that worked in the software industry? None I guess. How about parents that are software developers? Not too many. Our industry is a made up industry. It has existed for less than a generation and as with any new field we needed a paradigm. We found construction.
Software development is not at all similar to construction though. Or let me put it this way: you should not assimilate software development with construction if business agility is what you are after.
In construction, once the architecture is ready, the materials to be used have been specified and the execution plan has been created, there is nothing major that can be changed in the process. The clients of a construction cannot ask for flying buildings or while the underground parking is being built to change their mind and demand an airplane parking instead. The building can only function at the place it has been built and the clients cannot request to be moved to Antarctica. The law of gravity cannot change after the architects finished the design.
In software development all the above is possible or should be possible and this is the key differentiator when it comes to business agility. So the underlying idea in software development should not be resisting change but embracing it.
Behaviour-driven development is an “outside-in” methodology. It starts at the outside by identifying business outcomes, and then drills down into the feature set that will achieve those outcomes. Dan North
The idea behind the “outside-in” way of developing software is that you start up with the directly visible behaviour of the system, the surface, and fake or mock out all the dependencies. Present the result to the customer, get the feedback and incorporate that feedback into the next iteration. Everything adapts and evolves with the customer needs; this is not at all the case in building construction. Once a castle has been built there is no easy way to change the materials used in the walls or swap the basement with an airplane hangar.
Software is soft, elastic, fluid. The castle is not.
Developing software using the construction paradigm can be successful but most of the time, if it does not fail completely, results in rigid products that do not meet the requirements, unsatisfied customers and bad experiences for everybody involved in the development.
Just my experience, no scientific study to prove this.
References:
BDD – a road to effective design and clean code: http://www.infoq.com/presentations/bdd-dan-north
The Damned Construction Analogy: http://jamesshore.com/Blog/That-Damned-Construction-Analogy.html
BDD+DDD: http://domaindrivendesign.org/library/north_keogh_gitlevich_2007
Strategic design: http://www.infoq.com/presentations/design-strategic-eric-evans
The Agile Manifesto: http://agilemanifesto.org/