CONCEPT PRODUCT · ENTERPRISE · WORKFLOW ORCHESTRATION

SPENDLOOP
Budgets that close their own loop.

Cloud bills are decided by a thousand small engineering choices and approved by people who see none of them. Planning already happens — in spreadsheets that cannot say who approved what, or what the number looked like before someone changed it. SPENDLOOP is a consumption-planning platform I designed end to end: a five-role approval chain rebuilt as an orchestrated negotiation, legible enough to act on and traceable enough to defend.

Type
Self-initiated concept (like KOSHA)
Role
Research → strategy → UX → UI, solo
Domain
Enterprise FinOps · cloud cost
Focus
Multi-role workflow orchestration
01 — The observation

Enterprise cloud planning already has a tool. It is called a spreadsheet — and it works right up to the moment a second person needs to approve it.

I've spent years designing enterprise FinOps and IT platforms, and the pattern repeats everywhere: planning cloud consumption isn't an unsolved problem, it's a solved-in-Excel problem. A workbook per domain, a tab per month, a column someone renamed, a version emailed on Friday. It holds together because one analyst holds it together. Then the organisation asks a reasonable question — who approved this, and what did it look like before they changed it? — and the spreadsheet has no answer. Not a wrong answer. No answer at all.

The instinct is to buy a tool that replaces the spreadsheet. The instinct I wanted to design against is subtler: the spreadsheet didn't fail at arithmetic, it failed at accountability. Any replacement that models the numbers but not the decisions around them just recreates the same hole with a nicer table.

02 — The problem

Make a five-deep hierarchy comprehensible — without throwing away the governance that justifies it.

A Service Owner proposes a number. It climbs through an Eng Lead, a Domain Controller, a Portfolio Director, to a Finance Council — each seeing only the level below. That depth exists for a reason: money at this scale needs accountable sign-off. But depth is also what makes the whole thing illegible. Nobody can see who owns what, what state it is in, what changed on the way up, or why.

These two goals pull against each other, and that tension is the design problem. Simplify hard enough and you delete the audit trail that makes approval mean anything. Preserve every control and you rebuild the spreadsheet — technically complete, practically unreadable. Most enterprise tools resolve it by picking a side: either a clean dashboard nobody can audit, or a compliance system nobody can use.

The problem statement I committed to:
"Make the hierarchy legible enough that people act on it, and traceable enough that finance can defend it — with the same interface, not two."

The corollary that shaped everything downstream: if the tool can't hold the disagreement, the disagreement leaves the tool — into meetings and hallway chats where no record survives. Governance isn't lost at the moment of approval. It's lost in the argument beforehand.

03 — Research

Three methods, one question: where do approval workflows actually break?

This is a concept product, so I was strict about where evidence came from — domain fluency I already had, conversations I could actually have, and systems I could actually study. No invented user quotes, no fabricated metrics. One question ran through all three methods: what does a spreadsheet lose the moment approval enters the picture?

