Skip to main content
Underwriting operations

Designing a clearance queue when nobody could say what clearance was

The product was named after a process. It had a button for the process. Its dashboard reported on the outcome of the process. Nowhere in the codebase or the spec did anything define what the process actually did — so I wrote the rules, and labeled every line I'd made up.

Open the prototype (opens in a new tab)Demo sign-in — the email is filled in, any password works
  • Complex B2B
  • Workflow and queues
  • Regulated domain
  • Spec writing
  • Design systems
At a glance
Product
Internal underwriting platform
Sector
Commercial insurance carrier, B2B
Role
Product designer, solo
Timeline
6 weeks, 2022
I owned
Flow spec, IA, every screen, research plan
Status
Specced, handed to engineering

Six minutes if you read the whole thing. If you've got one, read the three decisions below — that's the argument.

The Raptor review workspace: the scanned application on a dark canvas at left, the extracted fields in the center with two low-confidence values flagged for confirmation, and the eight clearance checks running in a rail at right with C1 stopped on a sanctions hit.
This is the screen everything else hangs off. The application on the left, what got pulled out of it in the middle, and the eight checks running down the right — the one that stopped the sequence sits at the top. Whatever an underwriter does here, they may have to defend it a year from now.
screens designed

13

screens designed

seven of them rebuilt in round two

stage flow spec

8

stage flow spec

written from scratch, nothing to copy

states modeled

17

states modeled

with owner and reversibility on each

trade-offs logged

14

trade-offs logged

four of them pure business policy

Three decisions

Everything after this is detail.

  1. 01

    I wrote the client's business rules, and labeled every line I'd made up

    Nobody could tell me what clearance meant and nobody was available to ask. So I wrote all eight checks myself, and put a tag on every rule saying whether it came from the code, from me, or from nowhere yet.

    Leave a blank in a spec and everyone walks past it. Write down something wrong and somebody corrects you.

    Read the reasoning
  2. 02

    Showed all eight checks instead of one verdict

    It's more to read right when somebody wants to be done reading. But the screen a compliance examiner asks for and the screen that earns an underwriter's trust are the same screen, and building that twice would have been the real waste.

    It moved a confidentiality rule out of a policy doc nobody opens and into the screen itself.

    Read the reasoning
  3. 03

    Threw out a finished round and rebuilt on shipped patterns

    I'd built round one out of what a submissions queue looks like instead of how somebody actually works one. You can't tell those apart from a screenshot. You can tell immediately if you have to use it all day.

    I'd designed a queue you'd have to back out of fifty times a shift.

    Read the reasoning
Decision 03 · the rebuild

Round one looked like a product and worked like a mockup.

Same data, same palette, four weeks apart. Nothing here is about decoration. It's about whether you can make a decision and get to the next submission without going back to the list first.

Round one of the clearance queue: a left sidebar, five metric cards, and a nine-column table with an actions menu on every row.
Round oneNine columns. Five metric cards. An action menu on every row. Every button drawn as available.
Round two of the clearance queue: filter chips, two-line rows pairing insured with broker, and a selection bar along the bottom showing that clearance actions are unavailable for the selected rows.
Round twoTwo-line cells. Selection raises an action bar. Decide and advance without returning to the list. Two primaries greyed, with the reason beside them.

The fork

The first round was finished and internally consistent. Nine columns, five metric cards, a modal for the clearance result, an action menu on every row. Ship it, or take it apart.

The tension

Nothing in it was wrong. It was assembled from what a submissions queue looks like rather than from how one is worked. Those two produce similar screenshots and different products.

The call

I went back to shipped tools that do the same job — bulk review, document verification — and rebuilt on what they do. Two-line cells instead of nine columns. Selection raising an action bar instead of per-row menus. The check battery as a live rail rather than a modal you dismiss before you can act.

The consequence

Round one had no way to decide a submission and move to the next one without going back to the list. Every queue tool people actually work in all day has that. I had designed a queue you'd have to return to fifty times a day.

Decision 01 · writing the rules

I wrote the client's business rules for them, then labeled every line I'd made up.

The fork

Clearance was undefined and the client wasn't available to define it. I could design around the gap — a button, a spinner, a result — and wait. Or I could write the rules myself and hand them back as something to argue with.

The tension

Designing around the gap is the safe move and it gets you nowhere. Writing the rules myself meant a carrier might go build an underwriting control I'd made up out of market practice instead of their own policy. In insurance that's not a UX problem, it's a regulatory one.

The call

