The cost curve, stated honestly
The classic diagrams show cost rising an order of magnitude per phase — design → code → test → production. Exact multiples vary by study and by team; what never varies is the direction. The mechanism is concrete:
- Found in review: one comment thread. Fix touches one file.
- Found in CI: a red check plus a trace. Fix touches a few files; re-review is cheap.
- Found after release: incident channel, customer reports, hotfix under pressure, backport, postmortem — and regression tests written after the context has already evaporated.
Note what the curve does not say: that everything should run earlier regardless of cost. A production synthetic probe is cheap and irreplaceable for certain bug classes; a full browser suite on every local save is expensive and useless. Shift-left means placing each check at the earliest point where it’s reliable and affordable.
Pull request
Start with the paths affected by the change.
scope the runSignup · checkout · access
Each scenario reports its own assertion and captured route.
one blockedReady or blocked
A reviewer sees why the release can proceed or what needs attention.
reviewable resultThe leftmost shift: ambiguity, caught in design
The most expensive bugs are specification bugs wearing implementation costumes. “What happens to a half-completed subscription when the card expires?” is free to answer in a design doc and ruinous to discover from a support ticket. So the cheapest test artifact is a written scenario list produced before code exists:
# Example acceptance criteria for checkout
Scenario: Expired saved card
When I pay with an expired saved card
Then I see the retry form
And no successful payment is recorded
Scenario: Duplicate submit
When I double-click "Pay"
Then exactly one charge exists for this orderPlain-English scenarios let product, engineering, and support review expected behavior before implementation. Keep them specific enough to turn into assertions later. The examples above describe behavior; they are not an executable Molar configuration.
The PR shift: verification inside the review window
The second shift moves behavioral verification from “after merge, eventually” to “inside the PR, automatically.” Concretely: every pull request runs the critical-path scenarios against an ephemeral environment with safe third-party substitutes, posts results with trace evidence as comments, and blocks merge via required checks when core flows break.
The mechanics are covered elsewhere in depth — making checks mandatory in required status checks as a merge gate, and wiring the runners in Playwright in GitHub Actions. The shift-left framing adds one rule: evidence belongs in the PR itself. A reviewer who can watch a failing replay — DOM state, network calls, console errors, the cloned third-party responses — without leaving the thread reviews in minutes instead of hours. That’s the difference between shift-left speeding up reviews and slowing them.
Guardrails, not gatekeeping
Shift-left fails socially when it becomes ceremony. The working distinction:
- Budgets. Required checks must finish inside the PR feedback budget your team sets or they will be bypassed — the stage-by-stage policy is in continuous testing in your CI/CD pipeline.
- Scope. Gate on critical paths only; long-tail coverage belongs to scheduled runs, not every developer’s every push.
- Flake policy. Quarantine flaky checks same-day. One random failure costs more goodwill than twenty true catches earn back — root causes are catalogued in our piece on flaky tests.
- Escape hatch with receipts. Admin-override stays possible but logged and reviewed weekly. Trust with accountability beats either extreme.
A minimum viable program
- This week: write scenario lists for your top three revenue-critical flows; get product sign-off on the edge cases.
- This sprint: make those scenarios executable and run them on every PR against ephemeral environments with cloned third parties — no shared staging bottleneck, no real charges.
- This quarter: promote the suites to required checks, add trace-evidence comments on failure, and schedule long-tail regression coverage so nothing silently rots — see our regression testing strategies.
Measure the program by where bugs surface, not by coverage percentages. If after a quarter your post-release incident count hasn’t moved, the checks are running at the wrong depth or guarding the wrong flows — shift-left is a direction, not a destination, and the metric that matters is the phase in which defects die.
Molar is building toward reusable browser checks across development and releases. Start with the Cartographer beta workflow; generated Playwright export and clean replay are still being validated. Configure and verify each release integration before relying on it.