Code Complexity Calculator
How complex is your code and does it need refactoring?
Find out if your code is maintainable or needs refactoring. Enter lines of code, number of conditional statements (if/else), and loops — see cyclomatic complexity score, maintainability rating, and recommended maximum function size. Assumes standard procedural or object-oriented code structure.
—
Send feedback
💡 Share your idea or report a problem
✓ Thanks! We'll take a look.
Learn more
How It Works
The formula, explained simply
Code complexity grows faster than most developers expect. A function with 10 if statements doesn't just have 10 possible paths — it has 2^10 or 1,024 potential execution routes. Each new conditional statement doubles the number of test cases needed for complete coverage, which is why a complexity score of 15 requires exponentially more testing effort than a score of 5.
This calculator measures cyclomatic complexity using the McCabe method: start with 1, then add 1 for every conditional statement (if, else if, switch case) and every loop (for, while, do-while). The result tells you how many independent paths exist through your code. Industry research shows that functions with complexity scores above 10 have significantly higher defect rates and maintenance costs.
The maintainability index combines complexity with code volume and operator usage to predict long-term maintenance difficulty. Scores below 20 indicate code that will be expensive to maintain, while scores above 85 suggest highly maintainable code. This calculator assumes standard procedural or object-oriented code structure without heavy use of functional programming patterns.
When To Use This
Right tool, right situation
Measure complexity during code reviews, especially for functions longer than 50 lines or containing more than 3 levels of nesting. Set up automated complexity monitoring in your build pipeline to catch complexity growth before it impacts maintainability. Most teams set complexity limits between 10-15 depending on their tolerance for technical debt.
Calculate complexity when deciding whether to refactor existing code or add new features to complex functions. If a function already has high complexity, adding new conditionals will push it further into the danger zone. Sometimes it's faster to refactor first rather than work around existing complexity.
Use complexity measurements when estimating testing effort and planning code reviews. Functions with complexity over 10 require significantly more test cases and review time than simpler functions. Factor this into sprint planning and quality assurance resource allocation.
Common Mistakes
Why results sometimes look wrong
The biggest mistake is ignoring complexity until code reviews become painful. Complexity accumulates gradually — each new feature adds a few more conditionals, and suddenly a clean 50-line function becomes a 300-line monster with complexity over 20. Teams that measure complexity early catch this drift before it becomes expensive to fix.
Another common error is focusing only on line count instead of decision complexity. A 200-line function with mostly sequential logic (complexity 3) is often more maintainable than a 50-line function packed with nested conditionals (complexity 15). Lines of code matter for readability, but complexity determines testing difficulty and bug density.
Developers also mistake cyclomatic complexity for overall code quality. Low complexity doesn't automatically mean good code — it just means fewer decision points. A function can have low complexity but poor naming, unclear purpose, or tight coupling to other modules. Use complexity as one quality metric alongside others like cohesion, coupling, and test coverage.
The Math
Worked examples and deeper derivation
Cyclomatic complexity follows the formula: M = E - N + 2P, where E is edges (decision points), N is nodes (statements), and P is connected components (usually 1). The simplified version used here is M = 1 + number of decision points, which counts each if, else if, case, for, while, and do-while as one decision point.
The maintainability index uses the formula: MI = 171 - 5.2 × ln(Halstead Volume) - 0.23 × Cyclomatic Complexity - 16.2 × ln(Lines of Code). Halstead Volume measures the mental effort required to understand code based on the number of unique operators and operands. Higher volume indicates more complex logic that requires greater cognitive load to comprehend.
For example, a 100-line function with 8 conditionals and 3 loops has complexity M = 1 + 8 + 3 = 12. If it contains 15 unique function calls and operators, the Halstead Volume would be approximately 100 × log₂(15) ≈ 389. This produces a maintainability index around 65, indicating moderate maintainability that could benefit from refactoring.
Expert Unlock
The thing most explanations skip
The McCabe complexity formula treats all decision points equally, but not all conditionals create equal maintenance burden. Guard clauses and early returns often reduce cognitive load despite increasing complexity score. Modern static analysis tools like SonarQube use modified complexity metrics that weight different types of branching differently — nested conditions score higher than sequential guard clauses.
What cyclomatic complexity score means my code needs refactoring?
Need something this doesn't cover?
Suggest a tool — we'll build it →