Donation Platform

Design a donation platform like GoFundMe — a campaign can go viral overnight and receive a massive spike of small donations, and every dollar must be captured, refundable, and reflected in an...

00

Practice checkpoints

The requirements are open as a taste. From the numbers onward, the full guide opens in the app.

  1. 01
    Clarify scope
  2. 02
    Requirements + scale
  3. 03
    API + data modelUnlocks in the app
  4. 04
    Draw architectureUnlocks in the app
  5. 05
    Deep diveUnlocks in the app
  6. 06
    Trade-off decisionUnlocks in the app
01

Requirements that shape the design

Do not only state requirements. Ask for them. Each card pairs the design constraint with a clarification question you can say out loud before drawing the architecture.

Functional requirements

01A donor taps donate — what happens before any money actually moves?

The donation is recorded as an intent first — campaign, amount, donor, payment token — and the donor immediately sees “thank you, processing”: committing to donate and completing the charge are two separate steps.

02The campaign just went viral — ten thousand people are donating this minute. Do we slow down?

No — accepting a donation is one cheap local write, so the platform keeps saying yes at viral speed while the actual charges drain through a queue at whatever rate the payment provider can take.

03What does the campaign page show while all of that settles?

A live progress total and donor count that move within seconds of each donation — approximate on purpose, backed by an exact append-only ledger it is reconciled against.

04Can money go back — one donor, or a whole campaign?

Both: a single donation can be refunded, and a cancelled or fraudulent campaign triggers a bulk refund of every donation — and each refund also walks the public progress total back down.

05Who takes a cut, and off which number?

Each donation splits into gross, payment-provider fee, platform fee or tip, and net-to-campaign — recorded per donation in the ledger, because fees are per-transaction facts, not an average you can apply later.

06When does the organizer actually get the money?

On a payout schedule, after a hold window that lets fraud signals and chargebacks surface — only settled net funds move, and a campaign under review is frozen before a single dollar leaves.

Out of scopePayment-provider internals — card networks, bank authorization, settlement rails (we integrate a PSP, we do not build one) · Campaign discovery, search, and the social sharing feed that makes campaigns go viral in the first place · Tax receipts, Gift Aid, and per-country charitable-giving compliance documents

Non-functional requirements

01How big is the spike we design for?

Around 100× baseline overnight: one viral campaign can jump from 2 donations a minute to 10,000 — the accept path must ride that without dropping a single intent.

02Retries everywhere — can a dollar ever count twice?

No: every capture call carries an idempotency key and every provider webhook is deduplicated by event id, so a retry on either leg lands in the ledger exactly once.

03Does the progress bar have to be exact?

Fast and honest, not exact: seconds of staleness and small drift are fine because a reconciliation job continuously trues the counter up against the ledger — the ledger itself is never approximate.

04The payment provider goes down for an hour — what breaks?

Nothing donors can see: intents keep landing, the queue holds the backlog, and workers retry with backoff when the provider returns — an accepted donation is a promise the queue keeps.

05What is the durability bar for an accepted donation?

An intent is synchronously replicated before the thank-you renders — thanking a donor and then losing their donation is the one failure this platform can never explain.

Keep asking — the interview is a conversation

Real interviews probe far more than a tidy list. These are the scope questions that separate candidates who interrogate the problem from those who recite it.

  • Is the platform fee a percentage, a voluntary tip, or both — and does the progress bar show gross or net of fees?
  • Do we need recurring monthly donations, with retries and a stop rule when a renewal charge keeps failing?
  • International donors — charge in their own currency and reconcile into the campaign’s goal currency, or single-currency only?
  • How long can we hold organizer payouts for fraud review before the hold itself becomes a trust problem?
  • How much drift is acceptable on the public total — a few dollars for a few seconds, or must reconciliation run tighter?
01

Unlock the full playbook for Donation Platform

Numbers, architecture diagram, API and data model, deep dives, expected topics, self-check, whiteboard starter, and common mistakes unlock inside the app.

02

Numbers that force architecture decisions

Locked in the app

03

Architecture path

Locked in the app

04

API and data model

Locked in the app

05

Deep dive directions

Locked in the app

+Series

Practice the related series