1. Comments
    1. C1: Inappropriate Information
    2. C2: Obsolete Comment
    3. C3: Redundant Comment
    4. C4: Poorly Written Comment
    5. C5: Commented-Out Code
  2. Environment
    1. E1: Build Requires More Than One Step
    2. E2: Tests Require More Than One Step
    3. Subtopic 3
    4. Subtopic 4
    5. Subtopic 5
    6. Subtopic 6
    7. Subtopic 7
  3. Functions
    1. F1: Too Many Arguments
    2. F2: Output Arguments
    3. F3: Flag Arguments
    4. F4: Dead Function
  4. General
    1. G1: Multiple Languages in One Source File
    2. G2: Obvious Behavior Is Unimplemented
    3. G3: Incorrect Behavior at the Boundaries
    4. G4: Overridden Safeties
    5. G5: Duplication
    6. G6: Code at Wrong Level of Abstraction
    7. G7: Base Classes Depending on Their Derivatives
    8. G8: Too Much Information
    9. G9: Dead Code
    10. G10: Vertical Separation
    11. G11: Inconsistency
    12. G12: Clutter
    13. G13: Artificial Coupling
    14. G14: Feature Envy
    15. G15: Selector Arguments
    16. G16: Obscured Intent
    17. G17: Misplaced Responsibility
    18. G18: Inappropriate Static
    19. G19: Use Explanatory Variables
    20. G20: Function Names Should Say What They Do
    21. G21: Understand the Algorithm
    22. G22: Make Logical Dependencies Physical
    23. G23: Prefer Polymorphism to If/Else or Switch/Case
    24. G24: Follow Standard Conventions
    25. G25: Replace Magic Numbers with Named Constants
    26. G26: Be Precise
    27. G27: Structure over Convention
    28. G28: Encapsulate Conditionals
    29. G29: Avoid Negative Conditionals
    30. G30: Functions Should Do One Thing
    31. G31: Hidden Temporal Couplings
    32. G32: Don’t Be Arbitrary
    33. G33: Encapsulate Boundary Conditions
    34. G34: Functions Should Descend Only One Level of Abstraction
    35. G35: Keep Configurable Data at High Levels
    36. G36: Avoid Transitive Navigation