Software is an integral part of our modern world.
How can it be that there is no common understanding about how it should be developed?
“Two truths can never contradict” (Galileo Galilei)
What we see today are two completely different approaches to developing software:
- Large process models with a tayloristic and a “one solution” approach
- Agile and lean methods with a purposeful free and evolutionary approach
While the agile philosophy has gained a lot of attention and acceptance in recent years, the traditional world (incl. CMMI) continues to be promoted. The discussions between the two camps are sometimes religious, sometimes turning a blind eye to the other, and sometimes artificially harmonized (“agile CMMI”).
This can really only be explained by a lack of a sound and accepted theoretical basis of how software development works beyond the technology, and how teams performing such knowledge work really get productive.
Arriving at an answer
Being a practitioner in software development since even back in school, I’ve worked as a consultant for more than 10 years. I gathered hands-on experience in a number of quite different roles and disciplinces within major software engineering projects. This contributed to my holistic view about how software projects act inside, which I now translate into my daily work as a project manager for a major bank in Zurich, Switzerland.
Myself and two colleagues (both practitioners like me) started doing research about a substantianted understanding of software development. We started off with our observations at our daily work, analysed them, did research on the academic side, and finally – after several years – refined our view and published it in a book (“Software entwickeln mit Verstand”, currently only available in German).
Some of the conclusions we came to are the following:
- Software development is about problem solving, and therefore fundamentally different from routine work
- Problem solving is an iterative learning process, stepwise elaborating missing knowledge
- Analysis and solution design can’t be separated, they must go along with each other
- Teams are eco-systems, not machines. Making a team productive requires more than just defining functional roles and forcing people into them. In fact, teams work like feedback control systems.
- An effective management of software projects and organizations contributes to the overall productivity. It’s less about administrative work like planning and monitoring, it’s about identifying obstacles and getting them resolved, therefore helping the team.
Software projects are the focus of the work I am (and the co-authors of the book are) doing. Our findings however are applicable to any problem solving, i.e. non-routine work. So I believe that a better understanding of how knowledge work is made more productive will have a major influence on the future shape of many organizations.