Thank you — and congrats to you as well, that’s an impressive run.
I completely agree: in a small, niche business, relationships and support matter far more than scale. Replying quickly, taking users seriously, and actually helping them goes a long way over many years. It’s probably one of the few real advantages solo developers have over larger teams.
13 years in a niche is no small achievement. Best of luck to you too, and thanks for sharing your experience — it’s always encouraging to hear similar stories.
A local-first, offline-capable model turned out to be one of the best long-term decisions. It makes the app faster, more reliable, and usable in situations where connectivity is poor or nonexistent. Sync then becomes an enhancement, not a dependency.
It also changes how you design software: you optimize for resilience and data ownership instead of assuming a server is always there. I’m convinced more apps would benefit from this approach, especially for tools people rely on daily.
And people think you need to go to the jungle of Honduras to lose connectivity. It can happen literally anywhere, in a parking garage, next to trees in a park, in the desert. Intermittent in a shopping mall, the list goes on. Also, I like apps being resilient.
Good question — yes, there were many major changes, both technically and visually.
On the technical side, the biggest shifts were things like Objective-C → Swift, ARC, Auto Layout, size classes, Dark Mode, and more recently SwiftUI. I generally didn’t jump on everything immediately. My rule of thumb was: adopt new frameworks once they’re clearly stable and proven in real apps. Being too early often meant rewrites; being too late meant technical debt. A slightly conservative approach worked best for me.
Visually, Apple’s HIG evolved a lot: skeuomorphism → flat design → more layered, content-first UIs. I followed those changes gradually. Smaller visual updates happened continuously, but larger redesigns only when there was a real user benefit or a technical reason. Version 10 is one of those bigger moments where design and architecture changes aligned.
In hindsight, following a bit late rather than very early turned out to be the better tradeoff. Users value stability and consistency more than being on the absolute cutting edge, especially for a long-term app they rely on daily.
That’s a fair point. Automated bank imports sound essential at first, especially with many accounts and cards.
In practice, though, I found them less useful for budgeting than expected. A bank statement tells you how much was spent and where, but not what the expense actually was. “$100 at a supermarket” could be groceries, pet food, a lawn mower, or business expenses — that context is what makes budgeting meaningful, and it usually has to be added manually anyway.
At that point, entering the expense directly with the right category often turned out to be simpler and more accurate for me. Automated access would still be nice for reconciliation, but it’s not the silver bullet it’s often perceived to be
Good questions.
- The Android version came about two years after the iOS app. iOS was always my primary focus and the main success driver.
- Both apps are 100% native. No cross-platform framework and no web views. It may sound more complex, but for me it was actually simpler and more controllable that way.
- There is very little shared code between platforms. Concepts and ideas are shared, but the implementations are platform-specific.
- The core app functionality is almost entirely on-device. MoneyControl works locally by design. There is an optional WebApp that adds device sync and a browser-based interface, but the server side is essentially limited to synchronization.
In short: native apps, local-first architecture, with sync as an optional layer rather than a requirement.
Thanks! That’s funny, because while it’s technically a GmbH, it’s really just me — a one-person company.
I originally set it up mainly for risk separation. Before the apps, I was developing backup software, and having a legal structure felt like the responsible thing to do. It also looked more professional at the time. Whether I’d do it again today, I’m honestly not sure.
That said, keeping personal and business finances clearly separated has definitely been a good decision in the long run.
"Whether I’d do it again today, I’m honestly not sure."
What are the main downsides
you encountered? Apart from the initial investment I can imagine the administrative overhead, but I'd love to hear your insights.
That’s a fair point. Automated bank imports sound essential at first, especially with many accounts and cards.
In practice, though, I found them less useful for budgeting than expected. A bank statement tells you how much was spent and where, but not what the expense actually was. “$100 at a supermarket” could be groceries, pet food, a lawn mower, or business expenses — that context is what makes budgeting meaningful, and it usually has to be added manually anyway.
At that point, entering the expense directly with the right category often turned out to be simpler and more accurate for me. Automated access would still be nice for reconciliation, but it’s not the silver bullet it’s often perceived to be.
This is something I kept bumping into when building my own tracker (Simple Wallet - https://simplewallet.app).
You're right that "$100 at a supermarket" is useless but I found even knowing "I spent $400 on groceries" wasn't that useful either. I kept asking myself "okay, but on what?"
So I leaned hard into making categories the starting point instead of the endpoint. Groceries breaks down into what I'm actually buying. Turns out I was spending way more on coffee than I realized.
Did you ever consider going deeper into categories, or do you find users just want the high level view? I've been torn on how much detail is actually helpful vs. overwhelming.
That’s fair — and I agree if enough context exists.
The key limitation is that a raw bank transaction usually contains very little semantic information: amount, merchant name, date. From that alone, an LLM can only guess based on patterns or prior behavior, not actually know what the expense was for.
“$100 at a supermarket” could be groceries, pet food, a household item, or something work-related. An LLM can infer probabilities once it has enough historical data and feedback, but that still means the user has to correct or confirm things at some point.
So I see LLMs as very helpful for assisting categorization (suggestions, defaults, learning over time), but they can’t fully replace intent unless the underlying data becomes richer than what bank statements provide today.
Is there any chance it could become richer? What governs the content of credit card and bank statements? Is there anyone pushing for them to be more useful?
I think (granted, this is from a quick bit of research so I could be wildly wrong) - the message you see in your credit card app with a transaction is usually mainly the merchant name and location which is part of ISO 8583, so it may be a bit hard to extend it to include an arbitrary message in a way that works without merchants having to replace card reader/POS systems en-masse.