Constraints are useful because they make choices visible. A small surface, a short deadline, or a narrow API can force a design to become more honest.
I try to name the constraint before solving around it. That keeps the tradeoff explicit and makes the next decision easier to review.
Rules make systems readable
A codebase with clear boundaries is easier to change than one with unlimited freedom. The best rules are plain, local, and easy to test.
Small decisions compound
- Prefer the boring primitive until the problem earns more structure.
- Make state transitions obvious.
- Leave names and comments that explain why the boundary exists.