Method 1 · Domain immersion
Years inside FinOps & enterprise IT design
My professional background is designing enterprise platforms in exactly this territory — cost dashboards, governance flows, role-based tools. That gave me the vocabulary, the org shapes, and the failure stories this concept is built against.
Method 2 · Practitioner conversations
Informal interviews across the chain
Engineers who quote numbers, managers who approve them, and one finance-side controller — asked the same three questions: when did a budget decision last surprise you, where does the process stall, and what happens after a rejection?
Method 3 · Workflow teardown
How mature approval systems behave
A structured teardown of systems that process millions of approvals — pull requests, expense tools, purchase orders, document review — asking one thing: what does each do at the moment of disagreement?
1 · Rejection is where workflows show their real design.
Every mature system treats “no” as a loop: a PR gets change requests, an expense gets returned with a note, a PO gets revised. Naive approval tools treat "no" as an exit — and in a five-level chain, one exit anywhere kills weeks of accumulated context. The deeper the chain, the more catastrophic a terminal reject becomes.
From: workflow teardown
2 · Reviewers don't lack authority — they lack context at the moment of decision.
Mid-chain approvers consistently described the same scene: a number arrives, they can't see beneath it, so the real evaluation happens in a meeting — and the tool records only the click that follows. The decision and its record live in different places, which is a governance system failing at governance.
From: practitioner conversations
3 · Editing someone's number without them is how trust dies.
The politically cheap move in approval chains is the silent modify — adjust the figure, pass it along. The person who quoted it discovers the change after lock, and next cycle they pad their numbers defensively. Silent edits teach people to negotiate against the system.
From: practitioner conversations
4 · A queue with ages beats a dashboard with totals.
Approvers don't wake up wanting charts; they want to know what's waiting on them and for how long. GitHub understood this decades ago — review requests, not repo analytics. Budget tools still lead with KPI walls.
From: workflow teardown
5 · An approved target that can’t feel spend is theatre.
The whole point of budgeting cloud spend is preventing surprise bills — yet approval workflows typically end at "approved." If live usage never talks back to the approved number, the original problem survives the process built to kill it.
From: domain immersion
04 — Personas

Three seats at one negotiation.

Five roles sit in the chain, but they collapse into three fundamentally different jobs: the one who knows, the ones who judge, and the one who balances the whole portfolio. Each persona is a composite of the practitioners I spoke with.

Originator · knows the usage
The Service Owner
"I can tell you what our test environments cost per sprint. Nobody above me can — but they set my number."
Jobs
Quote a defensible annual number per service, monthly breakdown attached
Justify overrides when reality beats the forecast
Frustrations
Quotes vanish into the chain — no visibility into where they sit or why they stall
Final approved figure sometimes differs from the request, discovered after lock
Mid-chain · judges roll-ups
The Reviewer
"Twelve proposals are waiting on me right now. I know because people ping me — not because anything shows me."
Jobs
Evaluate roll-ups against last year's reality and this year's strategy
Negotiate changes without becoming the bottleneck
Frustrations
Sees totals without drivers — evaluation demands a meeting every time
Rejecting feels brutal, so numbers get waved through instead
Apex · owns the envelope
The Portfolio Director
"When the CFO cuts our envelope 10%, I need that to cascade fairly — not vanish into forty spreadsheets."
Jobs
Reconcile bottom-up quotes with top-down envelopes
Answer for the portfolio when spend drifts mid-year
Frustrations
Top-down cuts have no propagation path — each one is a manual renegotiation
No early warning between quarterly reviews
05 — Comparative teardown

What mature approval systems do at the moment of "no."

Instead of a feature-matrix against cost dashboards (which solve visibility, not negotiation), I tore down the approval mechanics of systems people actually trust with disagreement. The pattern is unanimous — and budget tools ignore it.

SystemOn disagreementChange transparencyWhat waits on meAfter approval
Pull requestsRequest changes → revise → same thread continuesEvery diff versioned & attributedReview queue with ageCI keeps watching the merged code
Expense toolsReturn with a note → resubmit same claimAmounts locked; notes visibleApproval inboxPolicy engine flags anomalies
Purchase ordersCounter-offer / amend cycleAmendment historyVariesCommitted vs invoiced tracking
Naive budget workflowsReject = dead; start overSilent edits mid-chainNone — detail pages onlyNothing watches the approved number

The whitespace isn't a missing feature — it's a missing architecture: no budget product treats the approval chain itself as the thing to design. That's SPENDLOOP's territory: workflow orchestration as the product, not a form on top of a database.

06 — Design principles

Four rules I refused to break.

Each principle answers one research insight directly. When a screen decision got hard later, these settled the argument.

