A while ago, someone asked me for advice about starting an indie app business. So I’d given it some thought and wrote back a few points – and I thought it would be a good idea to put it out here for anyone else who’s thinking about doing this. Let’s start from the beginning.
I grew up in a household that’s had computers ever since early 1990s – my dad had a small advertisement/DTP studio and so I’ve had some inclination towards those machines from a fairly young age. Who remembers OS 6/7 and ResEdit and fiddling around with resource forks, and so on? I didn’t know what I was doing most of the time, but it was fun exploring the internals of the system – which was fairly small back then – it fit onto a few floppy disks.
In high school, I started creating apps (or at least tried to), initially using REALbasic (now known as Xojo) and I even tried selling them via Kagi. Kagi was an online commerce platform that … uh, I don’t remember the details, it was over 20 years ago. But I remember the joy in seeing people using my apps (back then, it was just a handful of users, we’re really talking a few dozen at most) and receiving a first check for something like $100 (for license codes sold over the period of several months).
Then I started learning Objective-C which I got to know fairly well (my college thesis was about creating a modular Objective-C runtime that I got working on Windows 3.11, experimental OSes, etc.). During college, I was working with a talented designer on some apps (some of which I now own), but unfortunately, as he needed to support himself and had a full-time job, he had very little time to work on the company apps. By the time I was graduating from college, I needed to decide what to do next as the company was not working out.
I saw that starting and maintaining a business while working full-time somewhere is not something that you can do for a long time. Not to mention if you’re working the whole day on a computer at your job and come back home only to sit in front of another computer working on your own software, it’s going to eat you alive. You can do this for a few months, but the thing is, businesses usually take longer to take off and many people will give up by then.
It took me several years to get to a place where I could say this is going somewhere, and I had to take on some commission work and worked mornings in the forest as a lumberjack (BTW – best body building ever).
Anyway, enough about that and let’s get to the “advice”.
Not everything is an instant hit.
While the world is filled with stories of overnight success, they are exceptions – that’s why they make good stories, no one wants to hear about something happening everywhere all the time. Not everything, mainly with a limited budget, can become a hit in a few days, weeks or even months. If you have the budget to pour heavily into ads and promotions, this entire blog post really isn’t for you. This advice comes from someone building a company from scratch with zero initial capital.
The first few apps I released had almost no downloads, no users and there was no income from them. They are long forgotten by the world and even by me. Be prepared to have some setbacks, don’t let them discourage you. Start small and build up. Have an idea for an app? Don’t spend a year developing something that might be a flop in the end. Develop the main idea and let it grow based on feedback and some roadmap.
However, don’t “underdevelop” either. The app must not crash, it mustn’t be buggy, it mustn’t feel like half-done and unfinished. It needs to be working, though some features may be missing. It’s always nice for the customer to get updates that improve things, add new things and the app gradually gets better and better. When users see this, they talk, they recommend the app and you start growing.
Be patient, keep improving the app. But also know when to stop. If you release an app, issue a few updates, you try your best to put the word out (some small ad campaign, posts on social media, etc.) and you’re still seeing that only 200 people downloaded your app, maybe it’s time to rethink it – maybe people don’t find your idea that useful (or fun in case of games). Don’t get discouraged, it just might be the time to start working on another idea that will be better.
Don’t get a job.
This might seem like a very bad advice. But I was a post-graduate intern for one summer at Cambridge University and I worked for 8 hours in a lab, then went back to the dorm and needed to put another 3-4 hours of work into my own apps. By the end of the summer, I was far from OK. I was stressed, I gained weight, I had no time to do anything besides sit at the computer and work. You can’t keep up such pace for too long. You can try it for a few months, but that’s not enough to develop the app and get your userbase. Which means that you are likely to quit too soon.
It’s tough, but if you get a job, sooner or later it is the end of your business path.
There’s nothing wrong with accepting a freelance job/software commission, however. No one says that you need to work on your app 8 hours straight each day. It’s often counterproductive and it can be beneficial to clear your mind doing something else. Develop a project for someone, but make sure to let them know that you can only work up to 4 hours a day and that you have other projects (your projects) as well and really mean it and time it. Don’t just work on external projects as you’ve basically gotten a job.
This should, however, help to keep you sane while getting some funds to keep you from starving during the beginnings.
Do and don’t do this alone.
Should you or shouldn’t you do this alone? This is a really hard decision to make. I’ve done this alone (as in one-person company).
The advantages of this is that you really are the boss of things, you don’t need to (dis)agree on various aspects (codestyle, features, UI, …) and mainly you know where you are in life. As mentioned above, succeeding usually isn’t a question of a few weeks or even months, and it’s hard to say whether the other person (or even multiple people) will be willing to make similar sacrifices as you. You can find yourself in a tough situation in a few months in where your partner(s) decide it’s time to give up and get a job. Perhaps they have kids and you don’t. Perhaps you have found a cheap place to live even though it’s a total dump and they are not willing to do so (e.g. their life partner isn’t willing to). Perhaps they need to support their living partner/parents/…
As mentioned on several occasions, my initial serious attempts at being an indie developer ended due to the other party being otherwise occupied. I do not blame him, I do not bear any hard feelings towards him. We were at different places in life. I was in college, and even though he was roughly the same age, he was working full-time, paying rent, etc.
But also don’t do this alone. I work 365 days a year. Last year, I worked 366 days (2024 was leap year). I’m not saying that I work 8 hours each day, but even during weekends, holidays, vacation, I need to tend to support emails in the morning for an hour or so and then once more in the afternoon or evening. I cannot just take off and leave for a few days without seeing the consequences and going insane when I get back. I currently receive about 100 reports from my apps each day. Some are about license code issues, some are crash reports, some are Permute conversion issues, some are Downie download issues, but it all adds up to the average of the 100 reports a day.
If I were to leave for a vacation for 10 days… You do the math what would I be getting back to. Plus your users don’t want to wait for 10 days. Even 5 days. There are users who are unwilling to wait an hour and just don’t realize that you cannot be at the computer 24-hours a day and that you’re perhaps in a different time zone and sleeping. The unfortunate thing about this is that going through the support emails in my case is something that takes about 2-3 hours a day – which is not enough to hire someone and train them. Not to mention that most of the reports actually need some technical knowledge. So unless I would hire another developer, in the end, the really administrative stuff that someone could do instead of me is a 30-minute-a-day job.
And this is stuff that is really tedious, needs to be done every single day and there’s no end to it. If you don’t do this alone and start the business with someone, chances are that the other person will be fairly knowledgable about the inner workings and that the other person will be able to step in when you’re out of office.
Yes, I did just give you a contradicting advice. Go figure.
Appreciate user feedback.
Firstly, make it easy for users to contact you. I have placed support buttons everywhere. Into error dialogs, into the main window, etc. Users should have an easy, convenient way to contact you right from within the app. Don’t just open the mail client. That takes them away from the app, people now have short attention spans and this can cause them to forget what they’re writing. Additionally, custom support form in the app can automatically check for updates, include information like the version of the app running, ask for details, etc. Yes, you will be in constant flood of requests and reports, but that’s good. It shows that people care about the app enough to take a bite out of their free time to drop you a line or two.
Listen to your users. You may regret it one day, but in the beginning when you have just a few users, make them as happy as you can so that they can spread the word about the app. If the users see that you respond quickly, that you appreciate them, implement features that they asked for, they will keep using the app instead of looking for another one. Sometimes that takes the app somewhere you didn’t initially plan, but you will have time to stear it back once the userbase grows.
When the userbase is large enough, listen, appreciate the feedback, but filter the requests a little. Does it fit into the big picture? Is the requested feature really a useful feature or just a quick-fix for something more complex? Ask why do the users need the requested features, how would they fit into their workflows. If you feel that this is not the correct direction, try to explain your vision and why another approach might be better and more robust. It is your app, you must decide what goes in and what goes out. It’s better to lose one customer not having enough features than to lose hundreds because the app becomes too complex for the average user.
Be prepared for sudden death.
With every business, the question is when and how it will end. Unless you’re a bigger company than what I have in mind, one day, your company will eventually end. This is inevitable as you will likely retire (or die) some day and unless there’s people to take over, the company will perish. This is, however, probably OK, you’re counting on that as part of life.
There’s, however, another aspect of this business that’s a bit scary – you’ll become redundant and irrelevant. The fact is that this is an everchanging industry and it is entirely possible that in a little while your app becomes irrelevant. Just like during the Internet bubble in early 2000s, my father’s DTP business took a sharp turn downwards given that everyone got their hands on a computer and a printer. I’ll give you a few app examples:
CandyBar (https://en.wikipedia.org/wiki/CandyBar) was an app every geek was using 15-20 years ago as it allowed you to change system icons (e.g. folder icon, etc.), Dock appearance, etc. There were many icon sets that various designers have put out that you could drop in and swap. It was really sweet. But then Apple changed the way Dock was rendered (https://panic.com/blog/candybar-mountain-lion-and-beyond/ – if I recall correctly they started using 3D renering without using images) and eventaully Apple started using SIP (https://en.wikipedia.org/wiki/System_Integrity_Protection) which disallowed changing the icons altogether.
Suddenly, the CandyBar app became irrelevant as it no longer worked due to changes to the OS.
Another example would be Skype. I’m not saying that Skype is dead (perhaps you’re using it), but remember 15-20 years ago? Skype was everywhere. People used it for chats. For calls. For conference calls. I had it always open. Now I can’t even remember how many years it’s been since I’ve last opened it. What changed over the 15 years? A lot. From iMessage and FaceTime to WhatsApp, Zoom and Google Meet. Other companies came in and took over Skype’s dominance.
Final example would be with Twitter (X) and Reddit. I’m not talking about the services themselves, but about the apps – for example Twitterrific (https://twitterrific.com/beyond) and Apollo (https://apolloapp.io), but there were many more. Both services announced sudden changes in their API policies (API is a way the app communicates with the service) out of the blue (Reddit – https://en.wikipedia.org/wiki/2023_Reddit_API_controversy, Twitter/X – https://blog.iconfactory.com/2023/01/state-of-the-twitterverse/).
Just imagine waking up one day, realizing that your app can just go to the Trash (and what’s scarrier is all of the users not realizing that it’s not your fault). This is unfortunately a harsh reality.
My recommendation is to diversify. Don’t just have one app, but also don’t have 10 apps – you won’t be able to keep up with all of them. Have 2-4 solid apps. One of them may be the main source of income, but have some fallback app(s) that can keep you afloat if something like this happens to you.
Or just have a complete exit strategy – I eventually plan on getting a woodworking workshop and building furniture. Depends on what floats your boat.
Conclude this already.
Alright, alright, I’m almost finished. Please don’t take the above as a dogma. This is over 20 years of experience, but experience is never fully objective, it is my experience. Experience is a process and it requires some context. The times have changed, so the overall context is a bit different and your life context is definitely different.
Is it all worth it? For me, yes – it allows me to say that I’ve created something and that I’ve enriched the ecosystem a bit. Even though it took several years of living at (or beyond) the edge of poverty, eventually this company has grown into a successful business that supports me and my family. Is it for everyone? No, definitely not. It takes a lot of willpower not to quit and mainly not to procrastinate during the day and actually do something when there’s no boss above you. But that’s true with any business.
If you are thinking about getting into the indie developer business and think that I am trying to discourage you with the above, please don’t – I definitely do not mean to discourage you – if you read it carefully, I mentioned quitting too early several times. I think it’s great if you want to start a business and create an app. But I also think it’s important to be in touch with reality and really think it through, because it’s not something that will take a few months of your life, but at least a few years. Or decades. Or a lifetime.
Out of curiosity, what is the ballpark hourly rate you would be willing to pay for someone you could teach to handle support emails? This isn’t a solicitation. I manage similar issues at my company that develops iOS apps. Have you run some napkin math on the value of your hourly time? Finding someone to free up a couple hours of your day might be more worthwhile than you think, albeit can be tricky to find someone you can trust and stick around long enough to justify the training investment. Thanks!
Regarding support emails, I consider them to be absolutely the most important part of the business. It’s long been obvious that the best way to get a really loyal customers is for them to have a problem and you to fix it (even more than them never having a problem). But also, the comments and emails are the pointers to the future and should be one of the strongest drivers of development. I’m not talking about blindly implementing features that are requested, but instead look for trends. If there is a frequent support problem, then fix that in the program. If there is a feature thing that users are missing, add that to the tutorial, or otherwise make it more obvious (add a button instead of just a menu item). Automatically (with permission) report crashes and fix every single one as a matter of priority (and ensure your development style avoids crashing bugs – I recommend lots of assertions, but others use lots of tests) (sadly, some crashes are caused by system bugs that may be impossible to resolve). By doing all of this as a very high priority, you make the experience better for your customers and you reduce the workload for yourself allowing you to spend more time on developing new features.