Welcome to another installment of our Top App Dev Interview series!
Each interview in this series focuses on a successful mobile app or developer and the path they took to get where they are today. Today’s special guest is Quentin Zervaas.
Quentin is one of the few indie developers still left standing in our community. He’s also an Apple Design Award winner, which is something we all aspire to. So, we’re really keen to hear how he’s found success as a full-time indie iOS app developer.
Going full-time indie developer can be a struggle for many developers. Can you tell me how you became successful as a full-time indie developer?
It is hard. I’ve actually been self-employed for most of my professional career. It actually began while I was doing some freelancing out of hours, then the company I was working for shut down. I didn’t actively make the decision to quit a full-time steady income, so I can imagine that would be extremely difficult for most people.
To become successful is really just a matter of persistence: you keep trying things, many will fail, eventually, some things succeed. These things won’t last forever either, then it’s on to the next thing.
The best piece of advice somebody gave me while I was working on something that was going quite well: “This won’t be your last business”. He was right.
You should always be on the lookout for new opportunities. Starting new things doesn’t necessarily mean abandoning current things. You’ll know when the time is right. I have a bunch of prototype apps I build – ideas or potential businesses I explore while working on my main apps. Most of them go nowhere. It’s just a matter of trying and failing.
Can you tell me what a typical day looks like for you?
- 6:30: Wake up
- 6:30 – 7:00: Read Twitter / Email / Hacker News
- 7:00: Drive to the office
- 7:30 – 5:00: Jump between lots of different projects. Mostly depending on what is pressing or what I’m motivated to work on. This changes often though, depending on what comes up.
In the evening I try to detach from it all, but this doesn’t really work – I often keep an eye on emails & Twitter. Which is maybe a bit sad, but I like it!
I work in an office away from home. I’ve worked from home in the past, but I personally don’t really like it, as it’s hard to detach yourself from “non-work”. I wake up pretty early, mainly to beat traffic.
What I’m working on really changes depending on the time of year. For instance, right now I’m getting my app updates ready for iOS 11 and adding new features using new iOS 11 features. This results in a lot of coding, a lot of uploading builds to TestFlight, handling feedback from testers.
Since I try and translate my apps into as many languages as possible, I spend a lot of time managing the translations and localisations in the app. This involves dealing with translation services, testing in foreign languages, all that kind of stuff.
On that note your app supports many languages. Can you tell me how you localized the app and how you thoroughly tested this?
I use a service called I Can Localize to actually translate the text. You can pretty much just upload your Localizable.strings file, it’ll import all of the strings, then assign them to translators. Once complete, you can download a separate Localizable.string file for each language. I have a workflow where I can automate downloading and merging the translations back into my projects.
I highly recommend translating apps as much as possible. One of the great things about doing so is that it forces you to think about the structure and design of your app early on. For me, adding a new sentence to 25 languages can be quite expensive, so my first thought would be “is there an easier way to explain this”, such as making the functionality more obvious, or using an image instead of text to explain things.
The translation service provides a review service, since some strings may not make sense in a given context. For this, I upload screenshots.
The best thing you can do to test your translations is to use the iOS UI testing along with Fastlane’s Snapshot. Once set up, I can generate a screenshot for every screen, device, and language and then review them myself for layout issues, or upload them for the translators to review. If you have 20 screens, 5 devices (e.g. iPhone X, 8 Plus, 8, SE, iPad), 25 languages, this could be thousands of screenshots, so you need to automate this. Plus you can generate your iTunes Connect screenshots, then automate their upload with Fastlane’s Deliver.
What tools do you use for your day to day business?
- Xcode – Build your iOS / watchOS / tvOS apps
- Visual Studio Editor – General purpose text editor
- Photoshop/Sketch – I do most of my graphics editing here, but there are things I’m unable to do well. For example, I find foreign language support (such as Arabic or Thai) is really difficult to do, or even things like using SVG files.
- Tweetbot – We get a ton of a customer feedback and interaction for our apps on Twitter
- FastMail – This is a great email service if you’re trying to avoid Gmail
- I Can Localize/Google Translate – Excellent translation service
- PhpStorm – For building web sites / APIs / backend services
- Fastlane – Tools like Snapshot and Deliver are huge time savers for building screenshots and interacting with iTunes Connect.
- CocoaPods – External open-source libraries that easily integrate with your Xcode projects
I am such a fan of the Streaks app. Can you tell me the story and how it all began?
I realized there were a few specific things I needed to do each and every day in running my business. I wanted a repeating todo list just for a handful of tasks. I was kind of inspired by the activity graph on GitHub and wanted to make it kind of work like that. In other words, the more often you did something, the better it would look.
One of the huge advantages app developers have over anybody else who “has an app idea” is that we can build it. I build a ton of prototypes for things I think may be useful. With Streaks, I built the prototype, and it was useful, so incrementally improved it, until we realized there was a product and then refined the vision further and turned it into a real app.
You recently won an Apple design award. Can you explain the design process for the Streaks app?
One of the key things in the front of mind with Streaks is restraint. Does that new feature really need to be added? The second thing is simplicity: is there an easier way to achieve this? Is there a clearer way to explain this to the user?
Also, since it’s available in 25+ languages, sometimes you really need to think about how to explain something with as few words as possible, since some of those long German words just won’t fit no matter how hard you try.
Streaks is a very successful app. What advice do you have for fellow app developers?
I heard something recently about what they do at Amazon (I’m not sure if this is true, but I like the idea of it). Before a new product is released, the product manager needs to write a press release explaining why the project ultimately failed.
It forces you to think about and face head-on whatever the biggest problem is with the project. If it’s insurmountable, that’s a pretty good indicator to move on to the next thing. It’s one step ahead of “fail fast”!
As far as specifics go: make your app available to as many people in your target audience as possible. Translate your apps into as many relevant languages as possible. Test for accessibility (VoiceOver). Build an Apple Watch app.
Try and use as many new SDKs and APIs as possible. One of the things that will help Indies on the App Store more than most other things is being featured by Apple. Give them a reason to feature you!
I think it’s successful because;
- It works
- It looks nice
- It feels good to use.
The number of times I’ve found myself running up and the down the hallway at 11 pm just because I have to get a few hundred more steps to complete my Streaks!
Also, people love to customize things. Since you can create any task, we wanted a ton of images to choose from and also dark themes are popular now since people use their devices while in bed at night, so we added dark themes.
Streaks is a really personal app for everybody who uses it since it’s about forming their own habits, so we wanted to let people make it their own.
Streaks is a paid app, can you explain the thought process for a paid app model versus a subscription model or an in-app purchase model?
I try to price apps based on how I want to buy other apps. I like the idea of pay once, get the full app. There are obviously problems with this model, as it can be hard to build a sustainable income.
For Streaks though, neither IAPs nor subscriptions felt right. We also didn’t want it to be too cheap; users will give something much more of a chance if they’ve invested money into it. If Streaks was free, people wouldn’t be as successful with it since they likely wouldn’t try as hard.
As well as building Streaks, you also currently run the CocoaHeads Adelaide. Why did you decide to run a CocoaHeads chapter, and how do you manage to find time contributing alongside running as an indie developer?
I’m based in Adelaide, Australia – there are a number of app developers based here, but there’s no regular meet up. There have been a few attempts in the past, so figured it was time to make something more regular.
It’s a fairly small group currently, and they’re all supportive and reliable with attendance and spreading the word, so the biggest challenge each time is finding a speaker. Not a lot of time is required currently, but hopefully, it will grow in the next year and then perhaps ask me again! :]
How do you manage the wearing of multiple hats, for example, Product Owner, Developer, Tester, Marketeer?
You just need to know what you’re capable of. If you’re not, get somebody who is capable. Also, there’s a ton of online services to help with things. I used to roll everything myself (for example, server monitoring). Now it’s a much better use of time to spend a few dollars on a third-party service.
For example, I use I Can Localize for translations rather than trying to translate everything myself (or retaining my own translators), I use GitHub to host git repositories. I could run my own server with Gitlab and do it that way, but that’s a distraction. I could write my own server monitoring code, but I use a service that specializes in it. Sometimes it’s fine to not reinvent the wheel.
Procrastination is a real problem for many indie developers. How do you avoid this?
At the start of each week (and each day) I try to get a sense of what I need to achieve. If I’m really overwhelmed or have a ton of things to do, I’ll plan the day ahead, allocating blocks of time to specific projects. Without doing this you can easily spend all of your days on the one thing that really excites you, rather than that other thing you really need to get done.
I normally run over on the allocated chunks of time, but then I readjust them, but it seems to work.
Don’t get distracted by the fun of starting new projects: try to actually ship stuff. This can be pretty hard, so do it in manageable chunks. Your version 1 doesn’t need all the bells and whistles. Maybe just 1 bell and 1 whistle to begin with ;]
Even if the project fails and doesn’t go anywhere, you will have learned something for the next thing.
Where To Go From Here?
And that concludes our Top App Dev Interview with Quentin Zervaas. A huge thanks to Quentin for sharing his journey with the iOS community :]
We hope you enjoyed reading about Quentin’s story at being an iOS indie app developer. In the end, a keen eye to detail and believing in your product seems to be key to Quentin’s success.
Quentin’s eye for detail on making sure the app is as clear to understand for all languages is really important to be a worldwide success and to be recognized from Apple with an Apple Design Award. We hope you can take some advice from Quentin in your development.
If you are an app developer with a hit app or game in the top 100 in the App store, we’d love to hear from you. Please drop us a line anytime. If you have a request for any particular developer you’d like to hear from, please join the discussion in the forum below!