Development improvements in almost a decade on Android
I Love You Buzz⌗
In 2014 I released an app on the Play Store: Link. It’s a little app to send “I love you buzzes” to your partner, basically three vibrations to represent I Love You.
Yep I’m a romantic.
It was just a little passion project but ended up with 5k downloads and a pretty healthy 5* rating on the Play Store. Eventually life got in the way and I let it die. I didn’t keep up with the platform, ignored the emails from Google to agree to new terms and upload a privacy policy. Eventually it got dropped from the store.
This week I’m re-writing it from scratch and launching it again. As I haven’t done much mobile development since 2014 it’s given me a good opportunity to reflect on the how much has improved in the last 9 years.
Design⌗
I’m not an artist 🎨. I like to think I have good taste and can appreciate a good design but creating it is impossible. I’ve always gone with the philosophy of:
- Pick a nice palette online
- Keep it simple, mostly text
- Use as many native platform components as possible
For the old version of the app I outsourced the icon to Fiver and got a friend to help with some of the assets. It was time consuming, cost money and looked like 💩.
I started this version of the app in a similar way, picked a palette from the internet and went to town.
Here is the design for one of the screens in my app. It’s not very good and I don’t know how to fix it 🤮
Enter generative AI. Midjourney and DallE⌗
I asked Midjourney for “a logo for an app to send I love you messages like heart shaped candies with this color palette …”
I liked the last one so I used a color picker to grab some nicer colors from it and re-built my app around that. I really wanted two hearts for the pairing screen though, something to represent connecting two people together. Midjourney is great at generating brand new creative images but I can’t get it to “remix” images in any way that works.
Instead I turned to DallE which allows you to erase part of an image and use a prompt to complete the image. I used mspaint.exe to throw the images together overlapping the way I wanted, erased the center and asked DallE to complete the image.
Pulling it all together the end result looks pretty good, here is the same screen as earlier.
It would have been impossible for me to do this on my own 9 years ago and it only took a few hours.
Devloop⌗
When coding we work in feedback loops where you make a change, wait for the computer to think 🤔 and then evaluate the result. The faster the feedback loop the better. So seeing the red underlines within a second of making a typo is good. Waiting minutes for an app to deploy to a device is bad!
It’s this deployment feedback loop that is so much better now.
When doing UI work, nothing beats seeing your changes running in the app. Nudging a margin or tweaking a color is like magic now, it’s basically instant. Back when I wrote the first version of the app every little tweak took minutes to test.
React Native⌗
That brings us to React Native. It seems to get a bit of a bad rap lately and this is the first time I’ve used it but I’m so impressed. Maybe this is just me personally but I feel so much more productive in React.
It could be that I’m a better React developer than I ever was a native Android developer 😂 but stuff that took me days in 2014 takes me hours now. It really bites on those tiny screens that you don’t think about for a little app like this. Just random CRUD stuff that you want to get out of the way but end up spending days.
- Add a new pair
- List of pairs
- Rename a pair
- Delete a pair
- Privacy Policy
I remember building trees of Android and implementing these custom recycling list views with classes to hold references to the views and all this binding logic. this sort of thing. Now I just do my layout like a browser. It’s heaven.
Publishing to the Play Store⌗
Reviews used to take more than a week. Now they take mere hours. 🤯⌚Nothing more to say!
Deployment⌗
9 Years ago I was using an EC2 box for the backend which meant configuring SSH, a web server, certificates all that jazz. I feel like the infrastructure as a service providers are so much simpler now especially if you look around!
I deployed the backend using https://fly.io/ and it was so easy.
They have a command flyctl launch
which just inspects your code and works out how to deploy it. I had a node app with a Dockerfile and the wizard just launched it within a minute.
Even CI/CD is easy and that was a bridge too far for a hobby project 9 years ago. A simple template GitHub action and away you go.
For me though the most impressive part of the whole backend story was how easy it was to set up SSL. The process 9 years ago looked like:
- Buy a certificate from a third party, giving them tons of PII
- Wait hours for it to be delivered
- Download the certificate including extra intermediary files if you wanted to work in most browsers
- Learn how to configure your web server reading pages of arcane documentation
Honestly it took me days.
Now it’s a 5 minute job. Here is how you configure an SSL certificate on fly.io
What’s harder⌗
It’s not all sunshine and rainbows 🌈.
The complexity for all of this stuff has gone up exponentially even if a lot of it is hidden away under mountains of abstractions.
Configuring Google Cloud Messaging was a tick box 9 years ago. Now you need to use Firebase, set up service accounts and link everything together.
Languages and Frameworks. It used to be just Java. But now I have a bit of Javascript, Typescript, Kotlin, Java, SCSS, Node, React and dozens of dependencies. It’s **a lot ** of things you need to know and they all come with their own toolchains and ecosystems.
I haven’t even touched the iOS side of React Native yet but I can see some Objective C and Ruby Gems in my project🤯
Even the number of questions and boxes to tick on the Play Store has gone up dramatically. I guess every year they add a few more options and it adds up 😊
Overall⌗
Overall I think I’m about 10x more productive than I was 9 years ago. Half of that is experience but the other half I would attribute to the tools getting so much better.
I can’t wait to see what’s next. Looking at Github Co-Pilot 👀.
If you’re interested in checking out this app, it’s on the Play Store. Love to get some feedback and hoping to publish an IOS version for valentines day.