I've talked a lot in this podcast about different design principles and techniques. But what's the underlying reason for all of these principles? Why are we doing all of this? If you think carefully about each design principle I've presented, they all boil down to one fundamental reason. Good design makes software development easier. There it is. Some people may say it sounds obvious, but there are many other noble goals. Runtime performance is a noble goal. Reducing software defects is a noble goal. Design principles don't attempt to address those issues. Why is ease of development so important?
The biggest problem facing the software development industry isn't that software runs too slowly. It isn't even that there are too many bugs. The biggest problem is software complexity. As software gets more complex, it becomes harder to understand. Software that's hard to understand is hard to change. Using design principles, we can reduce the complexity of the software. We can make it more understandable. We can make it easier to make changes. When we understand software, we can more easily fix bugs or improve its performance. If we allow software to become complex, we lose control of it and lose the ability to extend it or even fix it. That's why we strive for good design.Download