Bidemi Ajala 🌍

New York

← Thoughts

Who Owes Who

A fortnight away with the same seven friends, and the same argument about money. So I built a bill splitter, and the thing that fixed it was routing every bill through one payer.

4 min read

My friends would tell you I'm frugal. The word they actually reach for is less generous than that, and it tends to come up when I'm the one asking why the bill is forty euros more than the sum of what everyone ordered.

That question ruined a couple of evenings on our trip in 2025. Seven of us, two weeks, and a running argument about money that nobody wanted to have. Someone always paid more than their share, someone always paid less, and by day four we were reconstructing a Tuesday lunch from three blurry photos and a group chat. The worst part is that nobody was being dishonest. We just had no record of anything.

So I built Tally before this summer's trip. Same friends, same fortnight, and this time nobody had that conversation once.

How it works at the table

One person takes a photo of the receipt. Claude reads it and turns it into line items with prices, which lands in a review screen where the organiser can fix anything the parser got wrong.

Then everyone else opens a link and taps what they ordered. No account, no app to install, no sign-up. The organiser gets a six-character code and that's the entire auth model. It's a bill for tapas, so a password felt like a lot to ask.

Shared items work the way you'd hope. Tap the bottle of wine, so does everyone else who drank it, and its price divides between exactly those people. Tax is always split in proportion to what each person's items came to, because someone ordering a coffee shouldn't pay the same tax as someone who ordered the seafood platter. Tip can go either way, equal or proportional, and the organiser picks. That one is a genuine matter of taste and I wasn't going to pretend otherwise.

Nothing finalises while an item is still unclaimed. The app blocks it and shows you what's outstanding, because an unclaimed item is exactly the gap that used to turn into an argument two days later.

Who owes who

This is the part that made the difference, and it's less about clever code than about picking the right shape.

Every bill in Tally has one payer. One person puts their card down for the whole thing, and everyone else owes that one person their share. The payer's own share is marked as paid the moment the split is finalised, because asking someone to transfer money to themselves is the kind of detail that makes people stop trusting an app.

Think about what that does to the number of payments.

settling from memoryone payer per billpaysup to 21 debts between 7 peopleand every one of them from memory6 transfers, all pointing one waythe payer's own share settles itself
The same dinner, settled two ways.

If everyone can owe everyone, seven people give you up to twenty-one possible debts, because that's what n(n-1)/2 does to you. Nobody tracks twenty-one anything on holiday, least of all on day nine.

Route every bill through a single payer and it collapses to six. More usefully, they all point the same direction, so each person has one number to send and one person to send it to. The maths isn't the interesting bit. The interesting bit is that six transfers to one person is a thing a group can actually finish, and twenty-one half-remembered IOUs is not.

Splitting at the table doesn't fix it either. Seven cards is seven taps, a slower waiter, and at least one place per trip that flatly refuses.

The small things that mattered more than I expected

Different people paid on different nights, which spread the fronting around without anyone planning it. Prices came in the local currency and half the group thinks in another, so Tally pulls live rates and lets the organiser override them when the card statement disagrees. It handles pounds, dollars, euros, lek and naira, which is exactly the set my friends need and nobody else.

There's also a phase to each bill. It sits in review while the organiser checks the parse, moves to split while people claim their items, and lands on settled. Making that state visible meant people stopped asking whether a bill was done.

This time

The 2025 trip ended with a spreadsheet and a slightly tense evening. This one ended with everyone square before we got to the airport, and I didn't have to be the person who brings up money.

An app I started building because I didn't want to overpay by twelve euros has become the first thing the group asks about before dinner. I'd like to say I built it for them. I built it because the bill was forty euros too high in 2025 and it bothered me for a year.