Fix the scope first: teams, products, period and sampling method. SAMM version 2 has 15 practices in five business functions; each practice has two streams with one activity at each of three maturity levels. Each activity is answered from “no” to “yes for most” and scores 0 to 1, so a practice scores 0 to 3. Check every answer against operating records rather than interviews, keep counterexamples, and fund the few improvements that remove a cause.
- SAMM version 2 has five business functions (Governance, Design, Implementation, Verification and Operations), with three practices each.
- Each practice has two streams, A and B, and each stream has one activity at each of maturity levels 1, 2 and 3.
- An activity scores 0, 0.25, 0.5 or 1 (no, yes for some, yes for half, yes for most); a stream adds its three activities and a practice averages its two streams.
- Interviews describe what people believe happens. Score against records of real changes and keep the gap visible.
- BSIMM is descriptive, recording what participating firms were observed to do; SAMM is a prescriptive model for planning improvement.
- Confirm the assessment record names the teams, products, period and sampling method.
- For three answers of “Yes, for most”, open the operating records that support each.
- Recompute one practice score from its six activity answers.
- Check that each roadmap item has an owner, capacity and a measurable acceptance condition.
- Applies to
- OWASP SAMM 2.2.0 (core model, July 2026); version 2 scoring
Evidence-based maturity assessment and roadmap planning. Self-assessment scores need explicit sampling and confidence.
- Part of
- Learning path: Build an evidence-driven security program (step 7 of 11). Workflow: Build an AppSec program
Learning goals and prerequisites
What you will learn
- Compare interview claims with a defined eligible population.
- Separate activity coverage, quality and action ownership.
- Select causal improvements and avoid unsupported maturity-level claims.
Before you start
AppSec leads and assessors running a SAMM assessment for a group of teams
- Distinguish an organization's process capability from a product's tested behavior.
Refresh first: Run an AppSec program: owners, finding states, deadlines and champions
Go to the guided practiceOWASP SAMM version 2 organizes improvement across five business functions and fifteen security practices. A maturity assessment asks whether defined activities operate within a chosen scope; it does not score the security of every product. Define teams, products, time period and assessment method before collecting answers. Different teams can have different practices, so averaging them into one number can hide the service where a critical activity is absent.
The fictional Ash group has three teams and twenty eligible design changes during one quarter. Its interview says all important designs are reviewed, but records cover only twelve changes. The assessment must preserve that mismatch. Choose a representative or risk-based sample and state its limits. A convenience sample of the team's best release is not evidence for the entire quarter. Where this guide uses numerical coverage, it is an internal measure of supplied evidence, not the official SAMM scoring algorithm.
SAMM version 2 arranges 15 security practices under five business functions, as in the table. Each practice has two streams, A and B, and each stream describes one activity at each of three maturity levels. Ash’s design reviews fall mainly under Design: Threat Assessment, whose stream B is Threat Modeling, with follow-up in Verification: Architecture Assessment.
The assessment answers one question per activity with “No” (0), “Yes, for some” (0.25), “Yes, for half” (0.5) or “Yes, for most” (1). A stream’s score is the sum of its three activities, so it ranges from 0 to 3; a practice averages its two streams, and business functions and the overall score average the levels below them. Because averages hide a missing activity, report the stream scores and the evidence behind each answer, not only the overall number. SAMM’s “percent to target” and “progress to date” measures compare current scores with a chosen target and baseline, which suits a roadmap better than chasing a perfect 3.
The current release of the SAMM core model is 2.2.0, published in the owaspsamm/core repository on 6 July 2026; its answer sets keep the 0, 0.25, 0.5 and 1 values, though the wording of the scale varies by activity (applications, teams, components or training). For how SAMM differs from BSIMM and NIST SSDF, see /frameworks/bsimm-samm-ssdf/.
| Business function | Security practices |
|---|---|
| Governance | Strategy and Metrics; Policy and Compliance; Education and Guidance |
| Design | Threat Assessment; Security Requirements; Secure Architecture |
| Implementation | Secure Build; Secure Deployment; Defect Management |
| Verification | Architecture Assessment; Requirements-driven Testing; Security Testing |
| Operations | Incident Management; Environment Management; Operational Management |
Record one row per activity with the answer and the evidence behind it, not only the score. A reviewer can then sample rows and follow the evidence, and next year's assessment can compare like with like. The sample covers the Design function for the fictional Ash group.
function,practice,stream,level,answer,evidence
Design,Threat Assessment,A,1,0.5,risk profiles for 2 of 3 teams
Design,Threat Assessment,A,2,0.25,one central risk catalog entry
Design,Threat Assessment,A,3,0,
Design,Threat Assessment,B,1,0.5,12 of 20 eligible changes reviewed
Design,Threat Assessment,B,2,0,
Design,Threat Assessment,B,3,0,
Design,Security Requirements,A,1,1,requirements files in all three repositories
Design,Security Requirements,A,2,0.25,ASVS baseline used by API team only
Design,Security Requirements,A,3,0,
Design,Security Requirements,B,1,0.5,vendor questionnaire for 2 of 4 suppliers
Design,Security Requirements,B,2,0,
Design,Security Requirements,B,3,0,
Design,Secure Architecture,A,1,1,
Design,Secure Architecture,A,2,0,
Design,Secure Architecture,A,3,0,
Design,Secure Architecture,B,1,0.25,TLS and secrets standards documented
Design,Secure Architecture,B,2,0,
Design,Secure Architecture,B,3,0,The script applies the scoring described above: a stream is the sum of its three activity answers, a practice is the mean of its two streams and a business function is the mean of its practices. It rejects answers other than 0, 0.25, 0.5 and 1 and flags any positive answer with no evidence. On the sample it prints Threat Assessment 0.625, Security Requirements 0.875 and Secure Architecture 0.625, a Design function score of 0.708, and flags Secure Architecture stream A level 1, which claims "most or all" with no evidence. Report the stream scores and the flags, not only the function score. Tested with Python 3.14.
"""Score SAMM answers: stream = sum of its three activity answers (0-3), practice = mean of
its two streams, business function = mean of its practices. Flags answers above 0 without evidence.
Usage: python samm_score.py samm-answers.csv
"""
import csv
import sys
from collections import defaultdict
from statistics import mean
ALLOWED = {0.0, 0.25, 0.5, 1.0}
def score(rows):
streams = defaultdict(float)
for r in rows:
answer = float(r["answer"])
if answer not in ALLOWED:
raise ValueError(f"{r['practice']} {r['stream']}{r['level']}: answer must be 0, 0.25, 0.5 or 1")
if answer > 0 and not r["evidence"].strip():
print(f"NO EVIDENCE {r['practice']} stream {r['stream']} level {r['level']} (answer {answer})")
streams[(r["function"], r["practice"], r["stream"])] += answer
practices = defaultdict(list)
for (function, practice, _), value in streams.items():
practices[(function, practice)].append(value)
functions = defaultdict(list)
for (function, practice), values in practices.items():
print(f"{practice:24} streams {' / '.join(f'{v:.2f}' for v in values)} practice {mean(values):.3f}")
functions[function].append(mean(values))
for function, values in functions.items():
print(f"{function} function score {mean(values):.3f}")
if __name__ == "__main__":
with open(sys.argv[1], newline="", encoding="utf-8") as f:
score(list(csv.DictReader(f)))Interview answers explain how the team believes work happens. Operating records show whether the claimed activity occurred: design decisions, review comments, release gates, security tests and follow-up actions. A template proves the organization can create a record; it does not prove engineers used it. A calendar invitation proves a meeting was scheduled; it does not show the threat was considered or an action closed. Assess the substantive behavior required by the selected SAMM activity and quality criteria.
In Ash's sample, four reviewed designs lack an identified trust boundary and three resulting actions have no owner. Those gaps matter even where a review record exists; /domains/appsec/threat-modeling/threat-modeling-methods/ describes what a complete review records. Counting documents can overstate the maturity of the practice. A stronger assessment reads the rationale and follows one finding into delivery, looking for a decision that changed the product. Evidence of a missed high-risk change should lower confidence in the claimed scope and trigger investigation rather than be excluded as an outlier.
A useful roadmap addresses causes and dependencies. If teams cannot identify which changes need review, adding a more elaborate review template may produce better paperwork for the same incomplete population. If actions lack owners, more assessments may expand a queue that nobody can resolve. Choose a small set of improvements with accountable roles, capacity and measurable acceptance criteria. The sequence should reflect current consequences rather than a desire to raise every maturity score equally.
Ash has capacity for two initiatives. One defines review triggers and integrates them into change intake; another creates action ownership and expiry rules. Advanced automation can follow after the underlying decision rules are stable. This is a tradeoff: delaying automation sacrifices immediate scale, but automating an ambiguous process can institutionalize its blind spots. SSDF can help connect the selected improvements to lifecycle work (/frameworks/ssdf-product-lifecycle/), while SAMM remains the chosen maturity model. A cross-reference does not make the models interchangeable.
Reassessment should use the same scope and definitions, or explicitly document changes. Compare eligible changes, review coverage, review quality and action completion. If intake improves and discovers more eligible changes, a lower apparent coverage percentage may reflect a more honest denominator. Do not remove late or failed work from the cohort simply because it would lower the score. Retain the previous assessment and explain how new evidence changes confidence.
The exercise's next-quarter target is a local operating goal: at least 90% of eligible changes reviewed, all reviewed high-risk changes with a trust-boundary argument, and all actions assigned an owner and due date. Meeting it would demonstrate progress on these measures, not automatic achievement of a named SAMM maturity level. Apply the official assessment's activity questions and quality criteria before making a level claim. This distinction lets teams use quantitative feedback without fabricating a certification from a dashboard.
Guided practice
Assess Ash’s design-review practice and choose two funded improvements from the supplied evidence.
Supplied scenario material
Scope: teams API, Data, Web; quarter Q3; 20 changes met documented eligibility criteria.
Interview claim: all important designs reviewed.
Evidence: 12/20 changes have review records; 4 of those 12 lack a trust-boundary argument; 5 high-risk changes total, only 3 reviewed.
Review actions: 9 total, 6 have owner+due date, 3 have neither.
Budget: two initiatives this quarter. Options: A trigger integration (2 weeks), B action ownership workflow (1 week), C new dashboard theme (1 week), D AI review automation before criteria defined (4 weeks).
Fictional owner Maya has delivery authority; assessor Pavel evaluates evidence.
Next-quarter local target: >=90% eligible reviews; every reviewed high-risk change has a boundary argument; every action has owner+due date. These are local measures, not SAMM scoring rules.1. Calculate the actual coverage
Compute overall and high-risk review coverage.
Expected result and reasoning
Overall 12/20 = 60%; high-risk 3/5 = 60%. The interview claim is unsupported. Review existence and substantive quality must be measured separately.
2. Assess quality and action ownership
Compute the two additional fractions and explain the limits.
Expected result and reasoning
8/12 reviewed changes have a boundary argument = 66.7%; 6/9 actions have owner+due date = 66.7%. The fixture does not identify which missing arguments belong to high-risk changes, so that specific target cannot be evaluated yet.
3. Choose two improvements
Select options using causal gaps rather than appearance.
Expected result and reasoning
Choose A to catch eligible changes and B to make actions accountable. C does not address supplied gaps; D precedes a stable review contract and exceeds the other options in effort without demonstrated benefit.
4. Define accountable acceptance
Assign an owner and measurable completion evidence.
Expected result and reasoning
Maya owns A/B rollout. Acceptance requires trigger records for every change and no action lacking owner/due date; Pavel samples decisions for actual boundary reasoning. Installing a form or dashboard is insufficient.
5. Reassess without inventing a level
Suppose next quarter has 30 eligible changes and 27 reviews. State what is known and unknown.
Expected result and reasoning
27/30 = 90% meets the local coverage target. High-risk review quality and action ownership still require their own records. No official SAMM level follows from 90% alone or from this abbreviated assessment.
The figures and roles are fictional. Local percentages do not replace OWASP SAMM assessment questions, quality criteria or scoring methodology.
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.
Reference information
- SDLC phase
- Security program