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 #
- Solving Problems
- The Rule of Two
- Leaf vs Root Problems
- Expect Change
- Do Not Repeat Yourself
- Clean Abstractions
- Minimize Interfaces
- Isolate Complexity
- Minimize Dependencies
- Design Incrementally
- People and Organizations
- If They Can, They Will
- If It’s Not Written, It’s Not Happening
- What Ownership Is
- The Problem with Deprecation
- The Automation Spectrum
- Cross Cutting Concerns
- Tests Or It Isn’t Done
- Isolate Tests
- Boring is Good