Uncategorized

Prove Safety Controls Work Before You Build or Buy

A green compliance dashboard does not tell a CTO whether an unsafe release would be stopped. That distinction matters when deciding whether to build assurance controls or buy a platform that promises them. I would buy commodity evidence collection, but keep release decisions and their tests in-house: the decisive measurement is whether a deliberately bad change is blocked and its history can be reconstructed.

A blocked bad release is a better measure than a passing audit

Start with a question a vendor demonstration rarely answers: what happens when an authorized engineer attempts to release a change that violates a known rule? A dashboard can show that scanning ran; only a controlled fault shows whether scanning affected the release. This is why I would score safety, quality, and compliance controls by observed outcomes rather than by the number of checks enabled.

Design a recurring release drill with faults drawn from actual policy. Examples include an unsigned container image, an artifact whose provenance names the wrong source commit, a dependency with a policy-blocked vulnerability, and a change to a safety-critical module without its required reviewer. Attempt each release through the normal path, with the normal permissions. Record the fault introduced, the gate expected to stop it, the actual decision, and the person who could override that decision.

The primary metric is fault escape rate: injected policy violations that reach the deployable state divided by all injected violations attempted. Set its target to zero for the faults the organization claims its gates prevent; a nonzero result means that claim is false, even if every scanner ran. Track legitimate-change block rate alongside it, because a gate that stops everything can achieve zero escapes while making releases unusable. For each block, preserve the rule identifier and the exact artifact digest so a later reviewer can distinguish a real stop from a failed test setup.

Read Safety, Quality, and Compliance in Software Development skeptically: an assurance principle is useful only if a release drill can expose its failure. Align the fault set with obligations such as NIST SP 800-218, the Secure Software Development Framework, and OWASP ASVS 4.0.3 where they apply. Do not count the existence of a mapped control as evidence that the control stopped anything, because mappings describe intent rather than observed behavior.

A practical starting drill might use 12 injected faults across several releases; that count is an initial sampling choice, not a statistical guarantee. Rotate the faults so engineers cannot optimize a gate for a fixed demonstration. Run at least one drill after a material change to CI permissions, deployment configuration, or exception handling, because those changes can bypass a control without changing its scanner.

Evidence retrieval time reveals whether the controls are connected

The second test begins after a release. Give someone who did not deploy it an artifact digest and ask them to retrieve the source commit, approval, test result, dependency inventory, policy decision, and deployment record. Time the exercise from the request to a verifiable answer. This measures whether records can be joined, rather than whether each tool has a screen containing plausible data.

Use the artifact digest as the join key. GitHub Actions run IDs and protected-branch reviews can establish where a build began; SLSA v1.0 provenance can bind a build to its inputs; a Syft-generated SPDX 2.3 software bill of materials can identify packaged components; and Sigstore Cosign can sign an artifact or attestation. OpenTelemetry trace IDs can connect a deployment request to subsequent service events. None of those records proves much if the digest in one system cannot be matched to the digest that actually ran.

Set a 10-minute retrieval objective as a service target to adjust after a pilot, rather than accepting a vendor’s “one-click evidence” description. Measure the median and the slowest completed retrieval, then separately count requests for which the evidence could not be established at all. A fast median can conceal missing records; an unanswered request is more consequential than a slow one because an auditor or incident responder cannot reconstruct what happened.

Read Safety, Quality, and Compliance in Software Development critically, then test the assurance claim with an unfamiliar release. For an ISO/IEC 27001:2022 assessment, a document describing the approval process may be necessary, but the timed exercise tests whether the claimed process left evidence for a particular artifact. If a person has to reconcile timestamps and filenames by hand, record that labor as part of the result; a purchased platform has not eliminated work merely because it moved the work outside its interface.

Sample routine releases as well as conspicuous ones. A 30-day observation window is a pilot duration to tune to release frequency; it should include an exception, a rollback, or an emergency change if one occurs. Exclude none silently. Mark a case “not observed” when that event did not occur, because inventing a smooth emergency workflow from ordinary releases would make the purchase decision look safer than the evidence supports.