P·01
Nothing dies — everything iterates.
"No" returns work with reasons; it never destroys it. A proposal keeps its history, its thread, and its place in the chain. Starting over is the owner's choice, never the system's punishment.
P·02
Every change has a face and a diff.
Numbers move only in versioned, attributed, visible steps. If a reviewer proposes a different figure, the owner sees who, what, and why — and responds — before it climbs further.
P·03
The queue is the home page.
Every role lands on what waits for them, ordered by age and consequence. Dashboards exist to support decisions, not to impersonate a workflow.
P·04
Approval is a beginning.
An approved number becomes a monitored contract between the owner and the chain — burn thresholds, variance alerts, and a reforecast path that reuses the same loop instead of spawning a new process.
07 — The orchestration engine

Before any screen: the state machine, the lanes, and the rules.

This is the heart of the project — and where I spent the most time. Enterprise workflow lives or dies on its orchestration model: which states exist, who acts in each, what happens on timeout, and how exceptions travel. I designed this layer first and let every screen be a view of it.

Proposal lifecycle — six states, one loop
My first draft had nine states; walking the personas through it killed three (nobody could explain the difference between "in revision" and "returned" — so they became one). The final machine has no terminal failure state at all.
DRAFTowner edits freely
IN REVIEWdesk k of n · SLA timer on
CHANGE PROPOSEDpaused for owner response
APPROVED · MONITOREDburn thresholds armed
REFORECAST vNre-enters review, scoped
RETURNEDwith reasons, to desk k−1
REVISED vNresumes at the returning desk — earlier approvals stand
out of band
PARKEDreason required · excluded from roll-ups, never deleted
UNPARKEDreturns to the exact desk it left
Parking is the state every approval tool forgets. Real cycles always contain a few items nobody can decide yet — an unclear owner, a service mid-migration, a cost centre being restructured. Without a parked state those items either block the cycle or get waved through. Parking removes them from the active queue with a stated reason and a review date, keeps their history, and excludes them from roll-ups so the totals stay honest.

Two deliberate exclusions: no "rejected" state (a return that the owner abandons simply expires at cycle close, recorded as withdrawn) and no "escalated" state (escalation changes who holds the desk, not where the proposal is — a lesson from the teardown: state explosion is how workflow tools rot).
One proposal through five lanes
The swimlane that defined the product. Follow a single consumption target through the chain — including the moment that usually breaks these systems: a mid-chain disagreement at the Domain Controller's desk.
scroll to follow the chain →
Service Owner
Draft quote v1
guided by last-FY actuals
Submit
Responds to change: accepts −8%, contests the Q3 cut
Reforecast v3 when burn hits 85%
Eng Lead
Reviews with drivers visible · approves in 2d
Domain Controller
Proposes change: −8% + defer GPU line
Accepts contest on Q3 · approves v2
Portfolio Director
Approves roll-up · v2 within envelope
Envelope cut −5% → cascades as change-proposals to affected owners
System
Anomaly flags computed
SLA timer per desk · nudge at 3d
Version diff + notify owner
Decision log entry per action
Burn 85% → owner + chain alerted
The system is the sixth participant. Timers, anomaly flags, diffs, notifications, and the decision log are orchestrated events, not UI decorations — every lane action emits one, which is what makes the audit trail a by-product instead of a chore.
Orchestration rules — the unglamorous 20% that carries 80% of the trust
Every rule below exists because a practitioner story or teardown finding demanded it.
SLA & escalation
Each desk carries a cycle-configured SLA (default 5 working days). Timer visible to everyone in the thread. At breach: nudge → auto-delegate to the named deputy → flag in the cycle health view. Escalation reassigns the desk; it never skips it.
Delegation & absence
Every approver names a standing deputy. Out-of-office hands desks over automatically and visibly — "approved by R. Mehta, deputizing" — so a vacation never freezes a branch of the org's cycle.
Change-proposal protocol
A reviewer can't silently edit. A proposed change pauses the proposal, notifies the owner with a versioned diff, and waits: accept (moves on), contest (one structured round back), or timeout-accept after the SLA — recorded as such.
Partial decisions on bundles
Multi-service proposals split at review time: a reviewer approves four line items and returns one, and the four proceed. The bundle is a submission convenience, never an approval unit.
Scoped visibility, on-demand depth
Each level sees its roll-up by default — but every total is expandable to its drivers, read-only, with anomaly flags computed from below. Judgment needs context, not raw access to everything.
Top-down reconciliation
An envelope cut doesn't overwrite anything. It generates change-proposals to affected owners through the same protocol — same diffs, same accept/contest, same log. One mechanism for every direction of change.
08 — Where the number comes from

