Software Systems and Coordination Costs
This quote struck me the other day:
"As systems get bigger, unless you intentionally reduce coordination costs, things explode." -- Ray Ozzie
While Ray isn't specifically talking about software systems in this context, it's definitely applicable to software as well as many other types of systems (he's referring to both software and organizations in this context). Coordination costs in software is not just about coupling issues (albeit very important), it's also about the cost of coordinating with other people (e.g. developers). There's a lot written about the importance of both well factored code and team communication, especially in the Agile world. I would even venture to say that a big part of Agile development is focusing on reducing the coordination costs of software. Unfortunately not everyone agrees with the importance of this. A big part of my day-to-day challenge as a developer in the last few years has been convincing people that things like code quality (maintainable, readable, loosely coupled, highly cohesive, etc.) and team issues (face to face communication, collective ownership, etc.) are not just important, but critical for the long term success of any marginally complex system. If you don't focus on these things, then as Ray so eloquently puts it, things explode!