Give your simulator superpowers

RocketSim: An Essential Developer Tool
as recommended by Apple

Win a ticket for the Do iOS Conference in Amsterdam Join here.

Side Projects: 10 Tips for being successful

It’s common to have a side project as an engineer since we can build our ideas. At the same time, it’s also trending to start a new project before you’ve finished the previous one. You could say there’s a graveyard of many side projects that didn’t reach the public.

While I’m a full-time employee at WeTransfer, I still manage to maintain SwiftLee, SwiftLee Weekly, SwiftLee Jobs, RocketSim, and Stock Analyzer. You probably think I’m single and living in a loft. The contrary is true: I’m a dad of a 7-month-old son, we’ve got a dog I need to walk, and my fiancé loves watching series with me. So how do I manage?

It’s a question I often get, so I figured it would be nice to share my tips and tricks to launch and maintain side projects successfully.

Create focus

Ironically enough: side projects are one of the biggest pitfalls for side projects to not complete.

You’re working on a great project, but you start to struggle to make progress or finish it off. At the same time, you have that great new idea you would love to start working on. Before you know it, you’re deep into the new project, making it even harder to get back and finish your previous struggle.

If there’s one thing that made me succeed in my side projects, it’s gonna be the focus. I never work on an update for Stock Analyzer and RocketSim at the same time since it will only slow me down. The value of being in the proper context is priceless when time is limited, as it will bring you up to speed faster. Getting up to speed fast is vital when time is limited. One thing at a time, don’t do new projects before finishing

Be realistic

My first version of RocketSim and Stock Analyzer was far from what I wanted the final version to be. Realistically, I couldn’t build that all at once, so I released a smaller version first.

Release early, and learn fast is what I believe in. You’ll enjoy receiving feedback while you get the chance to optimize for your users in an early stage. I often shifted planning based on the user’s interests guiding me towards building other features than planned.

A realistic set of tasks allows you to release quicker. The earlier you release, the sooner your side project won’t fail. Lastly, a live side project has a higher chance of staying alive since there’s more reason to continue developing.

Stay updated with the latest in Swift & SwiftUI

Join 19,972 Swift developers in our exclusive newsletter for the latest insights, tips, and updates. Don't miss out – join today!

You can always unsubscribe, no hard feelings.

Set priorities

The highest return on an investment will more likely make you feel like you succeeded. When you’ve limited time available, you want to ensure you’re working on the tasks that make the most sense.

I’ve got many side projects for which I have many tasks to complete. Without priorities, I could end up spending time optimizing CSS for a SwiftLee page that almost nobody sees. That sounds like a waste of time, isn’t it?

Instead, I’m trying to set priorities based on what I believe has the highest return on investment. It’s up to you what kind of return you’re looking for. If you ask me, it would almost always be audience growth since it will make me move towards a higher impact.

Planning is key

After creating a realistic set of prioritized tasks, it’s time for you to create a plan. Personally, I’m creating quarterly planning, which allows me to create focus. The result is that I don’t have to revisit my planning every week, preventing me to switch contexts too often.

I’ve shared an example of my 2022 Q4 planning on Twitter:

My quarterly planning for Q4 2022 was created using GitHub Projects.

Many tools allow you to create a plan. For me personally, GitHub Projects works great since I can pull in issues from all the side projects I’m running. That’s pretty much a bonus tip: create repositories for non-technical projects. SwiftLee, for example, has its own GitHub repository, even though the code is hosted elsewhere. Doing so allows me to pull issues into my current GitHub project.

10 minutes a day counts for 5 hours a month

When time is limited, you’ll quickly feel like not getting anything done. The solution for me has been to try and progress 10 minutes daily. For example, I’ve been working on a new major update for Stock Analyzer by spending a few minutes across the week.

10 minutes is just guidance here, it could be 15 or maybe 23 minutes. I’d like to share the key message that a bit of progress a day makes you progress faster over a month.

To allow yourself to spend time on a side project sporadically, you’ll have to have prioritized planning with focus. You should also be okay with leaving your side project in the middle of a refactor or development phase. While this isn’t always easy, there are ways to make this work more efficiently.