A proposal nobody can explain is a proposal nobody trusts.

SPENDLOOP does not hand owners a blank field. It proposes a figure from their own history — a trailing three-month average adjusted by observed month-over-month trend — and then shows its working. Every practitioner story about padded numbers traced back to the same thing: a system produced a figure, refused to explain it, and taught people to argue with it instead of from it.

Month −3
$18,400
actual, closed
Month −2
$19,100
actual, closed
Month −1
$21,300
actual, closed
Trailing average
$19,600
+7.4% MoM trend observed
Proposed
$21,050
average carried forward on trend

Three rules govern this number. The system proposal is never overwritten — the owner's figure is stored beside it, so the delta stays visible for the whole chain. Material deviation demands a reason, not a shrug. And a service with less than three months of history says so rather than quietly averaging a shorter window — the screen shows "2 months of history · proposal is indicative" instead of manufacturing confidence it doesn't have.

The word "budget" was the first thing I removed.

A budget is money you are allowed to spend. A cloud number is a forecast of consumption you expect to cause — usage you can only partly control, billed after the fact. Calling it a budget invites the wrong argument ("give me more") instead of the right one ("is this the usage we expect?"). SPENDLOOP calls it a consumption target, and the word "budget" appears nowhere in the product — not on a screen, not in a state, not in an export column. I keep using it on this page, in the title and the headline, because it is the category word you searched for; that split between the language you explain in and the language you ship in is itself a decision, and worth making on purpose rather than by accident.

TermWhat it means in the product — and why the distinction is load-bearing
Actual consumptionCost already incurred in a closed month. The only number nobody can argue with.
Trailing averageMean of the last three eligible months. Eligibility matters: credits, refunds and partial months are excluded and flagged, not silently averaged.
System proposalTrailing average carried forward on observed trend. Immutable — it is evidence, not a draft.
Owner targetWhat the person who knows the workload actually expects. Stored separately, always shown against the system proposal.
Approved targetThe figure the chain committed to. This is what live spend is measured against.
VarianceNever shown alone — always labelled with the pair being compared. "Over" is meaningless without "over what".
09 — Information architecture

Five surfaces, one engine underneath.

Every surface is a role-scoped view of the same orchestration engine — which is why the IA is shallow. Nothing needed inventing per role; the engine's events decide what each surface shows.

My Queuehome · per role
Needs my action (aged)
Waiting on others
Returned to me
Bulk review mode
Proposalthe negotiation thread
Current version + diff history
Monthly breakdown editor
Decision log (attributed)
Chain position + SLA timers
Targets Livepost-approval
Burn bars vs approved
Variance drivers (dev/test/prod)
Threshold alerts
Start reforecast
Portfoliodirector + council
Envelope vs committed
Cycle health (stalls, SLA breaches)
Cascade a target change
Cross-domain compare
Cycle Adminops
Cycle calendar & deadlines
Source sync & data exceptions
Chain, deputies, SLA policy
Parked queue & finance export
10 — Journey

One fiscal year through the loop.

The journey map that kept the team honest — well, kept me honest — about designing for the whole year, not just approval season. The emotional line to watch is the Service Owner's: the old world turns them anxious twice a year; the loop keeps them merely busy.

