DevSecOps promises security integrated into every stage of the development lifecycle. The reality at most companies: security tools are bolted onto the CI/CD pipeline, generate hundreds of findings that nobody triages, and create friction that developers route around.
Effective DevSecOps is not about adding more security tools. It's about integrating security seamlessly into existing developer workflows so that the secure path is the easy path.
The DevSecOps Pipeline
Pre-Commit Build Test Deploy Runtime
┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Secret │ │ SAST │ │ DAST │ │ IaC Scanning │ │ WAF │
│ Scanning │ │ SCA │ │ Pen Testing │ │ Config Audit │ │ RASP │
│ Linting │ │ Container │ │ API Security │ │ Compliance │ │ SIEM │
│ IDE Plugin│ │ Scanning │ │ Testing │ │ Check │ │ Monitoring │
└──────────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
Stage 1: Pre-Commit
Goal: Catch secrets and obvious vulnerabilities before they enter the repository.
Tools:
- Secret scanning: Gitleaks or git-secrets as pre-commit hooks. Catches API keys, passwords, and tokens.
- IDE plugins: Snyk or SonarLint in the IDE provides real-time security feedback while coding.
Developer experience: Pre-commit hooks must run in under 5 seconds. Anything longer and developers will disable them.
Stage 2: Build (CI Pipeline)
Goal: Automated security scanning of code and dependencies on every commit.
SAST (Static Analysis):
- Run on every pull request
- Block merge on critical/high findings
- Warn on medium findings
- Ignore low/informational (reduce noise)
- Recommended: Semgrep (fast, customisable), SonarQube (comprehensive)
SCA (Dependency Scanning):
- Scan all dependencies on every build
- Block on known critical vulnerabilities with available patches
- Auto-create PRs for dependency updates (Dependabot, Renovate)
- Recommended: Snyk (best developer experience), OWASP Dependency-Check (free)
Container Scanning:
- Scan container images before pushing to registry
- Fail on critical vulnerabilities in base images
- Enforce approved base images
- Recommended: Trivy (fast, comprehensive), Snyk Container
Pipeline execution time target: Security scanning adds no more than 3-5 minutes to the pipeline. If it adds 15 minutes, developers will find ways to skip it.
Stage 3: Test (Pre-Production)
Goal: Test the running application for vulnerabilities that static analysis can't find.
DAST (Dynamic Analysis):
- Run against staging environment on each deployment
- Test authentication, authorisation, injection, and OWASP Top 10
- Recommended: OWASP ZAP (free, good API testing), Nuclei (template-based, fast)
API Security Testing:
- Test API authentication and authorisation boundaries
- Fuzz API inputs for injection and error handling
- Validate API schema conformance
Stage 4: Deploy
Goal: Ensure infrastructure is securely configured before deployment.
IaC Scanning:
- Scan Terraform/Bicep/CloudFormation for misconfigurations
- Enforce policies: no public storage, no open security groups, encryption enabled
- Recommended: Checkov, tfsec, KICS
Compliance as Code:
- Automated compliance checks against SOC 2, ISO 27001, CIS benchmarks
- Policy enforcement through Open Policy Agent (OPA) or Azure Policy
Stage 5: Runtime
Goal: Detect and respond to attacks and vulnerabilities in production.
- WAF: Block common attacks at the edge
- Runtime monitoring: Detect anomalous behaviour, unexpected network connections, privilege escalation
- Vulnerability monitoring: Continuous scanning of production for new CVEs in deployed components
Security Gates: When to Block vs Warn
The most common DevSecOps mistake is blocking too aggressively. If every medium-severity finding blocks the pipeline, developers spend more time triaging false positives than building features.
| Severity | Pre-Commit | CI/CD | Pre-Deploy | Production |
|---|---|---|---|---|
| Critical | Block | Block | Block | Alert + Auto-remediate |
| High | Block (secrets only) | Block (if fix available) | Block | Alert |
| Medium | Warn | Warn | Warn | Log |
| Low | Ignore | Ignore | Ignore | Log |
The principle: Block only when:
- The finding is definitely a real vulnerability (not a false positive)
- There's a clear fix available
- The risk is high enough to justify stopping the pipeline
Everything else is a warning that goes into the team's backlog.
The Security Champions Model
A centralised security team reviewing all code doesn't scale. Security champions embed security knowledge in every development team.
How to build it:
- Recruit volunteers (or identify interested developers) — 1 per team
- Provide training — OWASP, secure coding, threat modelling (quarterly)
- Give them time — 10-20% dedicated to security activities
- Create a community — monthly champions meetup for knowledge sharing
- Recognise contributions — visible acknowledgment of security work
Champion responsibilities:
- First triage of security findings for their team
- Security review of significant code changes
- Threat modelling participation for new features
- Mentoring team members on secure coding
Metrics That Matter
| Metric | What It Tells You | Target |
|---|---|---|
| Mean time to remediate (MTTR) | How fast do you fix vulnerabilities? | Critical: < 7 days, High: < 30 days |
| False positive rate | Is your tooling accurate? | Below 20% |
| Security debt | How many open vulnerabilities? | Trending down |
| Pipeline pass rate | Are security gates too aggressive? | Above 90% |
| Coverage | What % of code/repos have security scanning? | 100% |
| Developer satisfaction with security tooling | Is security friction manageable? | Positive trend |
Culture Change
The hardest part of DevSecOps is culture, not tooling.
What works:
- Security team presents as enablers, not blockers
- Security findings come with fix suggestions, not just problems
- Security team has office hours for developer questions
- Security is part of sprint planning, not an afterthought
- Blameless post-mortems for security incidents
What doesn't work:
- Naming and shaming teams with the most vulnerabilities
- Blocking deployments without explanation
- Security reviews that happen after the code is written and delay releases
- Security requirements that arrive at the last minute
DevSecOps is about making security a shared responsibility without making it everyone's burden. If you're building a DevSecOps programme, let's talk.