- Tests Pass - Code must work correctly
- Reveals Intention - Self-documenting, readable code with clear names
- No Business Logic Duplication - Eliminate redundant business logic (code repetition OK for clarity)
- Fewest Elements - Keep solutions simple
- Red: Write failing test
- Green: Minimal code to pass
- Refactor: Improve while keeping tests green
- Test behavior, not implementation
- Avoid mocks when possible
- Write simplest failing test first
- Descriptive names for everything
- One responsibility per component
- English for all code
- Extract when: Same business logic, same purpose
- Keep separate when: Different intent (create vs update), different contexts (frontend vs backend validation)
- Tests after implementation
- Complex tests
- "Just in case" features
- Code requiring extensive comments
- What's the simplest test that could fail?
- Does this make intent clearer?
- Am I repeating business logic that should be unified?
- Can I remove anything without losing value?