scroll across the year →
Weeks 1–2 · Draft
Quote with evidence
Owner drafts against last-FY actuals and usage drivers, pre-flagged sanity checks catch the obvious before anyone else sees it.
Owner: "I can defend this."
Weeks 3–6 · Review
The chain negotiates
Queues age visibly, SLAs tick, change-proposals pause and resume the thread. Everyone sees where every proposal sits.
Reviewer: "I know exactly what's on my desk."
Week 7 · Lock
Envelope reconciled
Director cascades final adjustments through change-proposals; owners accept or contest; the cycle locks with a complete decision log.
Director: "The cut cascaded fairly."
Months 2–10 · Monitor
The number stays alive
Burn bars against approved, variance drivers surfaced, thresholds alert the owner first and the chain only when it matters.
Owner: "No surprises left to have."
Any month · Reforecast
Reality re-enters the loop
Overspend or new-service onboarding opens a scoped vN through the same states — no side process, no email thread, no spreadsheet.
Everyone: same loop, smaller stakes.
11 — Structure before style

Lo-fi: proving the queue could carry the product.

The riskiest bet was P·03 — making the queue the home page in a category addicted to KPI walls. I wireframed three layouts and walked each persona's first minute of a Monday through them. The dashboard-first layout lost in every walkthrough: it answered "how are we doing?" when the user was asking "what do you need from me?"

Option A — KPI wall first, queue below the fold. Rejected: role-blind.
Option B — queue first, aged & color-coded; numbers one tap deep. ✓ Chosen.
Option C — split queue/portfolio hybrid. Rejected: two half-jobs, zero done well.
12 — The screens

Three surfaces that carry the loop.

Hi-fi states for the three surfaces that define SPENDLOOP: the reviewer’s queue, the negotiation thread, and the living target. Visual language: calm neutrals, one decisive green, monospace for money — numbers should feel like facts, not decoration.

