1 It’s all about managing complexity
This chapter covers
- Why software systems get more complex over time
- The different challenges in object-oriented design
- Why we should keep improving our design over time
In 2010, I worked for this great internet company as part of a team responsible for billing. The company founder wrote the first version of the system 10 or 15 years before I joined. The logic was all within one or two very complex SQL Server stored procedures, which had thousands of lines of code each. It was time to refactor this existing billing infrastructure into something new. I can’t even count the number of hours we spent talking to our financial people so that we could create a design that would fit all their current and future needs.
The great news is that we made it. We could add new products or financial rules in hours with our new implementation. The financial team was so happy with us. Feature requests that in the past would take weeks now take a couple of days. The quality was also much higher. Our design was highly testable, so we rarely introduced regression bugs. Even our most junior engineer could easily navigate through the code and feel confident enough to make critical changes alone. In a word, our new design was simple.
I’ve been developing object-oriented software systems for 20 years and learned that, in an object-oriented system without a proper design, even simple things are just too hard. It doesn’t have to be like this.