Image credit: Sara Petagna
Software development is done by people and I believe people come before process, so I've developed a little model to explain why software development in general is so damn difficult. In software development there are in general 2 types of people involved, Functional people to define and review the functionality of the solution and the Technical people to do the actual realization of the proposed solution. Now lets compare these 2 types of people.
|See opportunities||See risks|
|Want it now!||It's difficult, it takes time!|
|Think solutions||Think frameworks|
|It's simple, just a few things||How about Security, Performance and Scalability?|
The above chart now shows clearly that there is a natural incompatibility between the Functional and Technical people. Off-shoring and outsourcing often make it even more difficult with 12 hour flight, an ocean and multiple time zones in between. This is a serious challenge, because it's essential for success that they work as a team. It's usually not the team with the best individual players that wins, but the team with good players that understands and complements each other. This is why a good coach is important.
The secret of successful software development is the coach that makes sure you have a software development team that understands and complements each other. The coach bridges the gap between the different personalities. It's up to the coach to decide how to do this, I personally like to bring the Functional and Technical people together at every stage of the projects. Especially in the requirement phase I like to do 'reality checks' and come to a shared concept solution. This scopes the solution down, manages the expectations of the Functional people and makes the Technical people more involved in the whole process. I also realize that it's difficult to formalize the role of the coach, because every team and organization is different. Sometimes it's just the Product Owner and in other situations it's the Development Manager. It can be anybody, as long the gap between the different personalities is narrowed.
The coaching part doesn't dismiss your organization from having a formal software development process. A well defined process is still necessary to keep track of events, control your quality and for compliance and responsibilities. However the process should never be placed above the people that are doing the actual work, instead it should guide them to better results.