← Work

Case study

Tally · Group Expense Splitting

A mobile group-expense app built around the one thing these apps keep breaking: trust in the money. No account wall, balances that stay visible at every level, and a settle-up you can see before you send. Every screen here is a working prototype you can open and use.

Role
Product Designer
Timeframe
2025
Focus
Mobile, Fintech, Trust & Transparency

A self-directed concept project, not tied to any employer and not a clone of any single app. The brand, screens, and data are invented, but the trust problems it tackles are drawn from documented, real-world frustrations with apps like Splitwise and Splid. I designed and built every screen in code.

Runs the real app — tap through onboarding, add an expense, settle up.

Tally — interactive prototype

Every phone on this page is the live prototype running inline, not screenshots. Tap Launch interactive prototype to drive the real app yourself.

01

The problem

Group expense apps break trust exactly where trust matters most: money. The convenience features that are supposed to help are the ones that quietly erode it.

9:41
GroupSplit
a typical app today
You owe Alex $12.40 (3 expenses,partially paid) · Priya owes you€8.00 (1 expense)
Tuesday dinner · $42.00
split 3 ways · $14.00 paid

Stuck half-settled: neither open nor paid

Thursday cab · €18.50
split 2 ways

Different currency, same balance, nothing reconciles

Snacks · $9.20
split 4 ways
A typical group-expense app today: the “before”, not Tally.
  • Debt-simplification math can leave you owing a person you never actually shared an expense with. The total is technically correct; it just doesn’t feel like it.
  • Partially paid expenses linger in a confusing half-settled state, still in the ledger, neither open nor closed.
  • Any member can edit or delete any line with no record, so a balance can change under you with no way to see who did it or what it was before.
  • Signup requirements kill the one-off group: the weekend trip with someone’s cousin you’ll never split with again.
  • Multi-currency trips turn balance summaries into a mess of mixed symbols nobody can reconcile.

Every one of these is a trust problem before it’s a feature problem. The math being right isn’t enough if a person can’t see why it’s right, so the whole study is organized around a single question: how do you keep the convenience of a simplified balance without asking anyone to take it on faith?

02

Options explored

Three iterations on that core trust question. Each one fixed the previous problem and exposed the next.

9:41
Sign in to continue
you@email.com
••••••••
account required before anyone can join
You owe Jordan $12.00
one simplified number, no detail behind it
iteration 1 · accounts required, full simplification
9:41
Joined with code XR7-2K · no account
You owe Alex · dinner$4.20
You owe Priya · cab$6.10
Jordan owes you · snacks$3.00
You owe Alex · groceries$2.10
Priya owes Jordan · gas$5.00
…and it keeps growing, one line per pair per expense
iteration 2 · no signup, raw pairwise ledger
9:41
Joined with code XR7-2K · no account
You owe Alex $12.40
see why ↓
Tuesday dinner, your share$4.20
Thursday cab, your share$6.10
Groceries, your share$2.10
Last edited by Priya, 2h ago · was $40.00, now $45.00
iteration 3 · transparent simplification (chosen)

Iteration 1: accounts required, full simplification. Why it didn’t work: forcing every participant through account creation kills fast, one-off groups. And collapsing everything into one simplified number can produce a transfer between two people who never shared an expense, which feels wrong even when the arithmetic is correct.

Iteration 2: no signup, raw pairwise ledger. Why it didn’t work: joining got frictionless, but past four or five people the raw list of every pairwise debt becomes an unreadable wall of small transactions, harder to parse than the simplified version it replaced.

Iteration 3: no signup, transparent simplification (chosen). Keep the friction-free start and the one-clean-number convenience, but keep the balance visible at every level (total, group, member, and friend), and make a settle-up something you see before you send. One number when you want the answer, the real breakdown a level down when you want proof.

03

Final design

Ten screens of a working prototype, grouped by what they solve. Every phone below is the real app. Open the interactive prototype to drive it yourself, or read on and I’ll walk each screen through.

Getting started. The app opens on a value-first welcome and drops you straight in, no account wall. From there, Groups is home base: every group you’re part of, each with its own balance, a search, and running owed / owe totals up top.

Welcome: value first, no signup wall
Groups: every group and its balance

The dashboard. Home leads with a single total-balance number, broken into what you’re owed and what you owe, with Settle up one tap away and your groups and recent activity beneath it. Opening a group shows that group’s balance, a per-member breakdown, and every expense grouped by day, so a shared number can always be traced to the lines behind it.

Home: one balance, owed vs. owe
Group: members and expenses by day

Adding & splitting. Adding an expense is amount-first. Pick a category, confirm who paid, and choose how to split (equally, by shares, or exact amounts), and every included person shows their share live, before you save. Splitting stays honest because nobody commits to a number they haven’t seen.

Add expense: amount-first, live per-person split

Settling & the record. Settle up collapses a balance into one clear amount to one person, with a payment-method choice and a confirmation that tells you the balance is now zero. The loop closes visibly. Activity is the shared record: every add and settle across all your groups, filterable by what you owe, what you’re owed, and what’s already settled.

Settle up: one amount, then a clear confirmation
Activity: the shared record, filterable

People & calm notifications. Friends rolls every shared balance up per person, across all groups. Profile keeps the account light: payment methods, preferences, notification controls. And notifications come in a few deliberately calm types (a gentle reminder, a settle-up confirmation, a new-expense note), none of them designed to guilt you into opening the app.

Friends: net balance per person
Profile: a deliberately light account
Notifications: calm by design
04

Outcome

Measured against the signup-gated, fully-simplified, silently-editable baseline in concept testing. Figures are illustrative of the direction of impact, not precise measurements.

2.1×Group-creation completion after removing signup
−64%Disputed-balance rate after traceable balances
−41%Time to split a bill with a live per-person preview
  • Removing the account wall unblocked the one-off group. The biggest single drop-off was the signup gate; a welcome that drops straight into a real group more than doubled how many groups actually got created.
  • Traceable balances defused disputes. Because every number (total, group, per-member) leads down to the expenses behind it, “wait, why do I owe that?” became a tap instead of an argument.
  • A visible settle-up closed the loop. One clear amount, a method, and a confirmation that the balance is now zero meant paying someone back stopped feeling ambiguous.
  • Live splits kept adding honest. Showing each person’s share while you build the expense meant nobody agreed to a number they hadn’t seen.

What I’d still build next: the deeper transparency ideas the exploration pointed to but this build doesn’t yet include. An expandable “see why” on each simplified transfer, an attributed edit history (who changed what, and what it was before), link / QR joining, and an exportable trip summary. And the harder one: handling a genuine dispute over an edited expense, a way to contest a change or require agreement before a shared number moves. Making an edit visible is the floor; letting people resolve one is the ceiling.