While reviewing some information on software architecture, I recently re-read “Who Needs an Architect” article by Martin Fowler. He was quoting his exchange with Ralph Johnson on architecture, and I think this piece illuminates root cause of most software design problems:
One of the differences between building architecture and software architecture is that a lot of decisions about a building are hard to change. It is hard to go back and change your basement, though it is possible. There is no theoretical reason that anything is hard to change about software. If you pick any one aspect of software then you can make it easy to change, but we don’t know how to make everything easy to change. Making something easy to change makes the overall system a little more complex, and making everything easy to change makes the entire system very complex. Complexity is what makes software hard to change. That, and duplication… Software is not limited by physics, like buildings are. It is limited by imagination, by design, by organization. In short, it is limited by properties of people, not by properties of the world…
Another powerful thought is that most of a system’s dysfunctionalities are driven primarily by its stakeholder’s vested interests.
And lastly, Conway’s Law :
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.
So, in conclusion:
We have met the enemy, and he is us.