This is a post about the process of developing and posting an app on the iOS App Store for the first time. It's is a long one, sorry. There will be another post looking at toolsets later on.
I write code pretty frequently. I've always been interested in technology and the best way to learn about it is to tinker. I write small programs to automate my own tasks, I look at the way that different languages work and I write snippets of code just to try out new things. Of course being an ICT teacher I also teach my students how to get into programming themselves as part of their courses as well as running a code club for some self-directed learning.
Over time I naturally build up a library of ideas for things that either don't exist, or do exist but don't serve my needs, or for things that weren't discoverable enough for me to find them. I put all of this into my "some day when I have more time" pile and mostly ignore them. Like many people I start a lot of things but don't get around to finishing them. For learning about development on iOS, I put this down to a couple of factors:
- The rapid development of Swift (since I looked at Objective C some time back and really didn't enjoy using it)
- The big motivator of WWDC happening in the middle of the year when I'm at my busiest with work
This summer, with Swift getting a lot more stable with 1.2 and 2.0 during the previous year, I figured I'd dust off one of my project ideas and actually develop something. There were a lot of pain points during the process, so I decided I'd write something about them since I had a hard time finding good sources of information while I was going through the process.
To finish off the background stuff, I thought I'd list some of the influences I've had over the past few years which have helped a lot with answering some of my questions as they arose and also were a motivator for me getting to it in the first place.
- In 2013 Marco Arment gave a talk at XOXO announcing his podcast player Overcast. He went into some detail about the decisions leading up to its development but also about the general uncertainty of the whole process. It's well worth your attention.
Edit: Marco gave another really good talk at NSConference in 2015 on marketing which I wish I'd seen before I started writing this app.
- Marco Arment and David Smith recently started a podcast called Under the Radar, which looks at their experiences with independent development. They cover a range of topics, but the recent episode on advertising was really informative.
- I'm working my way through the back catalog of the Release Notes podcast, which looks at "everything but the code". They've done some good stuff on choosing what to develop, keeping in touch with customers and so on.
- The Accidental Tech Podcast with Marco Arment, Casey Liss and John Siracusa has had some really good episodes, in particular the discussions (which I couldn't find the episodes for) on the use of settings in Overcast. There's some similar stuff which I think was in Marco's old show in 5by5 Build and Analyze on one of his previous apps The Magazine.
- On a non-podcasty note, I also get a lot of great information from Show Hacker News, where people show off their projects. The value is less from the products themselves as from the comment threads where there is a lot of useful discussion about design, gaining customers, pricing etc.
Development is easy. We know (or quickly learn) the constraints of the development environment and platform, and the rest is about research and experimentation. Not having done a lot with UIKit before, learning the API was the most challenging part of this. I wish I'd tracked just how much time I spent on StackOverflow vs XCode.
The biggest development hurdle was process-based. Back when I was doing Computer Science at university, we were taught all sorts of relatively heavy-weight design processes like UML and the Rational toolset. In the Computer Science curriculum in Western Australia there has always been a significant focus on the Systems Development Life Cycle, with less of an emphasis on prototyping, Agile etc. All of this stuff feels a lot too cumbersome for a single person developing something relatively simple. As such I didn't have a lot of experience with what would work for me and it slowed me down a fair bit. I ended up doing a lot of mind mapping to sort out classes and responsibilities, and used a simple todo list app to keep track of what my priorities were.
Artwork was the other big headache, but I'll put some stuff into my tools post about this. There was a good episode of Under the Radar about this, the advice boiling down to "keep it simple". There are some good Creative Commons resources out there for generic stuff as well under Attribution licensing which is super helpful. I'm not against paying for stuff, but for a small side project which I'm unsure will make any money at all it just isn't worth it.
The TestFlight app is actually pretty good for testing. There is some weirdness when it comes to being able to tell whether someone has actually installed a build, and the way which beta invites are sent out is a bit clunky, but overall the experience is pretty good.
When I was first looking at the newer features after WWDC 2015 it was a nightmare since I didn't want to install the iOS 9 beta on my (only) phone, and so was restricted to the simulator for testing. This year I could easily put builds onto my phone and caught a number of bugs just from noodling around with a build whilst waiting for something else.
There's some pervasive advice out there of "just ship it".
I had done a fair bit of planning for features before I started development, so I had a pretty good idea of what my Minimum Viable Product would look like for a 1.0. The trouble came from the period after I'd built out those features and was looking into the business and marketing aspects, which involved a whole bunch of waiting (mostly from waiting for Apple to get back to me on a business query) where I couldn't sit still, and so felt the need to tinker. This meant a few things from my "future releases" feature list made it into the build, code had to be refactored to accommodate them, bugs were introduced etc.
Lots of anxiety ensued about whether the app was up to scratch for release, so yeah, just ship it.
Up until now I've run a small side business for consulting and so I already had a business registered and so figured this part of the process wouldn't be a problem. Hah.
I operate as a sole trader and because my turnover was quite small, I was not required by the Australian Tax Office (ATO) to register for collection of the Goods and Services Tax (GST). This is great because as a small side business it cuts down on a lot of the paperwork and complexity around tax time.
Upon registering to sell apps with Apple however, I found out that they require both a registered business as well as registering for GST (although they don't inform as to why - I had to wait a couple of weeks for a rep to get back to me to find out that part). Apple collects GST on all sales within Australia and then gives the ATO their 10%, but only on Apple's 30% cut of sales. The remainder (your cut plus the ATO's 10% of your cut) is passed onto you as the seller, and so you have to declare that to the ATO yourself and sort it out in your business activity statement (BAS).
The worst part of the whole GST registration process is that I found three separate government websites which told me what GST registration was all about, and why I should do it, but none of them were helpful about how to actually do it. I ended up having to get my wife, an accountant to tell me which obscure link I should be clicking to find the right place to register.
Naturally for overseas sales things are different because of foreign tax laws. Sales in the United States require US tax forms (with rather unhelpful "help" documents) and sifting through tax treaties to figure out if and how any of them apply to me, an Australian.
To sell in Canada you need to physically mail documents to Apple Canada to comply with their GST/HST laws. There might also be Mounties involved, I'm not sure. If I actually make money anywhere else I might consider Canada then.
Marketing is the area in which I have the least experience and the most uncertainty. I've been doing a lot of digging around to find out what others have done when bringing their first product to market and found pretty much nothing.
The Release Notes podcast had a good episode on communicating with customers and release time, but all from the perspective of developers with existing software out in the ecosystem, and thus relationships with journalists and existing customers. There was some great advice about exploiting niche markets, but my first app doesn't target a niche interest.
Like with the artwork topic I'm reluctant to spend real money promoting via advertising since it's a side project not my core business, and besides I don't think it'll make a lot per install which makes the trade-off vs advertising dollars pretty poor.
Since the App Store launched I've been paying a lot of attention to the pricing experiments that people have been going with, in addition to the basic pricing models:
- Free (good for reputation I guess but not much else if you're not data mining)
- Free with ads
- Free with IAP
- Free with tips/donations
- Free with subscriptions
- Up front purchase, once
- Up front purchase, with new versions as separate paid apps
Panic put out a really good read in their 2015 report detailing some of the things they have been doing with regards to pricing, and Release Notes discussed things like opening sale discounts, mentioning that lots of developers were leaving money on the table with discounted releases, since first of all most sales appeared in the first appearance window of an app, and customers don't get a chance to pay for something more than once.
Originally I was going to either go with free or free with ads for my app, but I've soured on the idea, partly because I would like to see what the market for paid apps is like these days, and partly because I realised that ads just wouldn't work for me. Whilst my app is designed to be used regularly, most interactions with it should take less than 10 seconds, which is less than ideal when ads are refreshed about every 30 seconds. I'm not about to be a scumbag that puts interstitial ads everywhere forcing people to watch them in order to do what they want to, so that cuts ads out of the equation entirely.
In the categories that I'm mostly looking at (utility and medical in this case, with most of my ideas falling into the utility category) I'm hoping that people are actually willing to pay up front for something that solves a lasting need, but I guess we'll have to see.
I've been feeling the impostor syndrome creeping in since I started seriously thinking about releasing the app. I've spent that long teaching that I often feel I'm very out of touch with anything past basic development practices, despite trying to keep up with the software development industry through as many blogs and podcasts as I have time to read. I've read that lots of people feel that when switching focuses, but it doesn't make it feel any better :)
Anyhow, I've hit the "submit for review" button, so I guess I'll find out what happens.
Edit: looks like "what happens" is that I get to do the Rejected Submission Dance!