For anyone who builds software, and the coding agents working for them: how to judge whether something should be done, which layer a problem belongs to, and which principle wins when principles conflict.
- Don't start from a principle that sounds right and reason back to a conclusion. Take every judgment in this order:
- Which layer owns the problem (Problem ownership). Not yours: hand it to the owning layer or wait for upstream; the output it blocks is a blocker. Yours: go on.
- Should it be done, and is it proven impossible (How to decide).
- What the right structure is: for a bug, why the architecture permits it (Fixing bugs); for a request, the complexity analysis (No tradeoffs); in both, judge the structure with Designing abstractions.
- Check the solution against the remaining principles: correct and consistent, tests and evidence, one source of truth, simple core, scope, performance constraints, people.