Hi! š
Itās been a little while since I last wrote something on the olā blog. Iāve been hard at work on a new project over the past few weeks ā the subject of this article, as it happens ā and much to my everlasting chagrin, thereās only so much time in a day. So, the blog had to be put on hold for a few weeks. The good news is that Iāve now got lots to catch up on here!
So, what have I been up to?
Well, my indie journey took a bit of a turn right around the start of April, when I got a pretty silly idea stuck in my head. My wife and I both work from home now, thanks to COVID-19, and weāre finding that itās pretty easy to step on each otherās toes, so to speak. If Iām taking a quick break from work to make coffee, for example, Iāll often accidentally make a bunch of noise, or try to strike up a conversation, forgetting that she might be in the middle of a phone call, or just really focused on a difficult task. Of course, with my brain being broken in the particular way that it is, I thought: what if there was an app for that?!
Now, before I go any further, I want to make something abundantly clear. The fact that we even have this āproblemā to begin with is a reflection of how extremely fortunate we both are to a) not be living alone, b) have jobs that we can do from home, and c) have jobs that are at once relatively secure and utterly irrelevant, in the grand scheme of things, in this moment. This is a dumb problem, and honestly, I donāt really want to frame this app Iām about to describe as anything other than a fun, trivial little side project.
Nonetheless, a silly problem deserves a silly app to solve it, and so I started thinking about whether this was something I could feasibly build. Of course, as this whole blog has made clear, Iāve already got a significant indie project on the go, and conventional wisdom would suggest that you probably donāt want to make a habit of abandoning ideas-in-progress for whatever shiny new idea pops into your head.
But, Iāll be honest: freelancing work, writing and real life have been taking up a lot of my time, and I havenāt been making progress on the indie app work as quickly as I had hoped. I still think Iāll get the big app done at some point this year, but the idea of shifting gears for a few weeks in order to get a much smaller finished product out the door felt pretty appealing. I havenāt actually released an app independently since 2013, and I figure I can probably learn a lot from going through that process and seeing if I can drum up a bit of interest online. If nothing else, it gives me something recent I can point to and say ālook, Iām capable of building cool things!ā
So, Iām building this app. Iām not sure the idea itself has any real legs, but I figure the cost of building it is low enough that itāll be worth doing, regardless of any response it does (or doesnāt) get.
Okayā¦what is it, exactly?
The app is called Oh Bother. Why? Because itās all about communicating whether or not you want to be bothered, and because I like Winnie the Pooh.
Itās a rather simple app that helps you and your housemates avoid poorly-timed interruptions when youāre working from home together. You can set your status to either botherable or unbotherable ā neither of which are real words. You can put your status on a timer, such that it flips automatically when time is up, and you can get notified when time is up, if you wish. You can also provide context for your status by indicating that youāre on the phone, or taking a nap, or going outside, or what have you.
Meanwhile, youāll always have up-to-date info on your housematesā statuses, synced automatically through iCloud. You can also set up notifications to let you know when a housemateās status changes, which might come in handy if your housemate is busy, but youāre really eager to talk to them about the hilarious tweet you just wrote.
The app will be free, with an option to tip inside the app, and perhaps get a few fun cosmetic options as a thank-you hug. I havenāt quite sorted out that last part yet ā thatās one of the things Iāve still got left to do before launch.
My goals in building this thing
My initial commit was on April 2nd, so Iāve been working on this on and off for close to a month. I can see the finish line now, but the process has been a pretty tricky tug-of-war between three goals that are quite at odds with each other: shipping quickly, shipping something that feels complete and polished, and learning some stuff along the way.
Ship quickly
On April 10th, I tweeted about this app for the first time , and said I was hoping to launch it āin the next week or two.ā Itās now April 28th, and Iāve still got work to do, soā¦oops.
Despite this very unsurprisingly dragging on a bit longer than I had initially hoped, speed has been a priority throughout. This is intended to be a small side project, and I want to make sure the cost-benefit of building it isnāt skewed too far towards ācost.ā To make sure of this, Iām building it largely with tools and frameworks Iām super familiar with ā this app is 100% Swift & UIKit, with one small third-party library, Cartography, that Iāve written about before. Iām also leaning heavily on my own UI library, which Iāve built up over time, and that sits on top of UIKit and implements a bunch of reusable controls, custom transitions, etc. that match my aesthetic and coding style. In other words, Iām reusing everything I can!
Polish
Seeing as this is a small project Iām releasing for free, the biggest practical benefit I can hope for from a career/indie cred perspective is for this app to showcase some of what Iām good at. And in general, what Iām good at (according to me) is paying attention to detail and building things that are polished and thoughtfully designed.
Hereās the problem: polish takes time ā sometimes, absurd amounts of time ā and because itās what I care most about, I am extremely susceptible to falling down nearly endless rabbit holes of tweaking and obsessing over tiny design details that regular users likely could not care less about.
So, building this app has definitely been an exercise in trying to find some balance here. There are lots of fun details in there that Iām proud of, but Iāve taken plenty of shortcuts that Iād love to spend more time on too.
Learn
Regardless of any āsuccess metricsā an app release does or doesnāt hit, thereās always some value in building something if you can learn and improve as a developer along the way. Of course, learning takes time, so there was a balance to be struck here too. I would have loved to build a small app like this using SwiftUI, for example ā and who knows, maybe thatās a project for another day ā but I know that would have taken me a lot longer, and likely resulted in a less polished end-product.
So, I largely stuck with the tools I knew, with one big exception: Iāve never built an app using CloudKit before. Building this with Firebase likely would have taken me less time, but CloudKit is an important framework that represented a big gap in my knowledge, and this seemed like an easy, constrained use case to get started on.
Adding robust CloudKit syncing and sharing was definitely the hardest part of building this app, but I think Iām out of the weeds now, and have a good grasp on a framework I knew very little about just a few weeks ago. I may write a more technical article about my experiences with CloudKit soon, but in the meantime, I will simply say this: Gui Ramboās CloudKit 101 was an absolutely massive help in getting my implementation off the ground. If youāre at all curious about learning CloudKit, Iād highly recommend starting there.
Cool, when can I get the app?
Update from the future: Itās available now! Check it out and let me know what you think š