DoorDash Reconciliations:
Proving the Numbers

DoorDash Reconciliations:
Proving the Numbers

SKIP TO THE DESIGNS

SKIP TO THE DESIGNS

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)

An accountant at a desk transcribing figures from paper into a laptop

Balances transcribed by hand from a working spreadsheet into a tracking sheet. A single typo propagated silently through the close, and once a number landed there was no record of where it came from.

The Preparer

Two colleagues reviewing a printed statement together in an office

Approval happened over email and chat, detached from the evidence it approved. A reviewer could sign off an account already out of balance, and nothing stopped them.

The Reviewer

A wide office floor of accountants working through stacks of paper

Two accounting systems, multiple legal entities, and post-acquisition mappings where one parent account carries several children. Close progress invisible until it was already late.

The Organisation

An accountant at a desk transcribing figures from paper into a laptop

Balances transcribed by hand from a working spreadsheet into a tracking sheet. A single typo propagated silently through the close, and once a number landed there was no record of where it came from.

The Preparer

Two colleagues reviewing a printed statement together in an office

Approval happened over email and chat, detached from the evidence it approved. A reviewer could sign off an account already out of balance, and nothing stopped them.

The Reviewer

A wide office floor of accountants working through stacks of paper

Two accounting systems, multiple legal entities, and post-acquisition mappings where one parent account carries several children. Close progress invisible until it was already late.

The Organisation

The Preparer

The numbers and the proof lived in different places

The Reviewer

The Organisation

Hover for details

Balances transcribed by hand from a working spreadsheet into a tracking sheet. A single typo propagated silently through the close, and once a number landed there was no record of where it came from.

a group of people in a room with a projector screen

Approval happened over email and chat, detached from the evidence it approved. A reviewer could sign off an account already out of balance, and nothing stopped them.

Two accounting systems, multiple legal entities, and post-acquisition mappings where one parent account carries several children. Close progress invisible until it was already late.

(Stakeholder Sessions)

Hover to flip

(I)

Admin

Configures

Can I change the rules without touching the work inside them?

Owns folder hierarchies, account mappings, variance thresholds and permissions. Never touches a single reconciliation.

Owns folder hierarchies, account mappings, variance thresholds and permissions. Never touches a single reconciliation.

(II)

Preparer

Performs

Where did this number come from, and why don’t the two agree?

Extracts the balance, documents the gap, hands off for review. Lives in one account at a time and should never have to leave it.

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

Can I trust this enough to put my name on it?

Validates the work against its evidence, one click from the source sheet. Blocked outright from approving anything out of balance.

Validates the work against its evidence, one click from the source sheet. Blocked outright from approving anything out of balance.

(IV)

Team Lead

Oversees

What is going to make us miss the close?

Overdue and high-risk surfaced first, work movable between people mid-cycle. Reads the dashboard before the grid, every time.

Overdue and high-risk surfaced first, work movable between people mid-cycle. Reads the dashboard before the grid, every time.

(V)

Executive

Reads

Are we closed, and are we clean?

Completion, risk and audit-readiness — and nothing else. Every extra control on this screen is a liability.

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)

The category standard, and the bar our stakeholders measured us against in every review.

Benchmark · FloQast