Stop while it’s still fun

First of all: stop while it’s still fun. While this isn’t always possible, it would help to get you back to the side project more efficiently. It’s much more fun to get back to a project state where you’re almost finishing up a new design. On the contrary: it’s much less tempting to get back into a vast refactor where you’re almost stuck.

I learned to stop whenever I needed to go. When our son is crying and my fiancé is busy, it could mean I have to drop work immediately. It frustrated me initially, but I learned to accept this positively with the idea of having a tempting project state to get back at.

Create leftover todo’s

Leftover todos are valuable for your day-to-day job and side projects. Leaving in the middle of progress might make it hard to get back to the context the next time you return. Therefore, I try to make leftover todo’s so I can get back into the proper context as soon as possible when I revisit my side project.

Todos can be valuable in general. I like to create warning todo’s whenever I’m starting a big refactor:

#warning("TODO: We should rewrite this using async-await")

In this case, I’m reminding myself to rewrite a piece of code using async/await. By using TODO: I allow myself to search warnings for just the todos:

Todos allow you to get up to speed with side projects quicker.
Todos allows you to get up to speed with side projects quicker.

Use automation and tools to save time

The last thing you want is repetitive tasks when time is limited. I’ve spent a lot of time on automation and internal tools for tasks that I have to do weekly to keep SwiftLee products running.

For example, I curated my newsletter using iosfeeds.com/swiftlee, which only shows new articles published since my previous issue. SwiftUI allowed me to quickly create a Mac application for submitting new curations throughout the week using markdown:

SwiftUI allowed me to create a newsletter curation side project.
SwiftUI allowed me to create a newsletter curation side project.

The app uses the Goodbits API to push the curation to my following newsletter issue. Twitter handles are automatically fetched by the app and using markdown, I can quickly add links or styling. I’m using a self-hosted Sendy version to publish newsletter issues and a webhook to post an automated tweet with all the Twitter handles that were found inside my latest newsletter issue:

An example of the automated tweet for my newsletter side project.

In other words, this example of automation and internal tooling saves me from:

  • Opening Goodbits and use their UI for every article that I want to curate
  • Lookup Twitter handles and URLs
  • Collect all Twitter handles and post a tweet once the newsletter published

Altogether, that’s a bunch of time every week (!!) that I can now use to progress other side projects.

Push yourself with like-minded friends

You’re likely to become a better football player if you’re in a team with players that are better than you. At least, that’s how it has worked for me over years!

I always try to meet with like-minded friends who try to progress their careers just like me. We challenge each other to reach our goals and are accountable to each other. Whenever we meet again, I want to show them significant progress. Like-minded friends give me the energy to progress and challenge me to stretch towards higher achievements.

Celebrate success

Once you’ve got your side project running, it’s time to celebrate success. Be vocal on Twitter or buy a bottle of champagne to celebrate a launch (or both!). I check in on my stats regularly since the growth I see motivates me to continue development.

In cases of disappointing statistics, I try to see it as a motivation to improve. The lower your performance, the higher your chances of seeing improvements next time.

From Side Project to Going Indie

If you’ve enjoyed this article and you’re working on side projects, I’m sure you’ll enjoy my course From Side Project to Going Indie.

Conclusion

Running side projects successfully can be challenging and time-consuming. However, with the proper prioritized planning, you’ll be able to focus and reach your quarterly goals. Stay realistic and ensure context switching becomes effortless with left-over todos. Once your side project is live, you can start celebrating or challenging your like-minded friends.

If you like to prepare and optimize, even more, check out the optimization category page. Feel free to contact me or tweet me on Twitter if you have any additional tips or feedback.

Thanks!

 
Antoine van der Lee

Written by

Antoine van der Lee

iOS Developer since 2010, former Staff iOS Engineer at WeTransfer and currently full-time Indie Developer & Founder at SwiftLee. Writing a new blog post every week related to Swift, iOS and Xcode. Regular speaker and workshop host.