Over the past year, I’ve talked to numerous developers who have said
our application is ‘****’, it’s so complex and so difficult to change
I’d expect to hear comments like this about ancient legacy systems. But I’m also hearing the exact same comments about systems that are only a couple of years old. It seems that far too often our shiny new architectures, tools and technologies simply accelerate the development of bad software.
My explanation is that organizations are so focused on delivering features that they neglect the fundamentals of software design. In this article, I’ll talk about four often neglected fundamentals of software design:
- Design loosely coupled software
- Actively reduce complexity through modularity
- Design for fast feedback
- You are (probably not) special - ignore the fundamentals at your peril
If you regularly, neglect these fundamentals, you’ll end up with a system that’s difficult to change. Conversely, if you pay attention to them, you will build higher quality and healthy software. Let’s look at each of these fundamentals in turn starting with designing loosely coupled software.