(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.

This is how I designed

This is how I designed

This is how I designed

DoorDash

DoorDash

DoorDash

Reconciliations

Reconciliations

Reconciliations

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

(Information Architecture)

(Information Architecture)

Reconciliations

Scope the view

Entity

Cost centre

Period

Folder

Tags

Quick filters

Assigned to you

Ready for review

Due today

Late

Link workbook

Extract via anchor

Compare to GL

Calculate variance

Resolve

Comment thread

Attach evidence

Reassign

Preparer sign-off

Reviewer sign-off

Completed

Nightly refresh

Falls out of balance

Redo

The loop at the bottom is the point: a reconciliation is never permanently done.

Reconciliations

Scope the view

Entity

Cost centre

Period

Folder

Tags

Quick filters

Assigned to you

Ready for review

Due today

Late

Link workbook

Extract via anchor

Compare to GL

Calculate variance

Resolve

Comment thread

Attach evidence

Reassign

Preparer sign-off

Reviewer sign-off

Completed

Nightly refresh

Falls out of balance

Redo

The loop at the bottom is the point: a reconciliation is never permanently done.

Reconciliations

Scope the view

Entity

Cost centre

Period

Folder

Tags

Quick filters

Assigned to you

Ready for review

Due today

Late

Link workbook

Extract via anchor

Compare to GL

Calculate variance

Resolve

Comment thread

Attach evidence

Reassign

Preparer sign-off

Reviewer sign-off

Completed

Nightly refresh

Falls out of balance

Redo

The loop at the bottom is the point: a reconciliation is never permanently done.

(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.

The redesigned reconciliations grid

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)

Parentheses, not a minus sign
A negative variance renders as (30.93). Accountants read a leading minus as a typo — parentheses are what the profession has used for a century.

Parentheses, not a minus sign
A negative variance renders as (30.93). Accountants read a leading minus as a typo — parentheses are what the profession has used for a century.

(II)

Tabular figures, right aligned

Digits share a fixed width so decimal points stack down the column. Scanning for an anomaly becomes shape recognition rather than reading.

Tabular figures, right aligned

Digits share a fixed width so decimal points stack down the column. Scanning for an anomaly becomes shape recognition rather than reading.

(III)

Missing is not zero
A failed extraction gets its own token. Rendering it as 0.00 produces a variance that looks real and reconciles to nothing.

Missing is not zero
A failed extraction gets its own token. Rendering it as 0.00 produces a variance that looks real and reconciles to nothing.

(IV)

Colour is reserved for two things

A variance that breaches threshold, and status. Everything else stays neutral so those two carry weight in a twenty-column row.

Colour is reserved for two things

A variance that breaches threshold, and status. Everything else stays neutral so those two carry weight in a twenty-column row.

(The Dashboard)

Three status donuts, a target-versus-actual trend chart, and five single-figure counters

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

The inherited component sheet

Delivered

~24 component families · 45+ states

The delivered component library

(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

Nobodydecidedthechartlegendshoulddisableaseries.Itjustdidthatiswhatthelibrarydoeswhennobodyintervenes.Fixingthemoneatatimewouldmeanfixingthemagainnextquarter.
Atwo-weeksprinttoturnapersonalfrustrationintoaworkingproduct,usingClaudeCodetoacceleratedevelopmentanditeration.
Nobodydecidedthechartlegendshoulddisableaseries.Itjustdidthatiswhatthelibrarydoeswhennobodyintervenes.Fixingthemoneatatimewouldmeanfixingthemagainnextquarter.

So I stopped designing screens.

The system happened twice: once to stabilise what existed, once to replace the foundation it stood on.

The system happened twice: once to stabilise what existed, once to replace the foundation it stood on.

(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)

Write the glossary first

The highest-leverage artifact in a domain-heavy project isn’t a flow — it’s shared vocabulary. I wrote around forty definitions into the spec, from anchor to variance. Half the review cycles that felt like design disagreements were definition disagreements.

01

Automation needs a visible seam

The anchor system was the most technically elegant part of the product and needed the most design attention, precisely because it worked invisibly. Trust in a finance tool is built entirely at the failure states.

02

A QA pass is a deliverable

Twelve issues in one structured walkthrough, several of which would otherwise have reached accountants mid-close. Design QA isn’t a favour to engineering; it’s the last place the design still exists.

03

Findings are requirements in disguise

The useful output of the audit wasn’t the fix list. It was the evidence that the drift was structural — which is what turned “we should have a design system” from an opinion into an argument.

04

Write the glossary first

The highest-leverage artifact in a domain-heavy project isn’t a flow — it’s shared vocabulary. I wrote around forty definitions into the spec, from anchor to variance. Half the review cycles that felt like design disagreements were definition disagreements.

01

Automation needs a visible seam

The anchor system was the most technically elegant part of the product and needed the most design attention, precisely because it worked invisibly. Trust in a finance tool is built entirely at the failure states.

02

A QA pass is a deliverable

Twelve issues in one structured walkthrough, several of which would otherwise have reached accountants mid-close. Design QA isn’t a favour to engineering; it’s the last place the design still exists.

03

Findings are requirements in disguise

The useful output of the audit wasn’t the fix list. It was the evidence that the drift was structural — which is what turned “we should have a design system” from an opinion into an argument.

04

Per GL

$1,460,143.00
$1,460,143.00
$1,460,143.00

Per Excel

$1,460,143.00
$1,460,143.00
$1,460,143.00

Variance

$224,631.00
$224,631.00
$224,631.00

Portfolio

CHECK OUT SOME MORE

CHECK OUT SOME MORE

CHECK OUT SOME MORE

Trip Replay: Relive Your Memories

Trip Replay: Relive Your Memories

Trip Replay: Relive Your Memories

App Design

Feature Addition

Trip Replay: Relive Your Memories

Trip Replay: Relive Your Memories

App Design

Feature Addition

Vidhira: Empowering Future Engineers

Vidhira: Empowering Future Engineers

Vidhira: Empowering Future Engineers

UI/UX Design

Designing for AI

Vidhira: Empowering Future Engineers

Vidhira: Empowering Future Engineers

UI/UX Design

Designing for AI

Create a free website with Framer, the website builder loved by startups, designers and agencies.