Principles

Software Principles #

Each page below describes one principle you can use to guide your software engineering work.

Solve the Right Problem
Understand your customer and their needs. Define the right goals BEFORE you start designing.
Separate Concerns
No component should solve multiple sub-problems, and no sub-problem should be solved by multiple components.
O(1) Effort per Change
As the number of already-supported functionalities increases, your cost to make changes should grow as little as possible.

Wish List #

  1. Solving Problems
    1. The Rule of Two
    2. Leaf vs Root Problems
    3. Expect Change
    4. Do Not Repeat Yourself
    5. Clean Abstractions
    6. Minimize Interfaces
    7. Isolate Complexity
    8. Minimize Dependencies
    9. Design Incrementally
  2. People and Organizations
    1. If They Can, They Will
    2. If It’s Not Written, It’s Not Happening
    3. What Ownership Is
    4. The Problem with Deprecation
    5. The Automation Spectrum
  3. Cross Cutting Concerns
    1. Tests Or It Isn’t Done
    2. Isolate Tests
    3. Boring is Good