Making an App in 10 Days
I took an app from nothing but an idea to being published in the Google Play Store in a little under two weeks. Even though I worked every day on my app, it wasn’t all day every day or particularly hard work. But I had a few surprises along the way, and I’d like to share those.
Going from a React PWA to React Native is not a Find & Replace job
I built my app using React because I want more experience with React. I also had heard of React Native and imagined turning my progressive web app into a native app would be a trivial task if I used React. After I had my PWA working the way I wanted, I was ready to do my anticipated five minutes of work to make it a native app and quickly realized it wasn’t quite that easy. Basically I’d have to reimplement all my HTML elements as their React Native analogs (
<View>s, etc) and redo their styling. I started down that road but changed courses pretty fast when I realized it wasn’t as trivial as Find & Replace. Instead, I ended up using Cordova, an open source Apache project that can turn your web page into a native app. I haven’t noticed any poor user experience with it, but I’ll admit the app does feel like I’m looking at a webpage in a chromeless browser. I expect React Native would feel a little tighter.
Publishing to the Play Store requires registering as a Google Developer, which costs $25
I just assumed I’d be able to push to the Play Store for free, because I’ve heard Android touted as this sort of free open source software utopia. Maybe I could have published for free to the F-Droid marketplace (basically Play Store for weird nerds) but that wasn’t what I had in mind when I decided I wanted to publish an app. Registering my Google Developer account was relatively simple, but I didn’t anticipate the $25 fee. Not a huge deal but totally unexpected.
Test-Driven Development makes development way more fun and satisfying
I’ve already learned this lesson, but using TDD made me trust my app a lot more and get better visibility into edge cases. Personally when writing, sometimes I find myself flailing at problems or just staring into the abyss, but using TDD for this project helped me to stay on track and approach problems more methodically. I read something recently (I wish I had a link to the article) that read like some engineer howling about how integration tests are dramatically more useful than unit tests, but my experience using unit tests to drive my development was a great one.
Make something crappy first, fix it later
This is another repeated lesson, but I’m still learning it. I had to make an application icon, so I kept thinking “I should reach out to a designer or something and pay them for like an hour to execute this very basic idea I’m imagining could be executed in well under an hour.” I kept thinking this and then realized I didn’t know anyone who’d probably take me up on that offer, and I didn’t feel like sorting through freelance portfolios to find someone for something that (to me) seems like a pretty simple job.
So I took a public domain image and tweaked it a little bit to look the way I imagined for a logo. Unless I hire a designer or one comes out of the woodwork to give me a new icon for free, I’m probably going to use that icon for... forever. My icon could be centered a little better and one of the shapes I used looks a little bit weird/stretched if you look at it too closely, but it’s fine. It looks dramatically better than a placeholder.
Obviously there’s a spectrum of crappiness, and it’s up to you to decide how crappy is too crappy to ship. “It’s not properly centered, and the rounded ends on the hash marks are slightly askew” even in my own neurotic opinion is fine to ship. I’m pretty happy with what I came up with, and it took me well under an hour. I suspect a real designer could have made something better in even less time, but who cares? Not me. And now I get to look at it and say “Oh yeah I did that.”
Google asks you for marketing materials for your app; even just screenshots and a description are fine
I totally didn’t expect to have to make little banner images in order to publish my app on the Google Play Store, but they needed it. I made them by taking some screenshots and messing with them in an editor. It was easy, but it never occurred to me I’d have to do that. Calling them “marketing materials” seems a little lofty for what they are, but I don’t have a better term. At some point I should probably take another crack at those and make them look more professional.
The tools around app building (at least for Android) feel bloated and klugy
Maybe this was just my own experience, but the app ecosystem around app building for Android felt weird to me. I had an issue with needing to accept licenses through my command line by following some instructions from an internet rando who was apparently having the same issue. I don’t know if this was a problem with my own setup (which seems pretty normal, I’m running Big Sur without any unusual tooling installed). The Android Studio app also took a while to load and seemed heavy.
Review time from the Play Store can be unpredictable
The Google Play store won’t publish your app until they review it for inappropriate content, security issues, etc. A colleague of mine said he was two weeks into his review and had been flagged for something GPS-related that sounded pretty benign to me, so I was a little worried my process would take an inordinate amount of time. Thankfully I had no problems, although I thought it was weird they didn’t notify me when my review was completed and my app had been published. I think it just took me a day, but I didn’t get a notification so I may never know exactly how long it took.
So, what’s next for my app now that it’s published? Building a marketing site for it, getting the app published in Apple’s App Store, and then taking the time to switch it over to React Native. When searching for my app by name, it doesn’t show up until way down on the list of apps in the Play Store. I imagine if I were to set up a marketing site and send more traffic to the Play Store, it’d float up to the top, or at least nearer to it. For now, it’s way down there. But it’s published, and that was the goal.
I should probably look into making it useful at some point also.