SPENDLOOP · My Queue — Domain Controller
Needs your action
4 waiting · oldest 6 days · cycle locks in 11 days · SLA: 5 working days
Bulk reviewWaiting on others (7)
6d · SLA breach
Customer Experience — roll-up
ENG LEAD · R. MEHTA · 4 SERVICES
$1.24M
+18% vs last FY actuals
$1.05M
last FY actuals
2 flags Review
3d waiting
Data Platform — roll-up
ENG LEAD · S. IYER · 6 SERVICES
$2.08M
+9% vs last FY actuals
$1.91M
last FY actuals
1 flag Review
1d waiting
Identity & Access — roll-up
ENG LEAD · A. THOMAS · 3 SERVICES
$640K
−2% vs last FY actuals
$652K
last FY actuals
No flags Review
Change pending
Streaming Infra — roll-up
PAUSED · AWAITING OWNER RESPONSE TO YOUR −8%
$890K
your proposal: $818K
2d left
then timeout-accept
Watching Open
S·01
The queue is the home page. Age drives the left border; each row carries the one comparison a reviewer actually needs (requested vs last-FY actuals) plus anomaly flags computed from the level below. The SLA breach isn't shaming — it's the same timer everyone in the thread can see, including the owner waiting on it.
SPENDLOOP · Proposal — negotiation thread
Checkout Service · FY27 v2 · change proposed
OWNER: D. KUMAR · AT DESK 3 OF 5 · DOMAIN CONTROLLER · SLA 3D REMAINING
Return with reasonsPropose changeApprove v2
v1 · as quoted — D. Kumar
Annual total$245,100
Dev / test share38%
Q3$68,400
BasisML training ramp
v2 · proposed — L. Wong, Domain Controller
Annual total$225,400 (−8.0%)
Dev / test share38%
Q3$54,100 (−21%)
ReasonDefer GPU reservation to Q4
Owner responded
Accepted the −8% · contested the Q3 cut: "Q3 carries the model-retraining window — deferring GPUs moves the cost, not removes it. Propose splitting: $61K in Q3, remainder to Q4." One structured contest round; then the desk decides. Every word lands in the decision log.
S·02
The negotiation thread replaces the meeting. Versioned diffs, attributed changes, a structured contest round, and a decision log that writes itself. This screen is the whole thesis: the argument that used to happen in a hallway now has an address — and a record.
SPENDLOOP · Targets Live — Service Owner
My targets — live burn
THRESHOLDS 80% / 100% · OWNER ALERTED FIRST · CHAIN AT 100% ONLY
Start reforecast
Checkout Service104% · chain alerted
$234.5K spentapproved $225.4K
Driver: test-env GPU hours +61% in month 7 — the deferred Q3 line, back with interest. One tap opens reforecast v3 pre-filled with the variance.
Payments Gateway82% · you only
$71.4K spentapproved $87.1K
Pace lands at 97% by cycle close. Nobody above you has been pinged — thresholds alert the owner first, the chain only when it's real.
S·03
Approval is a beginning. The approved number stays accountable to live usage — and notice the escalation etiquette: the owner gets the 80% alert alone. Surveillance kills adoption in enterprise tools; SPENDLOOP alerts the person who can act before the people who can judge.
SPENDLOOP · Portfolio — Director view
FY27 portfolio — Platform Group
ENVELOPE $8.40M · COMMITTED $7.92M · 62 SERVICES · CYCLE CLOSES IN 11 DAYS
Export for financeCascade an adjustment
HEADROOM
+$480K
5.7% under envelope
SUBMITTED
54 / 62
8 not yet drafted
AT MY DESK
6
2 past SLA
PARKED
3
excluded from totals
+18%
Customer Experience
12 SERVICES · R. MEHTA
$1.24M
largest increase in group
$1.05M
last FY actuals
4 pendingDrill in
+9%
Data Platform
19 SERVICES · S. IYER
$2.08M
within trend
$1.91M
last FY actuals
completeDrill in
−2%
Identity & Access
9 SERVICES · A. THOMAS
$640K
within trend
$652K
last FY actuals
completeDrill in
8 services have not been drafted. The cycle cannot close on partial data, so the gap is stated on the director's own screen rather than discovered at lock. One tap nudges every outstanding owner and their deputy.
S·04
Roll-up without micromanagement. A director sees domains, not service line items — headroom against envelope, where the movement is, and what is blocking close. Drill-down exists but is read-only: judgment needs context, not the ability to do someone else's job. Parked items are shown as a count and excluded from totals, so headroom never quietly includes a decision nobody has made.
SPENDLOOP · Cycle Admin — FinOps
FY27 planning cycle
OPENED 04 SEP · DRAFTS DUE 18 SEP · LOCK 30 SEP
Sync nowLock cycle
Source data4 exceptions
Service registersynced 06:10 today
Consumption feedsynced 06:12 today
Missing owner2 services
No cost centre1 service
< 3 months history1 service
Exceptions surface before the cycle opens. A service with no owner cannot be assigned, and a service with no cost centre cannot be exported — better to fix four records now than to discover them at lock.
Parked queue3 items
Billing Serviceowner in transition · review 22 Sep
Legacy Reportingdecommission pending · review 30 Sep
Partner APIcost centre restructure · review 25 Sep
Every parked item carries a reason and a review date. Nothing can be parked indefinitely — an expired review date reappears on this screen as an exception.
Export for finance planning54 approved rows ready
Monthly grain, one row per service. Only approved rows leave the system; drafts and parked items are excluded by rule, not by whoever is doing the export. Cycle, scope, filters, actor and timestamp are written into the file — so the finance team can always answer "where did this number come from".
S·05
The screen that makes the other four possible. Enterprise workflow fails at the edges — a service with no owner, a cost centre mid-restructure, a new service with two months of history. Cycle Admin is where those live, deliberately, so the four decision surfaces stay clean. Most case studies skip this screen; in a real deployment it is the one FinOps sits on all day.
13 — Decisions I sweated

The calls that could have gone the other way.

A case study that only shows outcomes hides the actual work. These are the arguments I had with myself — with the option I killed and why.

