Sign In Get Early Access
Workflow Design 9 min read

Anatomy of a Broken Approval Workflow

We audited 30 ops teams and found the same three failure points in every approval chain. Understanding the pattern is the first step to fixing it.

Diagram of an approval workflow with multiple branch points and a stalled queue

Approval workflows look simple in a flowchart. Request comes in, gets routed to an approver, gets approved or rejected, moves to the next step. Four boxes, three arrows. Done.

In practice, approvals are where ops processes go to die. They're the most common category of "this technically works but takes forever" complaints we hear, and they're also the workflows most teams have tried and failed to automate at least once. When we dug into how growing ops teams run their approval chains, we kept finding the same structural failures — not bad implementations of good processes, but fundamental design gaps that make breakage inevitable.

Here are the three we see most consistently, and why they're harder to fix than they look.

Failure Point 1: Routing Logic That Lives Nowhere

Ask an ops team "who approves a purchase request over $5,000?" and you'll get a clear answer. Ask "who approves a purchase request over $5,000 when the primary budget owner is on leave and the request is for a vendor category that was added six months ago?" and you'll get a pause.

Approval routing logic is usually documented at the happy-path level. The exceptions — and in most ops environments, exceptions aren't rare; they're 20-40% of volume — live in someone's head or in Slack history from six months ago when a similar case came up. This creates what we call the routing gap: the written policy covers 70% of cases, and the remaining 30% get resolved through ad-hoc escalation that has no audit trail and no consistency guarantee.

The practical consequence: when a request hits an edge case, it stalls. The person who submitted it doesn't know why. The person who could approve it doesn't know it's waiting. The ops team member who would normally unstick it is on the same PTO that caused the edge case in the first place. Time-to-approval for "normal" requests might be four hours. For edge-case requests, it's three days — because most of that time is just waiting for someone to notice the request is stuck.

An SLA breach here isn't dramatic. There's no error message, no alert. The request just sits in a queue, aging silently.

Failure Point 2: Approver State Is Invisible to the Process

Approval workflows are designed around approver roles — "Director of Finance approves budget requests over $10K." They're rarely designed around approver availability. The workflow doesn't know that the Director of Finance is in a three-day offsite this week, or that they only check their approval queue on Tuesdays, or that they delegated their approval authority to a colleague for Q1 vendor onboarding.

This isn't a data problem that's easy to solve. Availability and delegation state is messy. It changes frequently. It exists in calendar systems, in email out-of-office headers, in Slack status fields, in informal verbal handoffs. An approval system that checks none of this will route to the right role but hit the wrong person at the wrong time, consistently.

We see two common responses to this failure. The first is building manual delegation flows — a way for approvers to set deputies. These help, but they require the approver to remember to activate the delegation, which is the exact moment when they're distracted by whatever is taking them away. In practice, delegation flows have a 40-50% activation rate when needed most.

The second response is timeout-based escalation: if an approval isn't acted on within 48 hours, escalate to the approver's manager. This is better than nothing. It's also a reliable source of manager frustration — getting escalated items that should have been delegated is an interruption tax on people who are already overloaded.

Failure Point 3: No Record of Why

An approval that records "Approved — Jane Smith — March 4, 2025 at 2:47 PM" is better than no record. But it's still mostly useless for understanding whether the approval was correct, and it's completely useless for handling a similar case in the future.

The decision logic behind an approval — why this was within policy, why an exception was granted, what factors were weighed — almost never makes it into the approval record. It lives in Jane's head, maybe in an email thread that's now buried, occasionally in a Slack message that explains "yeah this one's fine because [context]."

This matters for two reasons that are distinct but related. The first is compliance and audit: when an auditor or a process reviewer asks why a vendor was approved despite incomplete documentation, "Jane approved it" is not a satisfying answer. The second is process learning: if you can't see the reasoning behind historical approvals, you can't tell whether your approval policy is being applied consistently or drift is accumulating.

We're not saying approval decisions need to be long-form essays. A 20-word rationale field that gets actually filled in is worth more than a comment field that everyone leaves blank. The barrier is that most approval UIs don't prompt for rationale in a way that feels natural — it's an afterthought text box that gets skipped. When that field isn't populated, the audit trail is a log of decisions without the logic that produced them.

Why These Three Failures Interact

In isolation, each failure point is a nuisance. Together, they compound into a dysfunction that's hard to diagnose because the symptoms look different from the cause.

Consider a realistic scenario: a vendor invoice comes in at $14,500. The purchase order system routes it for budget-owner approval. The budget owner is traveling. The delegation rule exists but wasn't activated. The approval sits for 72 hours and hits an auto-escalation. The escalation goes to a VP who doesn't have context on the vendor relationship. The VP asks for clarification over email. The ops person who set up the PO isn't available. The clarification takes 24 hours. The VP approves with a note: "Approved per [colleague's] confirmation." That note doesn't reference the original routing issue or the escalation. Total elapsed time: 5 business days for a routine $14,500 payment.

None of the individual failure points caused this outcome alone. The routing gap (failure 1) created the delegation problem. The invisible approver state (failure 2) prevented timely escalation. The missing rationale (failure 3) means the next person who processes an invoice from this vendor starts from scratch.

This is why fixing approval workflows piecemeal rarely works. Adding a timeout escalation rule doesn't help if the routing logic is still ambiguous. Adding a delegation UI doesn't help if approver state isn't being read. Adding a rationale field doesn't help if routing failures prevent the right approver from ever seeing the request.

What a Fixable Approval Workflow Looks Like

The approval workflows that actually work well — and we've seen several built carefully by ops teams who thought through the edge cases — share three properties that directly address the three failure points.

First, routing logic is fully enumerated, including exceptions. "If the primary approver is unavailable, route to X. If the category is Y, the approval threshold is Z. If the vendor is new, require the additional documentation step regardless of amount." This enumeration is tedious to write. It's the difference between a process that works at scale and one that works until it doesn't.

Second, approver state is checked at the time of routing, not at document-creation time. If the system can read calendar availability, Slack status, or an explicit delegation record, it should. If it can't, it should at least verify the last approval activity for this approver and flag if they appear inactive.

Third, the approval interface prompts for rationale in a structured way, and that rationale is surfaced to future approvers processing similar requests. Not as a required essay — as a structured field: "Does this request require an exception to standard policy? If yes, briefly note why." Two seconds of friction that creates a year of institutional memory.

Getting all three right before automating is what separates an approval workflow that runs cleanly at 200 requests a month from one that generates 15 exception tickets a week. The agent that Nexwatt deploys for approval routing doesn't make these design decisions — it executes them. But it executes them with full state awareness and a complete rationale trail that your current workflow almost certainly doesn't produce.

Ready to automate your first workflow?

Describe your process in plain English. We'll build the agent.

Get Early Access More Articles