What Makes for Good Software?

It has been claimed that software is one of the or the most complex human endeavors. I have no idea if that’s true or not, but it does get complex pretty quickly.

In this series, I will go through how I like to think about different software components.

With the goal of reducing complexity, the main strategy we have is divide and conquer. The guiding principle is splitting the overall complexity into smaller, less complex parts, and combining them. Since the entire point of this is to reduce complexity, our building blocks have to both

  1. Take something off our cognitive plate
  2. Combine with other components without surprises

What makes a good function?

What makes a good class?

Types