Minimize Cognitive Complexity
Guidelines for reducing the mental effort required to understand code
personal
## Guidelines for Minimizing Cognitive Complexity
Cognitive complexity refers to the mental effort required to understand code. Minimizing it makes code more maintainable and reduces the likelihood of bugs.
1. **Function and Component Size:**
- Keep functions and components small and focused on a single responsibility
- Aim for functions under 20-30 lines where possible
- Break large functions into smaller, well-named helper functions
- Consider the "screen rule" - a function should fit on one screen
2. **Control Flow Simplification:**
- Limit nesting to 2-3 levels maximum
- Extract deeply nested code into separate functions
- Use early returns to handle edge cases at the beginning of functions
- Replace complex conditionals with guard clauses
- Consider replacing nested if statements with switch statements or lookup tables
3. **Logical Expression Clarity:**
- Break complex Boolean expressions into well-named variables
- Limit logical operators in a single expression (3 or fewer conditions)
- Use positive conditions instead of negative ones where possible
- Avoid double negatives
4. **Abstraction and Encapsulation:**
- Hide implementation details behind clear interfaces
- Use composition to manage complex objects
- Create helper functions with descriptive names for complex operations
- Use meaningful design patterns that solve common problems
5. **State Management:**
- Minimize the number of state variables in a component
- Use consistent patterns for state updates
- Consolidate related state into objects or custom hooks
- Make state changes predictable and traceable
6. **Readability Techniques:**
- Use consistent formatting and whitespace
- Group related code together
- Add empty lines between logical sections
- Maintain consistent levels of abstraction within functions
7. **Documentation for Complex Logic:**
- Add comments explaining WHY for complex algorithms or business rules
- Document assumptions and edge cases
- Use meaningful variable names that explain their purpose
By reducing cognitive complexity, you make your code more approachable, easier to debug, and more maintainable in the long term - both for yourself and other developers.