Why I tore out the backend of my friendship app — and why it works better without it.
My idea was built. The MVP was live. But I wasn't using my own app.
Let me back up. I wanted to keep in better touch with my friends, and I wanted to do it with the help of a tool I built. I had the spark of an idea to use the underlying idea of Client Relationship Manager often seen in sales organizations and adapt it to personal relationships. I'd strip away the pipelines and reporting and keep the core functionality. Who are you keeping in touch with? When's the last time you talked to that person?
Having spent a lot of time learning about web development, I started with what I knew. This led me to build a web app using Ruby on Rails. It was a pretty straightforward CRUD app. The app has users, those users have friends, those friends have information. It got deployed on a Railway server with a public facing link and it just kind of worked. It was all hand built. I could now keep track of who I wanted to talk to and when I talked to them last. And this is when I realized: I wasn't using it. It wasn't optimized for mobile. At all. It worked great if I was on my computer but was otherwise not very useful. Not very tool like. This showed me the main thing the app needed. It needed to be an app. Not a website.
With a little Tailwind CSS and some troubleshooting, I now had a mobile version of the app. It rendered nicely, everything worked but it was clearly a webpage. It most certainly didn't feel at all like an app. So I did some research on the best way to serve this as an app. Turns out, the Rails community had an answer: Hotwire Native. It's a framework to help me as a dev stay in one language (mostly), but still deliver an app.
So I started down the hybrid path. I didn't need to touch the server side, just start adding things to a Swift frontend that would get shipped to phones everywhere. At least, that's what I thought would happen. The framework delivered on getting what had previously been on my mobile browser into an app but it certainly didn't feel any better to use. The individual pages would often reload at awkward times. The scroll moved in strange ways. Offline didn't exist. Once I implemented notifications using a worker, the costs started rising for the infrastructure.
These technical issues were certainly solvable but the best fix was the simplest, less infrastructure. Was I going to use this on my computer? Did I need activity to be synced across multiple devices? No.
Good Company didn't need any of that. The entire experience revolved around the phone. Calling, texting people. Interacting with the app. So I abandoned the backend. No more continuous costs and upkeep. The enjoyment of a native experience. Perfect scroll, no reload, all there.
After a lot of effort and multiple versions, it worked. The app on the App Store works great. The reductions delivered everything the backend was getting in the way of. The native feel, the integration, and lowered costs. Most of all, it enabled me to build deeper connections with my friends and family.