Developer security guide

Manual security review vs SAST: when to use each

Use SAST continuously for repeatable code patterns and policy enforcement; use manual review where security depends on business context, identity, data flow across components or whether a candidate is actually exploitable. Mature teams combine both.

Short answer: Use SAST continuously for repeatable code patterns and policy enforcement; use manual review where security depends on business context, identity, data flow across components or whether a candidate is actually exploitable. Mature teams combine both.

1. What each method actually sees

SAST inspects source or an intermediate representation using rules and data-flow models. It is fast to repeat on every change and good at known dangerous APIs, missing sanitization paths, hard-coded secrets and organization-specific banned patterns. Its result quality depends on language support, framework modeling and configuration.

A manual reviewer can ask why a route exists, compare roles, follow a workflow across repositories and decide whether a control matches the product's intended rule. That context is valuable for access control, tenant isolation, authentication flows, race conditions and risky integrations.

2. Choose by the question

QuestionSASTManual review
Does this diff introduce a known unsafe function?Strong, repeatableUseful for confirmation
Can tenant A reach tenant B through this workflow?Often weak without custom modelingStrong with product context
Did every repository follow one secure coding rule?Strong at scaleExpensive to repeat
Is the candidate exploitable with existing controls?May lack runtime contextCan validate evidence

3. Combine them without duplicating work

  1. Run a small, maintained SAST ruleset on pull requests and block only high-confidence policy violations.
  2. Triage new alerts against ownership, reachability and existing controls; record false-positive reasons.
  3. Schedule manual review around high-risk releases, new trust boundaries and sensitive architecture changes.
  4. Turn confirmed manual findings into regression tests and, where stable, custom SAST rules.
  5. Track coverage and remediation time, not a raw count of alerts.
pull request: fast SAST + secrets + dependency policy
nightly: deeper inter-file analysis
release gate: negative authorization tests
high-risk change: manual threat model and focused code review
confirmed finding: regression test, then reusable rule if possible

Common mistakes

  • Buying a scanner and calling its untriaged output an audit.
  • Blocking builds on noisy rules until developers ignore the system.
  • Using manual reviewers to rediscover simple patterns on every commit.
  • Measuring security by alert volume rather than verified coverage and fixes.
  • Running either method without a threat model or asset inventory.

Decision checklist

  • SAST language and framework support matches the codebase.
  • Rules have an owner, severity policy and false-positive process.
  • High-risk business flows are identified for manual review.
  • Manual findings include reproducible evidence and remediation.
  • Confirmed issues become regression tests.
  • Metrics distinguish candidate alerts from validated findings.
  • Generated code, dependencies and infrastructure configuration have separate coverage.

Limits

Neither method proves the deployed system is secure. SAST cannot observe many runtime configurations; manual review is time-bounded and can miss patterns. Dynamic testing, dependency analysis, secrets management and operational controls address different evidence and should be planned separately.

Primary sources

Choose review coverage for a release

Apply these controls to the actual code and product boundaries.

Discuss a code review