What
An internal reconciliations module — where accountants run and sign off the month-end close across hundreds of GL accounts.
Why
Hundreds of accounts, two accounting systems and multiple entities, closed every month against a deadline that doesn’t move.
How
A grid that carries the whole job, extraction that shows its work, and controls that stop a broken reconciliation being approved.
(Problem Statement)
(Stakeholder Sessions)
(I)
Admin
Configures
Owns folder hierarchies, account mappings, variance thresholds and permissions. Never touches a single reconciliation.
(II)
Preparer
Performs
Extracts the balance, documents the gap, hands off for review. Lives in one account at a time and should never have to leave it.
(III)
Reviewer
Approves
Validates the work against its evidence, one click from the source sheet. Blocked outright from approving anything out of balance.
(IV)
Team Lead
Oversees
Overdue and high-risk surfaced first, work movable between people mid-cycle. Reads the dashboard before the grid, every time.
(V)
Executive
Reads
Completion, risk and audit-readiness — and nothing else. Every extra control on this screen is a liability.
To be clear about provenance: the primary research predates me — it arrived with the PRD and BRD. I joined once the first draft existed. What I did was work these roles out from the accounting team directly, in review sessions and in the comment logs.
(Negotiated)
A
Accounting
Thinking, for Wolt, whether we should include the prefix of the DoorDash account number.
P
Product
We’ll use an anchor naming convention: parent account, child account, subsidiary, country.
The anchor format wasn’t designed. It was negotiated, around a post-acquisition mapping problem.
A
Accounting
What happens when there are multiple anchors for the same account in the file? I’m thinking of input errors, where several show up.
P
Product
We can bake in logic for the edge case where multiple mappings exist, and show it visually on the task so reviewing the mapping becomes part of the work.
This is where the collision flag came from — a stakeholder’s what-if, not a spec line.
A
Accounting
Can we call this ‘re-opened for preparation’?
P
Product
Yes.
The Redo status was named by the people who’d be reading it.
A
Accounting
Is there ever a case where consolidated balances are needed for reconciliation?
P
Product
No. We reconcile by entity, in entity currency — there’s no need for consolidated balances.
A feature we’d scoped, removed by the people who’d have used it.
(Benchmark)

(I)
KEPT
Quick filters
Assigned to You, Ready for Your Review, Due Today, Late. Accountants already sliced their work this way. Inventing new slices would have been ego, not design.
(II)
KEPT
Sign-off as a discrete act
Approval is a control you operate, not a status you edit. That framing came straight from the incumbent, and it survived every iteration afterwards.
(III)
REJECTED
One flat status
Preparer and reviewer do genuinely different jobs. Collapsing them into a shared vocabulary is exactly what made the inherited draft ambiguous.
(IV)
REJECTED
The spreadsheet as a detached artifact
FloQast links out to working papers. Anchors pull the number out of them — which is the difference between referencing evidence and reading it.
(V)
REJECTED
A point solution at all
Reconciliations was one branch of a platform also carrying flux analysis, worklists, financial statements and data templates — pulling from DoorDash’s own data layer, across two accounting systems, with post-acquisition mappings and internal ticket IDs on every row.
(Starting Point)

01
Six status colours, no rule
Overdue black, Delayed red, Incomplete yellow, Under Review orange, Reject red again. Nothing connected hue to severity, so scanning for trouble meant reading every cell.
02
Controls named after their mechanics
The filter bar offered View, AS OF, and one labelled simply Dropdown. None of those describe a thing an accountant is looking for.
03
Two Status columns, side by side
Preparer and reviewer status sat adjacent under near-identical headers, sharing a vocabulary that meant different things on each side.

A breakdown of the decisions, conventions, and systems behind the final solution.

