Truity · case study

A business experiment was priced like one: a fixed-price, twelve-week MVP let an INC 5000 company test a new revenue model without betting the roadmap.

An INC 5000 personality-testing company hit a ceiling: customers bought once. We delivered a subscription mobile app to lift lifetime value, then grew it into multi-year development and a full platform migration.

MVP delivery
<12 weeks
fixed-price MVP
A working subscription app shipped fast enough and cheap enough that testing a new revenue model never threatened the core business.
Timeline and budget shape as recorded at the time, pre-dating the instrumented proof loop; the initial build ran on Firebase managed via Retool.
where the experiment led
Multi-year
ongoing work + a full-stack migration
Once the model was proven, the MVP became the foundation: multi-year development and a backend migration that modernized the whole platform, not just the experiment.

Truity sells personality tests that millions of people have taken; the growth obstacle was customers purchasing once. We delivered a subscription mobile app, with daily mood tracking, personality surveys, progressively unlocked insights, in under 12 weeks on a fixed price, then carried it through years of ongoing development, including a full backend migration.

The Situation

Truity, a California company that made the INC 5000 fastest-growing list three years running, had a large website funnel and customers who nearly all purchased once. A mobile app was the play to convert that funnel into a subscription product and raise customer LTV. The constraints were the real brief: fast, at bounded cost, and without distracting the core business that was funding the bet.

What We Did

Fixed-price MVP first: a working React Native cross-platform app delivered in under 12 weeks within a deliberately small fixed budget. What that version deliberately didn’t have: a backend the team would enjoy operating. We ran it on Firebase managed through Retool: workable, not pleasant, and chosen because operability wasn’t the question the MVP existed to answer. Then the engagement moved to ongoing development under a monthly budget cap, working closely with the CEO and the in-house CTO and product designer who led product direction. When operability did become the question, we migrated the backend from Firebase + Retool to Directus on Node and PostgreSQL, giving the team a structured, responsive content-management interface. We kept iterating: push notifications, convenient authentication, a GenAI chatbot integration, and codebase updates as the platform aged. QA was part of the team throughout, so sustained change didn’t erode quality.

What Moved

The MVP shipped in under 12 weeks on its fixed budget: the side bet validated at strictly bounded cost, which was the metric the engagement was designed around. The app is live on Google Play and has been iterated continuously since; that is a fact of record, not a performance metric. The Directus migration gave Truity’s team a content interface they could actually run the product with, a qualitative outcome, as the team reported it. What we don’t publish: subscription-revenue figures. That instrumentation belongs to the client, and we don’t claim numbers we didn’t measure.

Where It Went

The engagement grew from a small fixed-price MVP to multi-year ongoing development with the same team. That progression, from bounded experiment to sustained product work, is the pattern we now design engagements around: price the experiment like an experiment, and only scale the spend once the business question has an answer.

your system next

If This Sounds Like Your Codebase, start with a call.

A short discovery call scopes the next step, for a system like this one, usually the fixed-price audit: a diagnosis of the code you actually have, from $5K, report in hand before you commit to anything further.

newsletter

Notes on Building High-Quality Software

A short founder’s note and a digest of what we’ve published, sent only when there’s something worth the inbox.

No sequence · Unsubscribe in one click