Kill the reject button?
I nearly kept a true "reject" for egregious quotes. Killed it: every scenario I wrote for it was better served by return-with-reasons, and its mere existence re-taught the old terminal behavior. If a control's best use case is punishment, it's not a control — it's a threat.
Timeout-accept vs timeout-return
When an owner doesn't respond to a change-proposal within SLA, something must happen. Timeout-return punishes the whole chain for one absence; timeout-accept risks steamrolling the owner. I chose accept — but recorded as "accepted by timeout," visibly, which keeps the pressure on reviewers to propose defensible changes.
How much can a reviewer see?
Full drill-down for everyone died fast — portfolio directors reading service line items is micromanagement with a UI. Scoped roll-ups + on-demand read-only depth + computed anomaly flags gives judgment its context without inviting it to do someone else's job.
One loop or two?
Reforecasts almost became their own lighter-weight flow. I merged them into the same state machine with a scoped-down chain (only affected desks re-review) — two workflows means two behaviors to learn and two places for trust to break.
14 — Edges & measurement

Enterprise tools are judged by their edges, not their happy path.

The demo always works. What decides whether a governance tool survives contact with a real org is what it does when the data is incomplete, the people move, and the calendar runs out. These are the cases I designed against explicitly — each one changed something in the model.

A service has two months of history, not three.
The proposal is generated but labelled indicative, and the owner is not asked to justify a deviation from a number the system isn't confident in. Manufacturing false precision is worse than admitting a short window.
The owner leaves mid-cycle.
Work is assigned to the role, not the person. Reassignment preserves the draft, the history and the position in the chain — and the log records both the original and acting owner.
One person holds two desks in the same chain.
The chain collapses that step and says so in the log — "desks 2 and 3 held by the same approver" — rather than staging a fake second review. Segregation of duties blocks self-approval on your own submission.
A service moves domain during an open cycle.
The proposal keeps its original chain to completion; the move applies to the next cycle. Re-routing live approvals would invalidate decisions already made in good faith.
Actuals get restated after submission.
The system flags affected proposals rather than silently recalculating. A number someone approved must never change underneath them without a visible event.
The deadline passes with drafts outstanding.
The cycle cannot close on partial data. Outstanding items surface on the director's own screen, and the choice — extend, park, or proceed on record — is made explicitly by a human.

How I would know it worked.

This is a concept, so there are no results to report — but a design is only as serious as the measurement plan behind it. These are the instruments I would put in place from day one, chosen because each maps to a specific claim the design makes.

Does the loop hold?
% of returns resolved in one revision, and median desk-dwell time per stage. If returns spiral or a desk consistently stalls, "nothing dies" is a slogan rather than a mechanism.
Is the number trusted?
% of system proposals accepted without override, and override size distribution. Rising overrides with shrinking justifications means people are padding — the exact behaviour the transparency was meant to end.
Did the argument move in-tool?
% of approvals carrying a recorded reason, and contest-round usage. If reasons stay empty, the negotiation is still happening in meeting rooms and the audit trail is theatre.
Is spend actually governed?
% of overspend caught before invoice, and reforecast lead time. The original problem was surprise bills; if this doesn't move, nothing else matters.
Is the cycle healthy?
On-time submission rate and end-to-end cycle time. The clearest signal that the queue-first design is doing its job.
Is the data clean?
Count of records blocked by missing owner or cost centre at cycle open versus close. Trending to zero means Cycle Admin is earning its place.
15 — Reflection

What SPENDLOOP taught me.

Orchestration is a design material.
States, timers, escalation paths, and event rules shaped this product more than any screen did. Designing the engine first meant the screens almost drew themselves — each one is just a role's window into the same machine.
Steal from systems that survived disagreement.
The best research for enterprise workflow wasn't in my category at all. Pull requests and purchase orders have processed billions of "no"s without destroying work — budget tooling just never looked sideways.
Next: pressure-test the social layer.
The mechanics hold; the politics need real users. Would reviewers actually use structured contest rounds, or route around them on chat? That's the first question a pilot should answer — and I'd design the study around desk-dwell time and revision counts.

Enterprises don't need a faster way to click approve.
They need a place where the negotiation can live.

SPENDLOOP is a self-initiated concept — the full flow work, orchestration specs, and remaining role surfaces are available as a guided walkthrough.