WHY I STOPPED MOCKING APIS AND STARTED SHIPPING TO PROD SOONER
The seductive trap of local development — and what building Finesse taught me about the real cost of deferred production testing.
TAGLINE
SHIPPING PRODUCTS. WITH TASTE.
BUILDING
| ID | PROJECT | CONTEXT | STATUS |
|---|---|---|---|
| L_001 |
FINESSE |
SOLO
FOUNDER · PLAY STORE
AI personal finance app for young Indian professionals, with SMS parsing, automatic categorisation, and Gemini-powered monthly coaching. |
ACTIVE |
| L_002 |
SPLITS |
GAME
· ANDROID · 2.5D
A fast-reflex 2.5D Android game focused on short-session play, clean visual feedback, and mobile-first movement. |
IN BUILD |
| L_003 |
THERAPY COUNCIL |
CO-FOUNDER
· DEV LEAD
Online LMS for psychology-focused courses, covering architecture, course pipeline, and the user-facing learning experience. |
ACTIVE |
Two years. Many stacks. One rule — ship working software.
The seductive trap of local development — and what building Finesse taught me about the real cost of deferred production testing.
Awareness isn't the problem. Timing is. How trigger-based distribution changes the acquisition equation entirely.
There's a comfortable lie every developer tells themselves early in a project: "I'll sort out production once the feature is working locally." I told it to myself for weeks while building Finesse.
Local development is warm. Everything works. Environment variables load cleanly, the API responds in
40ms, and the mock SMS parser catches every transaction perfectly. Then you push to production and a
React Native APK quietly swallows your .env file and serves undefined to the Supabase
client for three days before you notice.
Production failures found late aren't just bugs. They're architectural rethinks wearing bug costumes. When I finally shipped Finesse to closed testing on the Play Store, I discovered that the SMS BroadcastReceiver service behaved differently across Android OEMs. A Samsung device running One UI silently killed background services within 90 seconds of the app losing focus. Zero crashes. Zero errors. Just no data.
That's not a bug you catch locally. That's a production-only system behaviour - and finding it late meant rearchitecting the foreground service notification strategy, resubmitting the APK, waiting out Google's review cycle, and re-recruiting testers. Probably two weeks of drag for something a one-week earlier production push would have surfaced.
The mental shift that helped most was treating the production environment as a parallel development lane rather than a final destination. Feature flag the incomplete pieces. Deploy to staging daily. Accept that you will see failures earlier - because earlier failures are dramatically cheaper than later ones.
For Finesse, this meant setting up Railway for the Node.js backend from day one, even when it was just a
hello world endpoint. It meant pointing the app at real Supabase edge functions from the
first week, even before the SMS parser was finished. Every week of production exposure before the
feature was done saved a compounded week of debugging after.
The lesson isn't new. But the confidence to actually do it - to deliberately ship incomplete code to a real environment - that took building something from scratch, breaking it, and rebuilding it in public.
If you ask a 24-year-old in Delhi whether they should track their spending, they'll say yes. If you ask them whether they do, they'll pause. That pause is the entire problem. It is not an awareness gap. It is an urgency gap.
Most fintech marketing assumes the problem is knowledge. Build a beautiful budgeting UI, explain the 50/30/20 rule, show a chart of someone else's savings trajectory, and the user will be motivated to change. They won't. Not because the information is wrong, but because information without a trigger is just content - and content without urgency sits unopened.
Young urban Indians have highly predictable financial trigger moments: the first salary credit, moving to a new city for a job, the first time rent takes more than 40% of income, getting married, taking a first loan. These are moments of genuine financial anxiety - and anxiety is the only reliable motivator for financial behaviour change.
The implication for distribution is straightforward but underutilised. A fintech app that shows up in someone's feed as a generic ad gets ignored. The same app that appears in a thread titled "I just got my first Bangalore salary and have no idea what to do with it" - that gets installed. Not because the app is different, but because the moment is different.
Concretely, this looks like monitoring Reddit threads on r/india and r/personalfinanceindia for life-event signals. It looks like partnering with HR onboarding flows at companies hiring freshers at scale. It looks like writing content that ranks for "what to do with first salary India" rather than "best budgeting app India" - because the first query is triggered by a life event, the second is abstract comparison-shopping.
The hardest part of this strategy isn't identifying the triggers. It's accepting that you are not building a product for the 10% of people already tracking their finances. You are building for the 90% who aren't - and you have to meet them at the exact moment they realise they should be. Miss that window and they do nothing. Hit it and you get a user who is genuinely motivated to change. That's the only user worth having.
Finesse was built for that second user. Whether it reaches them at the right moment is, honestly, still a work in progress.