I wrote the full battery — eight checks, ordered so the regulatory hard stops run before anything expensive — and tagged every single rule with its provenance. Evidenced in the code. Proposed by me. Or open, meaning no safe default exists and someone has to decide.

The consequence

Fourteen trade-offs fell out of it, ranked by how much of the design falls over if the answer surprises us. Four of them are business policy and no amount of design closes them. Leave a blank in a spec and everyone walks past it — write down something wrong and somebody finally corrects you.

The check battery

Eight checks. Not one of them written down anywhere in the build.

Proposed
8
Left open
8
C1

Sanctions and watchlist

Screens the insured, its DBAs, its principals and the submitting broker against OFAC and denied-party lists. Fuzzy matching, because insurance entity names are noisy. A potential hit routes to Compliance and never to the underwriter — separation of duties.Open — Which list set is in scopeOpen — Whether a sanctions decline may be disclosed to the broker

Proposed
C2

Duplicate detection

Same risk, same broker — a resend or a resend with corrections. Matches on tax ID first, then normalized name, address and effective-date proximity. Runs at intake, before extraction spends anything.

Proposed
C3

Broker-of-record conflict

Same risk, different broker. This is what clearance classically means in this market: first in time holds the risk for a protection window, and a later submission is blocked for its duration. Escalates to a manager rather than auto-declining, because conflicts are commercial.Open — How long the protection window runsOpen — Whether a blocked broker may be told who holds the riskOpen — Who releases a block when the window lapses

Proposed

Sequence aborts above this lineDon't spend an appetite lookup on a sanctioned entity.

Show the remaining five checksappetite, licensing, prior history, aggregation, completeness
C4

Appetite and eligibility

Class, state, size band and prohibited-class list against the appetite matrix. Out of appetite declines with the failing dimension recorded; borderline refers to a human. The matrix has to be editable by business users — appetite moves quarterly, and hardcoding it guarantees the tool goes stale.

Proposed
C5

Licensing and regulatory eligibility

Admitted in the risk state or surplus lines, broker appointed and licensed there, producer agreement in force. A failure here is usually paperwork, not a bad risk — the design has to separate “we can't write this here” from “this broker isn't set up yet.”Open — How far into state-by-state surplus lines rules version one goes

Proposed
C6

Prior history

Have we declined this risk before, and why. Is there an in-force policy, meaning this is really a renewal misrouted as new business. A prior declination never blocks — circumstances change — but it rides along into underwriting instead of waiting to be looked for.

Proposed
C7

Aggregation and capacity

Cat accumulation by zone and peril, treaty capacity remaining, single-risk limit, concentration by class. Over the limit refers; it never declines. Capacity is a management decision.Open — Whether version one stubs this and refers manually

Proposed
C8

Data completeness

Enough to make a decision. Missing required data moves the submission to PENDING_INFO and asks the broker — it is not a decline. The SLA clock pauses there, because otherwise time-to-clear measures broker responsiveness and is useless as an internal metric.Open — The full set of fields that count as required

Proposed

Every rule in the spec has one of three tags on it. Code means the build already commits to it. Proposed means I'm putting up the industry default, because something to argue with beats an empty cell. Open means there's no safe default and nobody should build it until somebody decides.

Decision 02 · showing the work

The fast version shows one verdict. I shipped the one that shows all eight checks, boring ones included.

The fork

Clearance ends in cleared or not cleared. One line of copy would say it. The alternative was to show the whole battery — every pass, every skip, every reason — which is more to read at the exact moment someone wants to move on.

The tension

Time-to-clear is the product's headline metric, so anything that adds reading time argues against the thing being sold. But the same screen is the evidence an examiner asks for, and it is where an underwriter decides whether the machine is worth trusting.

The call

Show all eight. Put the stop first and let the clean passes collapse underneath it. The screen an examiner asks for and the screen that earns an underwriter's trust are the same screen — building that twice would have been the actual waste.

The consequence

The screen got heavier and every conversation about it got easier. It also dragged a rule out of a policy document nobody opens: when a submission is blocked because another broker already has the risk, you never tell the second broker who. That's a confidentiality obligation, and now the screen handles it instead of somebody having to remember it at 4pm on a Friday.

Three outcomes of the clearance battery shown side by side: a compliance hold where C1 stopped the sequence, a blocked broker-of-record conflict at C3, and the happy path where all eight checks passed.
The three ways out, drawn as three states rather than one success screen and an error. Left: COMPLIANCE_HOLD — C4 through C8 read “not run, sequence aborted”, which is information rather than an omission. Center: a conflict that names the block but never the broker holding it. Right: cleared in 2m 41s, with a 2019 declination carried forward as a flag that follows the submission instead of stopping it.
What each choice cost

