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

Information systems have been simplifying so much of our lives. Imagine going to the doctor and having them manually search for the patient’s history. Or going to any store and waiting for the cashier to sum up the price of the items we’re buying. Fortunately, this isn’t the case for a long time now. We use software systems to help us organize complex information and have them available at the snap of our fingers. We, software engineers, must develop such systems and ensure that they can keep evolving.

Building a highly maintainable information system requires good design. Modern businesses tend to be quite extensive, as companies often operate on different fronts and offer different products; to be complex, with business rules full of variations; and evolve fast, requiring developers to keep implementing or changing existing functionality.

1.1 Designing simple object-oriented systems

1.1.1 Small units of code

1.1.2 Consistent objects

1.1.3 Proper dependency management

1.1.4 Good abstractions

1.1.5 Infrastructure properly handled

1.1.6 Well modularized

1.2 Simple design as a day-to-day activity

1.2.1 Reducing complexity is similar to personal hygiene

1.2.2 Consistently addressing complexity is cost-effective

1.2.3 High-quality code promotes good practices

1.2.4 Controlling complexity isn’t as difficult as it seems

1.2.5 Keep the design simple is a developer’s responsibility

1.2.6 Good enough designs

1.3 A short dive into the architecture of an information system

1.4 The example project: PeopleGrow!

1.5 Exercises

1.6 Summary