In short

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.

Verify it

  1. 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.
  2. Find each champion's hours in the team's sprint or capacity plan, not only in the charter.
  3. Open a test pull request that touches a sensitive path and confirm the champion group is requested and its approval is required before merge.
  4. Run the review-reach script for last quarter and explain every miss: a bypass, a path missing from CODEOWNERS or a rule that is not enforced.
  5. 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 prerequisitesAbout 35 minutes: 12 to read and 23 for the exercise

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.
Go to the guided practice

What does a security champion do?

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.

How do you choose champions and plan for turnover?

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.

How much time do champions need?

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.

What goes in a champion charter?

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.

What goes in a champion charter?
SectionWhat to decideExample
PurposeThe outcomes the program exists forSecurity decisions made inside teams, with AppSec on hard cases; fewer repeat findings
ScopeTeams and systems coveredEvery team that owns a tier-1 or internet-facing service; others on request
RoleWhat a champion doesDesign reviews for trust-boundary changes, sensitive-path code review, finding triage, a monthly team session
Not the roleExplicit exclusionsNo risk acceptance, no sole release sign-off, not the team's security ticket queue
TimeHours and how they are protectedHalf a day a week in sprint capacity; more during onboarding
Selection and termHow people join and leaveVolunteer with manager approval; 12-month renewable term; named backup; handover on exit
AppSec commitmentsWhat champions get in returnWeekly office hours, design-review response within 2 business days, an escalation channel
TrainingRequired and optional learningOnboarding path in the first 90 days, monthly advanced session, one external event a year
RecognitionHow the work countsGoal in the performance review, named in promotion criteria, conference budget
MeasuresHow success is judgedCoverage with an active champion, sensitive changes reviewed before merge, repeat findings by team
GovernanceOwner and review cadenceProgram lead owns the charter; reviewed every six months with engineering leadership
Sign-offWho commitsHead of engineering, AppSec lead, each champion's manager

How should champions be trained?

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/.

How should champions be trained?
Stage or teamFocusLearning path on this site
First 30 daysHow AppSec works here; injection and authorization at the data boundary; secretsDeveloper foundations: /learn/developer-foundations/
Days 30 to 90Threat-model a change, write a permission test plan, respond to a vulnerable dependencyAppSec in practice: /learn/appsec-practitioner/
Web and API teamsCSRF, CORS and CSP, rich text, field-level authorization, racesBrowser and API boundaries: /learn/browser-api-defense/
Platform and build teamsSBOMs, signatures and provenance; cluster, cloud and API boundariesFrom source to trusted release: /learn/supply-chain-assurance/ and Runtime and cloud defense: /learn/runtime-defense/
Identity-heavy teamsLogin, tokens, passkeys, recovery and authorization modelsIdentity through the whole lifecycle: /learn/identity-lifecycle/
Teams shipping AI featuresRetrieval isolation, tool authorization, output handlingSecure an AI application: /learn/ai-application-defense/
Senior championsOwnership, evidence, exceptions and maturity assessmentBuild an evidence-driven security program: /learn/security-program-assurance/

Route work between teams, champions and AppSec

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.

Configuration.github/CODEOWNERSPlain text
# .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/appsec

How do you measure a champions program?

Counts 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 past

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.

Compute review reach from pull-request data

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.

review_coverage.pyPython
"""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])

Avoid the failure modes that stall programs

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.

How does the program map to SAMM, BSIMM and SSDF?

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/.

How does the program map to SAMM, BSIMM and SSDF?
Program elementOWASP SAMM 2.2.0BSIMM16 activity (share of firms)
A champion with set hours in each teamEducation and Guidance, stream B, level 1: identify security championsSM2.3 Create or grow a security champions program (49.5%)
Champions brief their team and leaders on security statusStream B, level 1 quality criterion: periodic briefings from championsSM2.7 Create evangelism role and perform internal marketing (44.1%)
Advanced sessions and events for championsStream A, level 2: role-specific training that names championsT2.5 Enhance security champions through training and events (27.0%)
Learning paths by role and stackStream A, level 2T2.9 Deliver role-specific advanced curriculum (27.0%); T1.7 Deliver on-demand individual training (55.0%)
Office hours and an open channelStream B, level 3: a shared security community and portalT2.12 Provide expertise via open collaboration channels (40.5%)
Recruiting from training, office hours and CTFsStream B, level 3: the community surfaces future championsT3.6 Identify new security champions through observation (7.2%)
A chartered group that sets secure design standardsStream B, level 2: secure software center of excellenceSFD3.1 Form a review board to approve and maintain secure design patterns (14.4%)
Career credit for security skillsStream B, level 3: recognize the people who help others mostT3.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
Plain text
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. 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. 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. 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. 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. 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.

Your deliverable: A one-page update with coverage and review-reach figures and their denominators, three charter amendments and a revised dashboard.

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.

  1. OWASP SAMM 2.2.0: Education and Guidance, stream B (Organization and Culture)
  2. OWASP SAMM 2.2.0: Education and Guidance, stream A (Training and Awareness)
  3. BSIMM16 report (Black Duck): security champions data and activity descriptions. January 2026.
  4. OWASP Security Champions Guide: Secure management support
  5. OWASP Security Champions Guide: Nominate a dedicated captain
  6. OWASP Security Champions Guide: Anticipate personnel changes
  7. NIST SP 800-218: SSDF version 1.1 (PO.2 Implement Roles and Responsibilities). Version 1.1 (February 2022).
  8. GitHub Docs: About code owners
  9. GitHub Docs: Available rules for rulesets (require review from code owners)
  10. GitHub CLI manual: gh pr list

Reference information

Download this guide as Markdown