(Core Mechanic)
Reconciliation workbook
1,460,143.00
#FC_1600_4021_DDI_US
extract
Reconciliations grid
$1,460,143.00
$0.00
(The Grid)
Pass 1 — inherited
seven groups, three one column wide
Title
Per GL
Per Excel
Threshold
Preparer
Reviewer
Reconciliation
Pass 2 — shipped
five groups, twenty-one columns
Common
Amount
Preparer
Reviewer
Miscellaneous
Pass 3 — systematised
groups become components
Actions
Per GL
Per Excel
Reconcile
Preparer
Miscellaneous
Reviewer
A — Concatenated
1000-1 DDIJPM AC 9808 (AR) (DoorDash, Inc)
One Account column carrying entity, account and description at once. This is what the inherited draft did — unsortable, unscannable, and impossible to filter on entity alone.
B — Separate columns
Shipped
Subsidiary 2 · 1003
Entity and account become independent columns, each sortable and filterable. The account number stays a clean numeric token, which matters when the eye is scanning a column of them.
C — Tooltip
1003 ⓘ hover for entity
Cleanest at rest, but it hides a value people need while scanning. A tooltip is for detail on demand, not for something that qualifies the row’s identity.
The table is the product.
Twenty-one columns, four audiences, one screen.

Grouped headers, an in-grid filter row, reconcile toggles, one status treatment, identifiers that link out.
(Number Treatment)
Account
Per GL
Per Excel
Variance
Status
1000-1 Cash — JPM
1,460,143.00
1,460,143.00
0.00
Completed
1003 Savings
61.12
92.05
(30.93)
To Be prepared
1002-1 Payroll clearing
286,630.00
Missing
—
Re-opened
1300 Accounts receivable
74,231.76
74,231.76
0.00
To Be prepared
(I)
(II)
(III)
(IV)
(The Dashboard)

1
2
3
4
01
One grammar, three donuts
Grey not started, green good, red problem — identical across preparer, reviewer and accounts. Learn one and you can read all three.
(Component Inventory)
04
Inherited
→
24
Delivered
45
States
Inherited
~4 components · 9 artboards

Delivered
~24 component families · 45+ states

(Design QA)
Hover on tiles for details
01
02
03
04
05
06
07
08
09
10
11
12
05 · Spec drift
Legend disables a series instead of highlighting it
Asking for focus removes information.
The Pattern Underneath
So I stopped designing screens.
(System Detail)
01 · WHAT SHIPPED
One status pill instead of six inventions, and a documented component behind every dialog the grid opens.
Text · Primary — #191919
Text · Secondary — #686E80
Text · Link — #1E88E5
Text · Hint — #808080
Border — #D2D2D2
Disabled — #ACACAC
Background · App — #F3F4F5
Background · Chatbot — #D1D5D9
Tab · Invoices — #E0F7FA
Tab · Customer — #FCE4EC
Tab · AR Balance — #E8F5E9
Tab · AR Aging — #FFF8E1
Status · Red — #E5393B
Status · Orange — #F57C00
Status · Green — #2E9E4F
Status · Yellow — #FFC400
Status · Blue — #1E88E5
Status · Purple — #8B3DFF
Status · Pink — #F0399B
Status · Mint — #2DE0C0
This is the system running at DoorDash and Wolt today, and it did the job it was built for. Its ceiling was the format: styles can’t alias, scope, or switch, so the hex lives in the label and a second theme means a second set maintained by hand.
02 · WHAT CAME NEXT
The same pill, rebuilt so it could carry every state — forty-odd objects down to one component and four booleans.
Before

After

Colour comes from the state family, not a manual pick. Icon, chevron, dismiss and disabled are toggles on one component, not new objects.
03 · THE DETAIL THAT DOES THE WORK
And type named for where it goes, with leading declared rather than inherited.
TEXT 24 BOLD · 24/AUTO
Accounts receivable
TEXT 14 REGULAR · 14/AUTO
1300 — Accounts receivable
Reconciled by Jane Thomas
HEADING / LARGE / BOLD · 24/28
Accounts receivable
BODY / MEDIUM / REGULAR · 14/16
1300 — Accounts receivable
Reconciled by Jane Thomas
(T) BODY / MEDIUM / REGULAR · 14/20
1300 — Accounts receivable
Reconciled by Jane Thomas
The gap between 14/16 and 14/20 is the grid’s row density — a decision the scale now makes explicitly rather than leaving to the browser.
(Reflection)

Per GL
Per Excel
Variance
Portfolio
HAVE A PROJECT
IN MIND ?







