DEV Community

Good game
Good game

Posted on

Money Is the Only Invariant: Modeling Personal Finance as Hours of Your Life

I spent a while building a personal-finance app around one idea: a price isn't really dollars, it's hours of your life. A $1,200 phone is "3 weeks of work." The dollars are an abstraction; the time is not.

The interesting part wasn't the UI — it was figuring out what the source of truth should be.

## The naive model

My first version stored everything in hours. Save $50 → store "2.5 hours saved." Clean and simple — until the user's salary changes. Suddenly all their history is wrong: those 2.5 hours were
computed against an old hourly rate.

Do you freeze the old value? Re-compute it? Both feel arbitrary, and both create migration pain every time the income profile changes.

## Flipping it: money as the invariant

The fix was to invert the model: money is the only thing stored as truth. Hours and days are never persisted — they're projections of a money amount through your current income
profile.

hoursForMoney(money, profile) = money / hourlyIncome(profile)
lifeDaysForMoney(money, profile) = money / netMonthly(profile) * 30

Your salary doubles? Your past savings now represent half as many hours — automatically. The framing shifts from "how many hours this was worth" to "your savings equal X hours of your life
right now."

## Why this paid off

This killed a whole class of edge cases:

  • Editing or deleting a record just changes the money total. Every derived view — goals, achievements, streaks — recomputes reactively, because none of them store hours.
  • One conversion function, one source of truth. No "4 copies of the hourly-rate formula slowly drifting apart" (which is exactly the bug I started with).
  • No migrations when the profile changes — there's nothing derived to migrate.

The whole system became easier to reason about once I accepted that time is a view, not data.

## The open question

The behavioral one I still can't answer: does seeing "3 weeks of your life" actually change what people buy, or is it a novelty that wears off after a month? I have anecdotes, not data —
curious if anyone here has tried framing spending this way.

(The idea ships as a free Android app — Price of Time on Google Play — but the model above is the part I think is worth discussing.)

Top comments (0)