Every decision bought something and gave something up.

I kept a register of all fourteen, so the client could overrule me on purpose instead of finding out six months later. These five mattered most.

Auto-clear the clean submissions, or make a human touch every one
What I choseAuto-clear only when every check comes back clean and extraction confidence clears the bar. Configurable, and it ships set tight.
What it costsStarting tight makes the headline number look worse in year one. But you can always loosen a rule once you have evidence. You can't un-clear a submission that already went out.
Let underwriters edit the extracted fields, or lock them to the document
What I choseEditable, with the original always one click away and every edit logged. It's the only way somebody fixes bad extraction without leaving the tool, and the only way anybody ever finds out how accurate extraction actually is.
What it costsIt makes the audit model harder. Every edit has to be stored as a correction, not a replacement.
A dense working tool, or the brand's editorial spacing
What I choseDensity, while keeping the brand's type, color and flat square corners. Somebody working thirty submissions before lunch needs rows, not air.
What it costsIt looks less like the marketing site than the brand people would like. I'll defend that one all day — throughput is the job.
Ship without pricing, or hold the launch until the loop closes
What I choseShip it, and design the seam instead of pretending it isn't there: a thirty-second screen that records what got quoted, where, and when.
What it costsIt's a chore, and the person doing it gets nothing back for it today. Skip it and you can't calculate hit ratio, which means nobody ever makes the case for phase two.
Filter in the browser, or on the server
What I choseServer-side search, filtering and pagination from the first release.
What it costsMore backend work before anyone sees anything, to solve a problem nobody's hit yet. The volume question that would settle it is still sitting unanswered.
The artifacts

The working documents, if you want to dig.

Closed by default. Everything above is the argument; this is the evidence underneath it, and none of it is worth scrolling past if you have already seen enough.

Structural wireframes — all eight pages

Before either round I drew the whole thing with no color and no type hierarchy, so the arrangement could be argued with before anything looked finished. That is also the version I'd show first if I ran this again — the polished round one absorbed a week of review attention that should have gone to structure.

Eight structural wireframes in black and white: login, clearance queue, application detail, clearance result, add submission, underwriting dashboard, accounts and account detail.
All eight pages as boxes and labels. What sits where, and what each region is for — no color, no type hierarchy, no real data.
The submission state machine
The submission state machine: seventeen states from RECEIVED through BOUND, with branches to COMPLIANCE_HOLD, BLOCKED_CONFLICT, PENDING_INFO, REFERRED, DECLINED and DELETED, each tagged as evidenced in code or proposed, followed by the full transition table.
Seventeen states, who owns each one, and which are reversible. Six are evidenced in the build; the rest are proposed. Drawing it is how I found the contradiction — the spec lists DELETED as terminal in one place and restorable in another, and both can't be true.
Journey map — the underwriting team
Journey map of the underwriting team: eight stages from intake to bind across five roles, each stage compared as it works today versus with Raptor, with a feeling row, an opportunity row, a table of handoffs that break, and seven questions ordered by how much of the map collapses if the answer surprises us.
The whole submission across five roles, today against with Raptor, with the handoffs that break called out separately — the underwriter-to-manager one is the most frequent and the least instrumented. The seven questions at the bottom right are ordered by how much of the map collapses if the answer surprises us, and two ninety-minute sessions close the first six. The map is inferred from the prototype, the spec and domain practice; those sessions are the thing that would make it evidence.
One submission, start to finish

Two of those six days belong to the broker and one to Compliance, which is why the product reports elapsed time and net time separately.

The submission timeline for Waterfront Bar and Grill: received via the submissions mailbox, extracted with two fields flagged, held by Compliance for two hours and seventeen minutes, cleared with a 2019 declination surfaced, referred for class sign-off, and bound at forty-eight thousand two hundred dollars.
The same submission as a record. Every pause is attributed, so the clock can be reported honestly.
  1. 09:02

    It arrives as an email

    Documents are pulled out and a minimum record is captured before extraction runs, so the submission survives if extraction fails. Duplicate detection runs first, before any processing cost is spent.

  2. 09:14

    A sanctions hit stops it

    A fuzzy name match against a sanctions list. It is a false positive, and the underwriter is not allowed to decide that. The screen names who has it, since when, and that their clock is paused — then offers them the next submission.

  3. 11:34

    Cleared, with something attached

    All eight checks pass. One flag rides along: this risk was declined in 2019. It blocks nothing — circumstances change — but it follows the submission into underwriting instead of being something an underwriter has to think to look for.

  4. Day 3

    It goes above their authority

    Referrals happen constantly, and most systems treat them like an exception — so underwriters learn to route around the whole thing. Here it gets its own queue, its own clock, and a written rationale on both ends.

  5. Day 6

    Bind is blocked, and says why

    Six preconditions, two outstanding: a subjectivity the broker hasn't returned, and a sanctions screen that is 41 days old. Lists change between quote and bind, so it re-runs. A hard block with a vague reason gets escalated around; this one names what is missing and who owns it.

