A security champion is an engineer who stays in a product team and spends agreed, protected time on its security work: design reviews, review of sensitive changes, finding triage and coaching. Recruit volunteers with manager approval, give every in-scope team a champion and a backup, write the role and hours into a one-page charter, train champions on their own stack, and connect them to AppSec through code ownership and office hours. Measure coverage and outcomes, not attendance.
- Protect the hours in the team's capacity plan. SAMM expects a set number of hours a week, and an unprotected role loses to sprint work.
- Recruit volunteers with their manager's approval. BSIMM16 notes that enthusiastic volunteers are easier to lead than a drafted group.
- Give every in-scope team a champion and a backup, and make a champion group, not one person, the code owner of sensitive paths.
- Champions extend AppSec; they don't replace it. Risk acceptance stays with accountable owners, and hard cases go to AppSec.
- Measure coverage, review of sensitive changes, triage times and repeat findings against each team's own baseline. Attendance and badge counts are inputs, not results.
- Map the program to SAMM Education and Guidance and to BSIMM16 activities SM2.3, T2.5 and T3.6, citing the edition.
| Setting | Value | Note | Source |
|---|---|---|---|
| Coverage | One named champion per in-scope team, plus a named backup | SAMM asks for a champion in each team; a backup or shared pool keeps coverage through turnover. | OWASP SAMM 2.2.0 G-EG-B-1; OWASP Security Champions Guide, principle 10 |
| Scale check (650 or more developers) | About 3 champions per 100 developers | BSIMM16 median among large firms that have champions; smaller firms had a median of 6.4. The OWASP guide gives 1 per 25 as an example. | BSIMM16, Table 6 |
| Protected time | Half a day a week (about 10%), entered as reduced sprint capacity | Local starting point. SAMM requires a set number of hours but gives no figure. | OWASP SAMM 2.2.0 G-EG-B-1 |
| Term | 12 months, renewable, with a handover to the backup | Local choice that makes leaving the role routine. | — |
| Active champion | At least one recorded security contribution in the last 90 days | Local definition used for coverage. | — |
| AppSec support | Weekly office hours and an open channel; design-review response within 2 business days | The response target is local. | BSIMM16 T2.12 |
| Advanced training | Monthly champion session built from the organization's own findings | — | BSIMM16 T2.5; OWASP SAMM 2.2.0 G-EG-A-2 |
| Sensitive-path review | Champion group and AppSec as code owners; Require review from Code Owners in a ruleset | — | GitHub Docs: About code owners |
- List in-scope teams from the service inventory and confirm each has a named champion and backup with a recorded contribution in the last 90 days.
- Find each champion's hours in the team's sprint or capacity plan, not only in the charter.
- Open a test pull request that touches a sensitive path and confirm the champion group is requested and its approval is required before merge.
- Run the review-reach script for last quarter and explain every miss: a bypass, a path missing from
CODEOWNERSor a rule that is not enforced. - Compare each team's repeat findings and pre-release share with its own figures from before its champion started.
- Applies to
- OWASP SAMM 2.2.0 (July 2026)
- BSIMM BSIMM16 (January 2026); activity IDs change between editions
- NIST SSDF 1.1 (SP 800-218); 1.2 was still a draft on 11 October 2026
- GitHub CODEOWNERS and rulesets github.com, October 2026
- GitHub CLI 2.94 tested; script needs Python 3.11 or later
Engineering organizations scaling AppSec through embedded champions. Champion programs stall without protected time.
- Part of
- Workflow: Build an AppSec program
Learning goals and prerequisites
What you will learn
- Write a charter that fixes the role, protected hours, selection, training and measures.
- Route sensitive changes and findings through champions and AppSec with CODEOWNERS and escalation rules.
- Measure coverage, review reach and outcomes against each team's own baseline.
- Map the program to SAMM 2.2.0 and BSIMM16 without overstating what it covers.
Before you start
AppSec leads, engineering managers and engineers who start, run or assess a security champions program
- Know how your teams plan sprints and review pull requests.
- Have, or be able to build, a list of services and the teams that own them.
- For the code: the GitHub CLI and Python 3.11 or later.
A security champion is a developer, tester, SRE or product engineer who stays in their team and spends part of each week on that team's security work. OWASP SAMM 2.2.0 makes this its first Organization and Culture activity: a champion in every development team who links the team to the security function, with a fixed weekly time budget, regular briefings and extra training. BSIMM16 describes the same group, which it used to call the satellite. The point is reach. A central AppSec team cannot sit in every design discussion or read every pull request; a champion is already there.
Decide what the program must change before you recruit anyone, and write it down. Useful goals include security questions answered inside the team the same day, risky changes reviewed before merge by someone who knows the code, findings triaged within the SLA and fewer repeats of the same weakness. Champions do not accept risk for the business, sign off releases alone or become the team's security ticket queue. Risk acceptance stays with an accountable owner, and AppSec keeps the expert review. Within those limits, a champion's week usually covers:
- Join design and threat-modeling sessions for changes that cross a trust boundary.
- Review, or route to AppSec, pull requests that touch authentication, authorization, cryptography, secrets, payments or the build pipeline.
- Triage scanner and external test findings before they reach the backlog, adding the context a tool lacks.
- Teach the team from its own findings in short sessions.
- Escalate anything novel, high-impact or disputed to AppSec.
Ask for volunteers, and get each one's manager to approve in writing. BSIMM16 describes three ways to form the group: spot people who stand out in training, ask for volunteers, or assign members for coverage and keep those who perform. It also observes that enthusiastic volunteers are easier to lead than draftees. Look for someone peers already ask for help, who knows the codebase and can explain a risk calmly. Curiosity and credibility matter more than seniority. Don't load the role onto a tech lead who already handles every escalation.
SAMM's level-1 activity asks for a champion in each team. The OWASP Security Champions Guide warns that a strict one-per-team model breaks when people leave, and suggests pooling champions by specialism at a sensible ratio, giving one per 25 developers as an example for large organizations. Do both: a named champion and a named backup for each in-scope team, plus a shared pool for topics such as cloud, mobile or cryptography. For scale, the median among BSIMM16 firms with 650 or more developers and a champions program was 3 champions per 100 developers; among smaller firms with champions it was 6.4. Use 12-month renewable terms, so leaving the role is normal and comes with a handover to the backup.
SAMM expects champions to have a set number of hours each week for security work but gives no figure. The OWASP guide explains why the time must be formal: when priorities conflict, sprint commitments win unless management has made security work an agreed priority. Start with half a day a week, about 10 percent, entered as reduced capacity in sprint planning. Raise it during onboarding or a major design cycle, and lower it only by agreement with the program lead.
Make the work count. Put a champion goal in the performance review, name the role in promotion criteria and fund one external training or conference a year. BSIMM16 notes that the prospect of real career progression changes behavior, while mugs and t-shirts mostly lift morale. Give the program an owner, too. Interviews behind the OWASP guide found that leading a champions program is a full-time job, and larger organizations may need a small team.
A charter turns an informal arrangement into a commitment that survives a reorganization. Keep it to one page, have engineering leadership, AppSec and each champion's manager sign it, and review it every six months. SAMM likewise expects a charter for the center of excellence it describes at level 2. Adapt the examples; they are starting points, not requirements.
| Section | What to decide | Example |
|---|---|---|
| Purpose | The outcomes the program exists for | Security decisions made inside teams, with AppSec on hard cases; fewer repeat findings |
| Scope | Teams and systems covered | Every team that owns a tier-1 or internet-facing service; others on request |
| Role | What a champion does | Design reviews for trust-boundary changes, sensitive-path code review, finding triage, a monthly team session |
| Not the role | Explicit exclusions | No risk acceptance, no sole release sign-off, not the team's security ticket queue |
| Time | Hours and how they are protected | Half a day a week in sprint capacity; more during onboarding |
| Selection and term | How people join and leave | Volunteer with manager approval; 12-month renewable term; named backup; handover on exit |
| AppSec commitments | What champions get in return | Weekly office hours, design-review response within 2 business days, an escalation channel |
| Training | Required and optional learning | Onboarding path in the first 90 days, monthly advanced session, one external event a year |
| Recognition | How the work counts | Goal in the performance review, named in promotion criteria, conference budget |
| Measures | How success is judged | Coverage with an active champion, sensitive changes reviewed before merge, repeat findings by team |
| Governance | Owner and review cadence | Program lead owns the charter; reviewed every six months with engineering leadership |
| Sign-off | Who commits | Head of engineering, AppSec lead, each champion's manager |
Train in three stages: an onboarding path in the first 90 days, a monthly advanced session, and a specialism once the basics stick. SAMM's role-specific training activity says champions get what developers and testers get, plus threat modeling, secure design and the security tools in the build. BSIMM16 activity T2.5 is explicit that champion training means customized material and events, not routine brown bags or standard e-learning. Build sessions from your own findings and recent penetration test results; people remember bugs in code they recognize. The learning paths on this site map onto the stages as the table shows; the wider developer curriculum the champions help deliver is described in /frameworks/developer-security-training/.
| Stage or team | Focus | Learning path on this site |
|---|---|---|
| First 30 days | How AppSec works here; injection and authorization at the data boundary; secrets | Developer foundations: /learn/developer-foundations/ |
| Days 30 to 90 | Threat-model a change, write a permission test plan, respond to a vulnerable dependency | AppSec in practice: /learn/appsec-practitioner/ |
| Web and API teams | CSRF, CORS and CSP, rich text, field-level authorization, races | Browser and API boundaries: /learn/browser-api-defense/ |
| Platform and build teams | SBOMs, signatures and provenance; cluster, cloud and API boundaries | From source to trusted release: /learn/supply-chain-assurance/ and Runtime and cloud defense: /learn/runtime-defense/ |
| Identity-heavy teams | Login, tokens, passkeys, recovery and authorization models | Identity through the whole lifecycle: /learn/identity-lifecycle/ |
| Teams shipping AI features | Retrieval isolation, tool authorization, output handling | Secure an AI application: /learn/ai-application-defense/ |
| Senior champions | Ownership, evidence, exceptions and maturity assessment | Build an evidence-driven security program: /learn/security-program-assurance/ |
Write down when a champion acts alone and when AppSec joins. Champions handle routine design questions, sensitive-path reviews and first-pass triage. They bring in AppSec for new architectures, authentication and cryptography designs, high-severity findings and anything disputed. SAMM adds a useful check: the champion reviews external test results before they enter the backlog. In return, give champions direct access: weekly AppSec office hours and an open chat channel, as in BSIMM16 activity T2.12, a monthly champions meeting and a promised response time for design reviews.
Encode the routing in the repository so it doesn't depend on memory. On GitHub, list the champion group and AppSec as code owners of sensitive paths, then turn on Require review from Code Owners in a branch ruleset. The last matching pattern wins, an approval from any listed owner satisfies the rule, and each team needs explicit write access to the repository. Name a team rather than a person, so a holiday or a resignation neither blocks merges nor silently drops the review. Make AppSec the owner of the CODEOWNERS file itself, and keep the ruleset's bypass list short.
# .github/CODEOWNERS: the last matching pattern wins.
# Default owner for everything: the product team.
* @acme/payments-dev
# Security-sensitive paths. An approval from any listed owner satisfies
# "Require review from Code Owners", so list the champion group, not one person.
/src/auth/ @acme/payments-champions @acme/appsec
/src/crypto/ @acme/payments-champions @acme/appsec
**/migrations/ @acme/payments-champions @acme/appsec
/.github/workflows/ @acme/payments-champions @acme/appsec
Dockerfile @acme/payments-champions @acme/appsec
# Only AppSec changes who owns what.
/.github/CODEOWNERS @acme/appsecCounts of champions, training hours, meeting attendance, badges and chat messages describe effort. All of them can rise while risky changes still merge unreviewed. Track them as inputs if you like, but report measures that the program should move:
- Coverage: in-scope teams, taken from the service inventory, with an active champion and a named backup.
- Review reach: merged changes to sensitive paths that a champion or AppSec approved before merge.
- Triage: findings in each team confirmed, rejected or routed within the SLA.
- Outcomes: the share of first-party findings caught before release, and repeats of the same CWE in the same service.
- Retention: champions still active after a year, and backups who stepped up when someone left.
Compare each team with its own baseline from before its champion started, not with other teams. Teams that volunteer first may already be the strongest, so a league table can flatter them and hide whether anything changed. BSIMM16 shows the same trap at firm level: 96 percent of the top-scoring fifth of firms have champions, against 30 percent of the bottom fifth. That is a correlation, not proof that champions raised the scores. Use the escape-rate and repeat definitions from /frameworks/appsec-metrics-and-slas/, so the numbers mean the same thing in every team.
Review reach is easy to get wrong by hand. This script reads a GitHub CLI export and lists sensitive pull requests that merged without a champion or AppSec approval. Explain each miss: a bypass, a path missing from CODEOWNERS or a rule that is not enforced. The CLI returns at most 100 files and 100 reviews per pull request, so the script lists larger ones for a manual check.
"""Share of merged PRs that touch sensitive paths and were approved by a
champion or AppSec reviewer before merge. Export the PRs first:
gh pr list --state merged --search "merged:2026-07-01..2026-09-30" \
--json number,mergedAt,files,reviews --limit 1000 > prs.json
"""
import json
import sys
from datetime import datetime
# Champion group + AppSec, e.g. from: gh api orgs/acme/teams/payments-champions/members
REVIEWERS = {"ana-ch", "omar-ch", "lee-appsec"}
def is_sensitive(path):
# Keep these rules in step with the sensitive entries in CODEOWNERS.
parts = path.split("/")
return (path.startswith(("src/auth/", "src/crypto/", ".github/workflows/"))
or "migrations" in parts[:-1] or parts[-1] == "Dockerfile")
def approved_before_merge(pr, reviewers):
merged = datetime.fromisoformat(pr["mergedAt"])
return any(r["state"] == "APPROVED" and r["author"]["login"] in reviewers
and datetime.fromisoformat(r["submittedAt"]) <= merged
for r in pr["reviews"])
def review_coverage(prs, reviewers=REVIEWERS):
sensitive = [p for p in prs if any(is_sensitive(f["path"]) for f in p["files"])]
missed = [p["number"] for p in sensitive if not approved_before_merge(p, reviewers)]
return len(sensitive), len(sensitive) - len(missed), missed
if __name__ == "__main__":
prs = json.load(open(sys.argv[1]))
total, ok, missed = review_coverage(prs)
print(f"sensitive PRs: {total}; approved before merge: {ok}; missed: {missed}")
# gh returns at most 100 files and 100 reviews per PR; check these by hand.
print("check manually:", [p["number"] for p in prs if len(p["files"]) >= 100])A program can fail quietly: the launch goes well, and six months later the role is only a title. Watch for these patterns:
- Drafted champions with no hours: the work happens only when nothing else is due.
- The dumping ground: every security ticket is assigned to the champion, who burns out and leaves the role.
- One person per team and no backup: coverage disappears when they change teams.
- Ticket forwarding: AppSec pushes raw scanner output through champions, and teams learn to ignore it.
- Generic training: brown bags and standard e-learning rarely build design-review skills.
- Unrewarded work: effort that doesn't count in reviews loses to effort that does.
- Risk decisions by proximity: whoever is in the room, often the champion, ends up accepting risk.
- Attendance dashboards: the chart looks healthy while sensitive changes merge unreviewed.
Assessors use these models, so map the program to them and cite the edition. Percentages show the share of the 111 BSIMM16 firms in which each activity was observed. BSIMM activity numbers change between editions, and NIST SSDF 1.1 still cites BSIMM12 numbers. In SSDF 1.1, task PO.2.1 names security champions among the roles to define, and PO.2.2 asks for role-based training; the SSDF 1.2 revision was still a draft in October 2026. For choosing between the three models, see /frameworks/bsimm-samm-ssdf/.
| Program element | OWASP SAMM 2.2.0 | BSIMM16 activity (share of firms) |
|---|---|---|
| A champion with set hours in each team | Education and Guidance, stream B, level 1: identify security champions | SM2.3 Create or grow a security champions program (49.5%) |
| Champions brief their team and leaders on security status | Stream B, level 1 quality criterion: periodic briefings from champions | SM2.7 Create evangelism role and perform internal marketing (44.1%) |
| Advanced sessions and events for champions | Stream A, level 2: role-specific training that names champions | T2.5 Enhance security champions through training and events (27.0%) |
| Learning paths by role and stack | Stream A, level 2 | T2.9 Deliver role-specific advanced curriculum (27.0%); T1.7 Deliver on-demand individual training (55.0%) |
| Office hours and an open channel | Stream B, level 3: a shared security community and portal | T2.12 Provide expertise via open collaboration channels (40.5%) |
| Recruiting from training, office hours and CTFs | Stream B, level 3: the community surfaces future champions | T3.6 Identify new security champions through observation (7.2%) |
| A chartered group that sets secure design standards | Stream B, level 2: secure software center of excellence | SFD3.1 Form a review board to approve and maintain secure design patterns (14.4%) |
| Career credit for security skills | Stream B, level 3: recognize the people who help others most | T3.1 Reward progression through curriculum (7.2%) |
Guided practice
Larch Software started a champions program six months ago, and leadership asks whether it works. Use the records below to measure coverage and review reach, fix the charter and replace the dashboard. Teams, people and figures are fictional.
Supplied scenario material
As of 2026-10-01. Charter scope: tier-1 and tier-2 teams. Active = a recorded contribution in the last 90 days.
team tier devs champion backup hours/week last contribution sensitive PRs Q3 approved before merge
checkout 1 24 Ana Raj 4 2026-09-28 31 29
identity 1 18 Omar - 4 2026-09-30 22 22
search 1 20 Lee Mia 0 2026-05-02 17 6
billing 1 16 - - - - 12 3
mobile 2 22 Sam Tom 4 2026-09-15 9 8
data 2 25 Kim - 2 2026-08-20 14 7
docs-site 3 15 - - - - 1 0
Repeats (same CWE in the same service), six months before vs six months since the champion started: checkout 4 -> 1, identity 1 -> 0, search 2 -> 3.
Charter excerpt: "Champions may approve risk exceptions for their team's findings up to High severity."
Current dashboard: 11 people completed champion training; 94% meetup attendance; 410 answers in the security channel; 9 badges awarded.1. Measure coverage
Count in-scope teams with an active champion, and with an active champion and a backup.
Expected result and reasoning
Six teams are in scope; docs-site is tier 3. The 90-day window starts on 2026-07-03, so checkout, identity, mobile and data have active champions, search's champion has been inactive since May, and billing has none: 4 of 6. Only checkout and mobile also have a backup: 2 of 6.
2. Compute review reach
Total the sensitive pull requests for in-scope teams and name the weakest teams.
Expected result and reasoning
75 of 105 sensitive pull requests (71%) had a champion or AppSec approval before merge. Billing (3 of 12), search (6 of 17) and data (7 of 14) are the gaps; search's champion has zero planned hours.
3. Fix the charter
List the charter and staffing changes the records call for.
Expected result and reasoning
Delete the clause that lets champions approve risk exceptions and route exceptions to the accountable owner. Restore search's hours or hand the role to Mia. Name backups for identity and data, recruit a champion for billing, and add billing's sensitive paths to
CODEOWNERS.4. Replace the dashboard
Decide which panels to keep as inputs and which measures to report instead.
Expected result and reasoning
Training completions, attendance, channel answers and badges are inputs. Report coverage (4 of 6 active, 2 of 6 with a backup), review reach (75 of 105, naming billing and search), triage within SLA by team, and repeats against each team's own baseline: checkout and identity improved, search got worse.
5. Map to SAMM and BSIMM
Say what the program can claim today and what blocks a stronger claim.
Expected result and reasoning
SAMM Education and Guidance stream B level 1 asks for a champion with set hours in every team, so billing and search block the claim. The program is evidence for BSIMM16 SM2.3. T2.5 needs champion-specific training or events rather than general meetups, and T3.6 needs a deliberate way to spot new champions.
Paper exercise with fictional teams. With real data, take the team list from the service inventory and pull-request data from the forge API, as the script above does.
Save a draft on this device to resume later. Automatic saving begins after you choose Save. Drafts are never sent by this application; use synthetic data.
No draft saved on this device yet.
Sources & further reading
The standards, specifications and documentation behind the guidance above. Each is the evidence for a claim on this page; consult it for detail beyond the defaults and versions listed here.
- OWASP SAMM 2.2.0: Education and Guidance, stream B (Organization and Culture)
- OWASP SAMM 2.2.0: Education and Guidance, stream A (Training and Awareness)
- BSIMM16 report (Black Duck): security champions data and activity descriptions. January 2026.
- OWASP Security Champions Guide: Secure management support
- OWASP Security Champions Guide: Nominate a dedicated captain
- OWASP Security Champions Guide: Anticipate personnel changes
- NIST SP 800-218: SSDF version 1.1 (PO.2 Implement Roles and Responsibilities). Version 1.1 (February 2022).
- GitHub Docs: About code owners
- GitHub Docs: Available rules for rulesets (require review from code owners)
- GitHub CLI manual: gh pr list
Reference information
- SDLC phase
- TestingSecurity program