- Follow established patterns in the codebase before introducing new ones
- Prioritize consistency across similar modules and flows
- Use feature specs for feature-level design decisions
- Use ADRs for system-wide decisions that affect multiple features
- Handle expected failures explicitly
- Return actionable errors with context, not generic messages
- Keep interfaces small and explicit
- Isolate side effects from core business logic when practical