The new-submission screen with two documents attached, an inline notice that this looks like a resend of an earlier submission, and a minimum record part-filled from the ACORD form.
Intake. The duplicate is caught inline, before extraction spends anything.
The referrals queue as three cards, each showing the reason for referral, the referring underwriter's written rationale, the SLA remaining, and approve, approve-with-conditions and decline actions.
Referral gets its own queue, its own clock and a recorded rationale on both ends. Cards rather than rows, because a referral decision needs the reasoning in view.
The round-one set, and what got killed

Round one was finished and internally consistent across the whole product, which is what made it worth arguing with rather than patching. Shown at thumbnail size on purpose — the point is that one vocabulary covered every screen, not what any single one says.

  1. Round-one sign-in screen, split with the product's value claim and two live proof numbers on a dark panel at right.
    01Sign in
  2. Round-one clearance queue: a left sidebar, five metric cards and a nine-column table of submissions with an actions menu on every row.
    02Clearance queue
  3. Round-one add-submission screen with a document drop zone, three files in different upload states, and a possible-duplicate notice beside the minimum record.
    03Add submission
  4. Round-one application detail: the ACORD form on the left, extracted fields with per-field confidence on the right, and a sanctions alert routed to Compliance across the top.
    04Application detail
  5. Round-one underwriting dashboard: four figures, submissions by outcome over eight weeks, a ranked why-we-declined chart and a recent-policies table.
    05Underwriting dashboard
  6. Round-one referrals queue: three referral cards, each with the reason, the referring underwriter's rationale, SLA remaining and approve, approve-with-conditions and decline actions.
    06Referrals
  7. Round-one accounts list sorted by renewal date, with total accounts, in-force premium, renewals within thirty days and open submissions across the top.
    07Accounts
  8. Round-one account detail for Halcyon Senior Living: in-force policies, a relationship timeline, a renewal panel, open submissions, locations and compliance status.
    08Account detail
The round-one clearance result as a modal dialog: a header reading Clearance blocked — broker-of-record conflict, then a table of all eight checks with result, outcome and owner columns, C3 expanded and C4 through C8 marked skipped.
KilledThe clearance result as a modal. The content survived almost intact into round two — all eight checks, the skipped rows, the owner of each outcome. What did not survive is the dialog around it, which you have to dismiss before you can act on anything it just told you.
What I'd do differently

Where this work is weakest.

No underwriter was ever in the room. All of this comes off a prototype, a spec, and what I know about how commercial underwriting works. I wrote a discussion guide for two sessions that would have closed six of the open questions, then designed the screens before those sessions happened — because the alternative was designing nothing. Right call given the constraint. Still the weakest thing about this work.

I made round one look finished too early. Show people something polished and they'll give you opinions about the polish. I should have kept the black-and-white version on the table another week and made everyone argue about the structure.

There's a score in the queue I can't explain. Every submission carries a win score. Nobody could tell me how it's calculated, or even whether it means "we'd probably win this" or "this is worth winning" — which are not the same thing. I designed a row-level explanation for it and had to make up what the inputs were. Ship that number without an explanation and the senior underwriters whose time it's supposed to protect will ignore it, which is the one outcome nobody wants.

And there are no outcomes on this page. I specced this and handed it to engineering in 2022. What you've read is the design and the thinking behind it, not what the built product went on to do. I could put a number here, but I never measured one, and inventing it would undo every provenance tag above it. The two I'd want first: median time-to-clear with the pauses taken out, and what share of submissions clear without anyone touching them.

The prototype

All of this is about screens. Here are the screens.

The prototype this case study was written against, still clickable. Sign-in is a demo — the email is filled in and any password gets you through. The figures inside it are sample data, not measured results; this page still hasn't got any of those.

Open the prototype (opens in a new tab)