All BlueprintsFintech

Shared expense splitter

A group logs what each person paid, the app works out who owes whom, and settling up clears it. No money moves through the product: it keeps the record, and the record has to balance to the penny for every split, correction and settlement the group throws at it.

L2–L4Level range
8Sprints
38Tasks
Backend and frontendBuilt as

What you’ll build.

By the last sprint

An app for splitting costs with other people. Start a group, invite everybody in it, add an expense, and see at once who owes whom. Split a bill the way it was really split, fix a mistake weeks later without the numbers going wrong, and settle up in the fewest payments that clear the group.

What you’ll learn.

Each sprint is built around one skill. You show you have it in a pull request your team reviews, then explain it in a walkthrough.

Authentication

You can register and sign in a user, keep a request authenticated without asking for the password again, and explain where the credential lives in the browser and why there rather than somewhere else.

Roles and permissions

You can give users different roles and have the server refuse what a role may not do — not merely hide the button — and show the refusal working against a request the interface never offered.

A ledger you can trust

You can record credits and debits and produce a balance that is the sum of them — and explain why the balance is not a column you update, and what happens when two movements land at once.

Email verification

You can issue a verification link, activate the account when it is followed, and explain what the link contains and why it cannot simply be a user id.

Going live

Somebody who has never met you can open a URL and use the product — and you can say what is different about the copy running there, where its secrets come from, and what you do when a release turns out to be wrong.

The roadmap. 8 sprints, 38 tasks.

Every sprint has a goal and a set of tasks. Open a sprint to see the tasks you will pick up.

Sprint 01

Getting in

Somebody can make an account, come back to it, and be recognised by the name their friends use.

4 tasks
  1. Somebody can register and land signed in
  2. Coming back next week does not mean starting again
  3. Signing out leaves nothing behind on a shared machine
  4. Everybody appears by the name their friends use
Sprint 02

A group of people

Somebody can start a group, put the people in it, and nobody outside it can see a thing.

4 tasks
  1. Somebody can start a group and say who is in it
  2. A group is invisible to everybody who is not in it
  3. A member of a group can be somebody with no account
  4. A group with nothing in it says what to do next
Sprint 03

What one person paid

One person pays for the group, everybody else owes their share, and the group adds up to nothing.

5 tasks
  1. Somebody can log what they paid for the group
  2. Every member sees what they owe and what they are owed
  3. £10 between three people leaves nobody a penny short
  4. The positions in a group always add up to nothing
  5. A hundred expenses still add up the way a person adds them up
Sprint 04

Splits that match what happened

A bill can be split by share or by exact amount, between some of the group, and it still adds up to nothing.

5 tasks
  1. A bill can be split by share rather than equally
  2. A bill can be split by exact amounts, and the amounts must add up
  3. An expense can be shared by some of the group, not all of it
  4. Somebody can pay for something they are not part of
  5. Any expense can be opened to see exactly who was charged what
Sprint 05

Settling up

A payment between two people clears what is between them, and the group can settle in the fewest payments.

5 tasks
  1. Recording a payment between two people clears what is between them
  2. The product says the fewest payments that settle everybody
  3. The same payment recorded twice does not count twice
  4. A part payment leaves the rest outstanding
  5. The product is clear that it records payments rather than making them
Sprint 06

Nothing is deleted

An expense can be corrected or removed weeks later, and every number still explains itself.

5 tasks
  1. An expense can be corrected after forty more have landed on top of it
  2. A removed expense leaves a trace, not a hole
  3. Every figure opens into what made it
  4. Somebody can leave a group while they still owe money
  5. Correcting an expense does not quietly undo a settlement
Sprint 07

The people are real

The people in a group own the addresses they were invited at, and whoever joins inherits what is already recorded against them.

5 tasks
  1. A member who has no account can be invited by email
  2. An invitation cannot be guessed, reused or passed on
  3. Accepting an invitation inherits the history already recorded
  4. An account proves its address before it takes part in any money
  5. Inviting somebody who is already in the group does not create a second them
Sprint 08

Put it where people are

The group can use it on the internet, and the record survives losing the machine it runs on.

5 tasks
  1. A stranger can reach it and use it while your machine is off
  2. Invitations and confirmations arrive in a real inbox
  3. Nothing the running product needs lives in the repository
  4. It has an address worth typing, over a connection nobody is warned about
  5. A bad release can be undone, and the record survives losing the machine

Read before you build. The best engineers do.

Senior engineers read the docs before they touch the code. Every Blueprint comes with short documents on the product and its world, the kind a team hands a new hire. Read them well and you ask sharper questions and walk into every review prepared.

What you are building

The product, who it is for, what finished means, and why the arithmetic is the whole job.

A ledger that balances

Movements instead of balances, why every entry sums to zero, and the invariant test that fails the day you get it wrong.

Build shared expense splitter.

Start your free week. Adaeze runs your kickoff, and Lars reviews every pull request.