A small independent scorecard makes vendor claims testable

Do not let either an internal team or a vendor define success solely in its own product. Keep drill results in a simple export that the CTO’s team can inspect. A CSV with drill_id, expected_block, blocked, and evidence_seconds is enough to run a first pass. The following Python 3 command exits unsuccessfully if an expected block fails or any evidence request exceeds the illustrative 600-second target:

python3 - <<'PY'
import csv, sys
from pathlib import Path
rows = list(csv.DictReader(Path("release_drills.csv").open(newline="")))
required = {"drill_id", "expected_block", "blocked", "evidence_seconds"}
if not rows or not required.issubset(rows[0]): sys.exit("missing drills or columns")
miss = [r for r in rows if r["expected_block"] == "true" and r["blocked"] != "true"]
slow = [r for r in rows if int(r["evidence_seconds"]) > 600]
print(f"drills={len(rows)} misses={len(miss)} slow={len(slow)}")
if miss or slow: sys.exit(1)
PY

That script is a check on the exported results, not a substitute for witnessing the drill. Have a second person confirm that an allegedly blocked artifact could not be deployed through another permitted route. Test an exception separately: if a policy override is allowed, measure who can grant it, whether it expires, and whether the eventual release record identifies it. Otherwise, an organization may report a successful gate while its normal override path makes the gate optional.

Add DORA change failure rate and time to restore service as context, not as proxies for gate effectiveness. They measure outcomes following changes and incidents; they do not reveal whether a specific unsigned artifact would have been rejected. Watch legitimate-change block rate and time spent preparing evidence too, because an apparent safety gain that depends on repeated manual repair has an operating cost.

I would not buy a compliance dashboard as the source of truth, because a dashboard that cannot export artifact-linked decisions prevents an independent replay. I would also avoid building a custom scanner where an established tool already emits usable results: maintaining detection logic consumes engineering time without proving that the deployment gate enforces those results. The boundary is straightforward to test—tools may produce evidence, but the organization must be able to verify the decision made from it.

Buy evidence plumbing when it survives a replay; build the risk decision you own

Compare two named options against the same drills. Buy a commercial assurance platform when it reliably ingests records from the existing CI and deployment systems, exports them with stable artifact identifiers, and shortens timed retrieval without hiding exceptions. Its cost is subscription spend, integration work, and the risk that a proprietary evidence model makes departure expensive. Ask the vendor to run the pilot against your release path, not a prepared demonstration tenant, because a polished demonstration does not expose integration gaps.

Build an in-house assurance layer when release rules depend heavily on organization-specific hazards or when the purchased product cannot express an override with the required accountability. Its cost is ongoing ownership of policy code, interfaces, storage, and on-call failures. Open Policy Agent can evaluate explicit release rules, while Trivy can supply vulnerability findings, but the team still has to maintain the rule that turns those findings into a deployment decision. Building wins only if that ownership produces a clearer, testable decision than the vendor alternative.

For most teams, the defensible split is to buy or adopt the collection machinery and build the narrow decision layer. The reason is measurable: reusable collectors can reduce evidence-retrieval labor, while organization-specific rules determine which fault must stop a release. Require both options to pass the same blind drills and export the same records before comparing price. A vendor-published integration count is not a substitute for a successful retrieval in your environment, because it says nothing about the identifiers, permissions, or exceptions in your release path.

Before approving either option, set a spending threshold based on measured work. Count the engineer-hours spent retrieving evidence, repairing broken joins, maintaining gates, and handling false blocks during the pilot; then compare that cost with the quoted platform price and expected integration effort. Keep the drill definitions outside both implementations so a switch cannot quietly redefine success.

The first purchase decision should be a drill, not a contract

Pick one recent release and one policy violation that should have stopped it. Tomorrow, ask an engineer to reproduce the release path with that fault, while someone unfamiliar with the change retrieves the resulting evidence from its artifact digest. Record whether deployment was blocked, how long retrieval took, and every manual intervention. Use those results as the first acceptance test for an internal design and for every vendor proposal.