The problem
The FY26 IT portfolio workbook combines funding status, monthly ranks, budgets and actuals across roles with different responsibilities. Rebuilding this workflow means preserving business rules, separating PMO figures from Finance's accounting feed, and making history and editing rights explicit. Control Center replaces the synthetic workbook with a database-backed application: monthly snapshots, capital and expense reporting, lifecycle decisions, reconciliation, resource planning and presentation mode. The fictional dataset demonstrates the workflow; it does not establish organizational adoption.
Contribution and AI assistance
Dylan supplied the HTML prototype and selected direct, authorized resource-allocation edits with an audit trail instead of an approval queue. He is the production administrator. Other domain decisions are recorded without a named decider, so this case study describes their implementation without assigning unsupported personal authorship.
How AI contributed
Claude Code assistants implemented the API, persistence, authorization, concurrency handling, import receipts and React application. Other assistants drafted helpers and reviewed finance and permissions; review corrections were applied before acceptance. The initial schema is documented as a Copilot draft. The delivery record includes a coordinating review role whose human-versus-agent identity is not specified.
Two consequential decisions
Decision 1
The funding line stays a human decision
The prototype decided above-the-line or below-the-line status by adding up ranked forecasts against the target. The recorded decision keeps that status manual, set by the business team. Rank and remaining target headroom are shown as information only. They never fund or admit a project. This keeps accountability where funding is actually decided. The cost is losing an automation the prototype made look easy.
Decision 2
Snapshots with stale-write protection
Financial lines and ranks belong to a monthly snapshot. Only the open snapshot can be edited, and captured snapshots are read-only. Capturing a snapshot copies PMO figures and ranks forward in one transaction. Totals are computed views, never stored values. Review found that two simultaneous edits of the same version both succeeded. Mutations now serialize before checking the version. Descriptive project fields still show current values in historical views.
Verification
- September 20, 2026 acceptance: 22 database tests, 167 backend tests (including 11 real HTTP concurrency tests), 143 frontend tests and 3 live end-to-end tests passed.
- September 21 prototype-parity release: 13 routes rendered without browser errors at 1440 px and 390 px. Production checks were read-only.
- September 25 resource-planning release: 181 backend and 621 frontend tests passed. Browser mutation tests ran against a separate synthetic database.
- Recorded boundaries: historical descriptive fields retain current values, automatic fiscal-year rollover is absent, and resource overloads warn rather than block saves.
Outcome and progression
200 + 200 → 200 + 409
Simultaneous edits of the same project version
Live race reproduction against the review API, September 20, 2026. Before the fix, both writes succeeded and one silently overwrote the other. After it, the second write is rejected as stale.
13 of 13 routes
Rendered without browser errors at desktop and mobile widths
Authenticated production site at 1440 px and 390 px, September 21, 2026. A functional check, not an accessibility audit.
Milestones
- 2026-09-19Prototype reviewed against the database specification; twelve domain decisions identified.
- 2026-09-20Application deployed with owner-only access after integrated acceptance.
- 2026-09-25Resource-planning module accepted on a separate QA deployment.
- 2026-10-02Public preview hostname created, serving a fictional dataset.
What I would measure next
Time and error count for a representative PMO or Finance user completing one monthly cycle in the app (Finance import preview, reconciliation exceptions, snapshot capture), compared with the same cycle in the workbook. No such session is recorded.
Try the workflow
- Open the preview. The banner states that the company, people and figures are fictional.
- On Overview, select Reconciliation exceptions to see where PMO and Finance figures disagree.
- Choose Budget vs. actual, turn on Over budget only, and open a project to see its lifecycle, financials and history.
- Select Project Portfolio. Reordering the ranked list stays a draft until it is saved.
- In the Snapshot selector, choose FY26 Baseline to see read-only history, then select Present.
Evidence and further reading