<![CDATA[KW Codes - an indie iOS journey]]>https://kwcodes.substack.comhttps://substackcdn.com/image/fetch/$s_!L5PW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb7b36f6-d84f-4962-94d6-2a3939183d48_400x400.jpegKW Codes - an indie iOS journeyhttps://kwcodes.substack.comSubstackWed, 15 Apr 2026 15:50:56 GMT<![CDATA[How to build an iOS indie app fast]]>https://kwcodes.substack.com/p/how-to-build-an-ios-indie-app-fasthttps://kwcodes.substack.com/p/how-to-build-an-ios-indie-app-fastThu, 14 Sep 2023 06:58:54 GMT

Building a native iOS app takes time. Writing it from scratch alone is super challenging. Even more when your time is limited.

In this post, I share ideas on how to speed up app development. It’s all from my experience. On a daily basis, I work full-time as an iOS developer. I don’t have a lot of time to spend on indie app development. I got mainly weekends and from time to time 1 hour during the day. Here I share what’s helped me when building a new app.

Subscribe now

Assumptions

Let’s assume a few things:

  • You want to build a native iOS app.

  • The goal is to release the app as fast as possible, so you can get early user feedback.

  • You’re the only person working on this app.

  • You do everything: design, code, marketing.

  • Your time is limited. You have only a few hours per week to spend time on it.

Tips

Time tracking

Start tracking the time you spend on the app. I really highly recommend it. It’s eye-opening how much time it takes to build. I use Toggl.

Cut scope

Got an app idea? Define a feature set for MVP. Ideally, one key feature that solves users’ problems. You need to cut the scope as much as possible. But I mean really cut. Every not implemented feature saves you a ton of time. Things you don’t need in your app at the beginning:

  • Dark mode

  • iPad support

  • Old iOS versions support. Focus on the latest major release

  • Multilanguage support - just support one

  • Offline support

  • Analytics

  • Widgets

  • Push notifications

Design

A huge time saver is not using a custom design. Use out-of-the-box components from Apple.

If you need a custom design, spend some time to rough design in Figma main screens and components. It’s better to iterate on design in Figma than in code.

If you are not a design expert, I highly recommend the book Refactoring UI” by Adam Wathan and Steve Schoger, creators of Tailwind CSS. It’s not mobile-focused, but it gives great basics on how to approach the whole design process.

Data model

If you need a data layer in your app, design it before starting to code. Define main objects, how they relate, and so on. Check if main user flows are covered.

For example: you build a gym workout app. Define how you represent units, what exercises look like, etc.

Why do I recommend it? Coding is fun. But refactoring your code once you find out you missed a key functionality is a bummer. And it saves time.

Tech stack

Code in Swift. Objective-C is out of the question 🦕.

Use SwiftUI. If you don’t know it, don’t worry and learn on the way. It will speed up development a ton. Live previews are a killer feature.

Depending on the app requirements, choose a proper library to save time. Do you need a local database? Use Firebase. Do you need in-app payments? Use RevenueCat.

AI tools

Using AI tools, like ChatGPT, to generate code can be a time saver if used properly.

One of my favorite use cases:

  • Give a protocol and ask to implement a class/struct.

  • Generate a code based on already existing code. It’s amazing if you don’t want to write boilerplate CRUD.

  • Spot a bug.

Planning work

When planning a work I like to keep it simple. Plain TODO.txt in the project is enough to keep track of things to implement and bugs. Other productivity tools or project management apps are simply distractions.

When ending work, I recommend also leaving a note where you stopped, so it’s easier to start work the next day without wondering “What I’ve been working on recently?”.

Bugs

Have you spotted a bug? What’s the priority of it? Does it block the main user flow? If it is a minor one, like a UI glitch, save it to TODO.txt and move on. You can fix it later.

Did you spend 1h trying to fix a given bug and you don’t know how to do it? Leave it for later. Save it to TODO.txt. Close your computer and have a break. It makes wonders. I bet the solution will come to your head quickly.

Summary

Building a new app as a solo developer is time-consuming. These are the tips I use when working on my app. I could have saved many hours if I had used them from day one.

What are your tips? How do you speed up iOS app development?

Thanks for reading KW Codes - an indie iOS journey! Subscribe for free to receive new posts and support my work.

]]>
<![CDATA[How I failed 5 side projects in 6 years, earning $0]]>https://kwcodes.substack.com/p/how-i-failed-5-side-projects-in-6https://kwcodes.substack.com/p/how-i-failed-5-side-projects-in-6Wed, 13 Sep 2023 18:52:00 GMT

Subscribe now

This is a story about me, dreaming of building an online project that generates revenue, seeking financial independence and creative freedom. After five years and no success, it's still a dream. Let me tell you more about my failed projects.

Planetoid (2015-2016)

It's all started with a game. Who doesn't love those, right? Imagine building one yourself! It would be so amazing!

Back in 2015, I paired with my friend and we decided to create a mobile game for iOS: Planetoid. In a nutshell, it was a graph-based strategy where you had to conquer all the planets by shooting bullets. Here's the video of how it looked:


