Back when I started programming 10 years ago, I traumatized myself by storing all the data for my financial app locally.
Yes, you read that right — I had an app in production, and all of its data lived on the device.It was my first app, called "Daily Budget", and I uploaded it to Google Play just in case someone else was facing the same money-tracking struggles I was.
To my amazement, it got around 10,000 downloads. But what those poor souls didn’t know is that all of their data was stored only on their phone.
What followed were man-made horrors beyond comprehension.
Encouraged by this “success,” I kept adding more features and expanding the app. As my knowledge grew — especially around databases and best practices — so did my desire to fix things. But since everything was local, I had to migrate the data manually on the device. This was back in the days when you had to write raw SQLite queries yourself.
I did around 14 migrations before the app started to collapse under its own weight.
Keeping track of the users’ data state became impossible. I couldn’t inspect the data — I just had to pray the next migration didn’t break everything.
I walked away from that app with a lot of lessons learned (and a fair number of angry users 😅).
Biggest lesson:
👉 Don’t make early architectural decisions that are written in stone.
👉 If you must make a suboptimal choice, make sure it’s reversible later.
Otherwise… you’re going to have a bad time.
Member discussion: