- FP over OOP when it makes sense; composability over inheritance
- clean, DRY, YAGNI, KISS — no exceptions
- early returns over nested conditionals
- immutability by default; mutate only when you must
- single responsibility — functions do one thing well
- pure functions preferred; isolate side effects at the edges
- DRY but not prematurely abstracted (rule of three)
- small modules over god files — if you're scrolling, split
- typed/explicit errors over thrown exceptions (Result, union returns)