We spent more than one year building it after work and over the weekends. Everything was done by us: design, music, level design, etc. We finally released it in November 2016 as a paid app. Unfortunately, people weren't interested in paying for it. 2 months resulted in no sales.

What's another way to monetize an app? Yes: ads. We decided to integrate ads and publish the game for free. After a few months, we got 300 installations. It was a cold bucket of water.

We spent so much time on the game and almost no one played it.

But hey, it was our first experience! We learned a lot, made good and bad decisions on the way.

  • We gained experience in building an app from scratch and publishing it on the App Store. It was really valuable skills taking into account I had started my professional career as an iOS developer

  • The game was written in Objective-C using SpriteKit. It was the time when Swift was changing dramatically every release and it was a great idea to code in Obj-C. We saved a ton of time on code migration to newer Swift versions.

  • The marketing was almost non-existential. We posted about the game in common places like Reddit or Hacker News and we hoped that App Store would do the job. But it didn't. Planetoid simply drowned in the App Store.

Minfinity - a minimal time tracker (2017)

I was disappointed with the outcome from Planetoid and decided to tackle the next project in another way.

This time I planned to build a time tracking macOS app. I designed it first in Zeplin. Then created a landing page with a mailing list for my next app. I wanted to promote it and verify if the will be people willing to join the mailing list. I integrated Google Analytics to see if anyone visits the website. I also set up a small campaign in Google Ads.

After 3 months of a campaign and marketing, I got 5 people who subscribed to the mailing list. It was below my expectations and I abandoned the project.

Minimal Metronome (2017)

This time, I wanted to build something just for myself.

One of my hobbies is playing the guitar. I wanted to build a metronome app that was minimal and functional. The idea was to have the smallest amount of buttons and to control the app by swiping gestures and getting haptic feedback on every change.

Unfortunately, here the motivation didn't last too long. I was a bit tired after the last few projects. What's more, I found the app on the App Store that fulfilled my needs. So I abandoned this project as well.

A long, almost 2-year break

After these projects, I was exhausted. I couldn't enjoy working on side projects anymore.

Having a day job and working on side projects is tough. It can burn you down. And it hit me a bit as well. I needed a break.

It was time to recharge my batteries and return to indie hacking only when I'll be sure I'll enjoy it. And it took almost 2 years.

The return - September 2019

Here we go again. September 2019. It took some time to take a rest, but it was worth it. I was excited about side projects again.

In late 2019 I was investigating the real estate market. The problem is that there are a lot of places where you can search for an apartment. What's more, the market was so hot, it was impossible to buy an apartment from the secondary market. Great deals were gone literally in hours.

I wanted to develop a tool to monitor new offers and notify me if there is an interesting one. The plan was to provide parameters like price, space, district, keywords, etc, and based on them send a notification.

Another project just for me with some potential for monetization.

I started developing scrapers gathering data. I spent maybe 2 weeks on it when I realized the level of complexity. This was too much work for just one person.

After a quick search on the Internet, I decided to purchase one of the existing tools and I abandoned the project. I didn’t want to burn out again.

Next time: choose something simple that can be accomplished by one person.

Get a Product Job (May 2020 - May 2021)

This time the main objective was to learn something new by doing. I chose Ruby on Rails. It's a great framework to build websites quickly. What’s more, I wanted to improve my web development skills. After this project, I wanted to have another tool under my belt for any future ideas.

I started building yet another job board. This time I planned to create a website with job offers only from product-based IT companies.  I spent 6 months building it in my free time after work. I launched it in October 2020.

I did some basic marketing. I was reaching out to companies on LinkedIn. I was posting in regular places like Reddit or Hacker News. After few weeks I managed to get one job posting from one of the companies. The rest of the offers I scraped and curated from different sources.

It’s worth mentioning that posting a job post was for free. I found out how dealing with taxes might be troublesome and I decided to make a website for free until I get a significant number of job postings.

Unfortunately, the website didn’t get any traction and I killed it in May 2021. But the goal of the project was accomplished:

  • I learned the basics of Ruby on Rails, Renderer and improved my skills in front-end development.

  • I learned about different ways of accepting payments.

  • I learned how to handle taxes for side projects when you’re an EU citizen.

Takeaways

After all these projects I learned a lot about myself and what motivates me (or not).I still got many ideas in my head but right now I’m more cautious about choosing my next project.

First of all, when deciding about the next project, I need to choose the smallest idea possible that can be developed by one person. Cut the scope as much as possible.

Estimate the time needed for the MVP. It shouldn’t take more than 3 weeks, assuming having a day job and working on the project only in my free time. If the estimation is higher, try to find out the quickest way to develop the MVP. There are many no-code tools that might speed up the development. Just look at what Samuel Thompson was able to create in one day!

Having an increasing number of users is super motivating. Try to release the project as fast as possible to get the first feedback and an early dose of fresh motivation.

And that’s all. These were all my failed projects. Keep fingers crossed for the next one.

Thanks for reading KW Codes - indie iOS journey! Subscribe for free to receive new posts and support my work.

]]>