π€ Delivery Metrics & Key-Person Risk
π€ Delivery Metrics & Key-Person Risk
π Summary
The repository cannot support a credible contributor or delivery-speed analysis: its entire history has been squashed into one commit made on 6 October 2026 under a single name. Every line of code is therefore attributed to one person, which is an artefact of the squash, not a measurement. What the repository's own documents do show is that the product has one owner who directs the work and reviews it visually, and that the code is written largely by AI coding sessions following very detailed written conventions. This is a concentrated key-person risk: the product knowledge, the decisions behind it, the operating access to each client deployment and the legal ownership of the code all appear to sit with one individual. None of the four standard delivery-performance (DORA) metrics can be measured from what was supplied; this report says exactly what access would allow them to be.
π― Rating
π΄ βββββ 1 / 5 β Red. Bus factor is evidenced as one, and no delivery metric is measurable from the material provided.
π Findings
Part A β Contributor analysis
| Measure | Result | Tag |
|---|---|---|
| Unique contributors, all time | 1 identity in git (Matthew Prins <β¦+FS002-dev@users.noreply.github.com>) | [Observed] β but meaningless after a squash |
| Unique contributors, last 12 months | Same single identity | [Observed] / meaningless |
| Share of current code by contributor (git blame) | 100% to one commit / one author | [Observed] β artefact of the squash |
| Commit frequency per contributor over time | Not measurable | [Unavailable β requires unsquashed history] |
| True authorship | Owner-directed; code produced by AI coding sessions committing under "the repository's own committer identity" | [Observed] docs/HANDOVER.md "How a change lands"; [Inferred] from CLAUDE.md's repeated references to "a session" and "two sessions each pushed over a red" |
Method: git log --all, git shortlog -sne (one line), git blame is uniform by construction. git-fame was not run because it would only restate the squash.
Bus factor
Evidenced bus factor: 1. [Inferred, high confidence] The signals:
- A single copyright holder: "Matthew Prins, trading as Midshift" (
LICENSE). [Observed] - All decisions are recorded as "owner call", "the owner's" open decisions, and the owner reviews work on a "build board" and "comment ledger" (
docs/HANDOVER.md,CLAUDE.md). [Observed] - The build process is written for AI sessions (worktrees, ports, "the session reminder") rather than for a team. [Observed]
- Production database migrations are applied by hand, and
CLAUDE.mdis the register of which migration has run in which deployment ("applied in production on 2026-09-14β¦"). Operational state lives in prose maintained by the owner. [Observed]
What walks out of the door if the owner leaves: the rationale for hundreds of product decisions (partially mitigated β they are unusually well written down in CLAUDE.md, ARCHITECTURE.md and code comments); access to and knowledge of every client's Vercel and Supabase projects, environment variables, cron secrets and migration state; the relationships with client teams; the related campaign-studio repository; and the ability to continue the AI-assisted workflow, which depends on the conventions and judgement of the person directing it. The written record is a genuine mitigating asset β far better than typical for a single-founder product β but it is not a substitute for a second person who has operated the system.
Part B β Delivery metrics (DORA)
| Metric | Definition | Measurable here? | Proxy | What is needed |
|---|---|---|---|---|
| Deployment frequency | How often code reaches production | β No | Merges to main or release tags would be a proxy β there are none (one commit, no tags; SECURITY.md: "no release branches or tags") | Vercel deployment history per client project, or the unsquashed main history |
| Lead time for changes | Commit to running in production | β No | Commit-to-tag time β no tags | Unsquashed history + Vercel deployment timestamps |
| Change failure rate | Share of deployments causing a failure needing remediation | β No | β | Vercel deployment/rollback history, incident or hotfix log, GitHub Actions run history |
| Time to restore (MTTR) | Time from failure to recovery | β No | β | Incident log, monitoring/alerting history, Supabase/Vercel status records |
All four: [Unavailable]. No scorecard is offered; any figure would be fabricated.
Qualitative signals only (not metrics): CLAUDE.md contains dated entries clustered between August and late September 2026 (e.g. migrations applied 2026-08-21, 2026-09-03, 2026-09-06 β¦ 2026-09-28), suggesting a high pace of change in that window. [Inferred] It also records specific failures β a missing migration found in production (035, 2026-08-19), a migration the app depended on before it ran (063), three red pushes to main (2026-09-06) β which show problems were noticed and fixed, but give no rate. [Observed]
π§Ύ Evidence
git log --all --format='%h %an <%ae> %ad %s'β one line.git rev-parse --is-shallow-repositoryβfalse.LICENSEline 1;docs/HANDOVER.mdlines 1β62;CLAUDE.mdsections "Migrations", "Verification", "Parked decisions";SECURITY.md"Supported version".
β οΈ Risks
| Risk | Severity | Effort |
|---|---|---|
| Bus factor of one across code, decisions, operations and IP ownership | π΄ Critical | L (hire/transfer) |
| Operational knowledge of each client deployment (env vars, secrets, migration state) held by one person and in prose | π High | M |
| No delivery-performance data β buyer cannot verify velocity or stability claims | π High (diligence) | β |
| Heavy dependence on an AI-assisted workflow whose effectiveness is tied to the current operator | π‘ Medium | M |
β Recommendations
| Recommendation | Priority | Effort |
|---|---|---|
| Make transaction conditional on: unsquashed history, GitHub org access, Vercel and Supabase project access for every client deployment, and an inventory of credentials | P0 | S |
| Negotiate a paid transition/retention period with the owner, including shadowed operation of a release and a migration | P0 | M |
| Put a second engineer through a full deploy + migration + incident drill within 30 days | P1 | M |
| Move per-deployment state (which migrations ran, env vars set) out of prose into a machine-readable register checked by a script | P1 | M |
| Once access is granted, compute DORA from Vercel deployments and GitHub Actions history | P1 | S |