The trouble is, software has diseconomies of scale. The more we build, the more expensive it becomes to build and maintain. As software grows, we’ll spend more time and money on:
- Operational support – keeping it running
- User support – helping people use the features
- Developer support – training new people to understand our software
- Developing new features – As the system grows so will the complexity and the time to build new features on top of it (Even with well-factored code)
- Understanding dependencies – The complex software and systems upon which we build
- Building Tools – to scale testing/deployment/software changes
- Communication – as we try to enable more people to work on it