Priotecs
Joined 9 months ago
Joined 9 months ago
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.
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.
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
In short: native apps, local-first architecture, with sync as an optional layer rather than a requirement.
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.
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.
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.