The most difficult problem in software development
Is design the most difficult problem in software development? Writing code?
Not really. Designing and writing code can be the easiest part of software development—assuming you are (or hire) a competent developer.
The real challenge of software development is integration. That is, integrating services, interfaces, and components. It involves communication, collaboration, coordination, and continuous effort.
When an integration problem is discovered, it can create doubt, undermine confidence, divide the team, and halt progress.
Integration problems are a like a cancer to a project. And like a cancer, waiting too long to discover the problem can be detrimental.
There are so many different kinds of integration problems. The simplest type of integration problem is a compilation error whether due to a change to the dependent or using assembly. Other types include a change to an interface, simple refactoring, or semantic misunderstanding. There are so many other types, but perhaps the worst type of all is the total misunderstanding of need or responsibility. "I thought you were doing it. No, I thought that was going to be done in version 2.1."
Even if we dismiss the fact that integration problems can undermine confidence, divide the team, and create gaps, the unavoidable impact is that it halts progress. The development velocity of a team can go to zero until the problem is resolved. This can involve stepping back through commits to code to find who, when, and where the problem was introduced. Even understanding the "what" of an problem can be difficult. It sucks. It is painful. And can take a very long time.
Next, I will provide you with a few tips to avoid integration problems. In the meantime, let me know what you think. I also need help making a list of integration problem types.