When is it okay to switch to a different project?

This is something that I struggle with all the time. I have so many ideas and so little time. There’s no way that I can get to everything. But it gets worse. Because new ideas keep arriving all the time.

This episode is about some of the insights I’ve learned about how to finish a project and when to walk away. This is a balance that you’ll have to figure out for yourself. I can only share my thoughts and what’s worked for me.

Listen to the full episode to hear my insights and learn what you can do to get more things finished. You can also read the full transcript below.


This is something that I struggle with all the time. I have so many ideas and so little time. There’s no way that I can get to everything. But it gets worse. Because new ideas keep arriving all the time.

I’m definitely not the type of person who has to finish everything that I start. And I’m okay with that. But just like how I have to watch my weight, I also recognize that I have to be careful about starting a new project.

This episode is about some of the insights I’ve learned about how to finish a project and when to walk away.

This is a balance that you’ll have to figure out for yourself. I can only share my thoughts and what’s worked for me.

First of all, we really do need to finish things. I don’t mean they need to be complete. Hardly anything is ever fully complete and will change over time. You have to get that first version done enough so it can be released. This is hard and one thing that will help is to focus on the absolute minimum that you can provide that still has value to somebody.

If you’re going to take a break from a project, getting past that first finish line is one of the best places to aim for. Even if you have to change your list of features, it’s much better to deliver a smaller set of features at a high quality than more features that may not be needed. Let your customers tell you what they want next. This leads to multiple finish lines.

Completing a project that nobody else sees or knows about is normally not a good thing to do either. You’ll get the most benefit when you make it your goal to not only finish a project but release it as well.

What about ongoing projects? Do all projects have to have a complete state? This podcast is a good example of an ongoing project. There’s no end in sight. In fact, my list of possible future topics just keeps growing. The way I’ve found that works best is to be in constant release mode. I make a point to write, record, and release a new episode each week.

To me, it doesn’t matter if a project has a definite end or is ongoing, the key is to get something done and get it in the hands of a customer as quick as possible.

If you do decide to stop work on something, make sure it’s a conscious decision. Put the previous project away. As long as you leave it out, then it’ll just lead to a sense of overwhelming and depression. If you’re worried that you might forget about a good idea unless you start work on it right now, then do what I do and keep a list of future projects. It’s okay to spend an hour or so to write down your thoughts so you can come back later.

And if you decide that the new project is better or more important than something you’re already working on, then it helps to list reasons for the change. The whole point is to make a decision one way or the other.

I’ve mentioned something called the sunk-cost fallacy before. Listen to the QA Friday episode from 2016-Jul-22 for more information. The main idea of the sunk cost fallacy is that we often let past events and decisions drive our future.

If you’re almost done with a project and a new idea comes along, just make sure to ask yourself if the new project can wait a bit. If you can finish the current project and release it, then that’s usually better. If not, then be clear with yourself about why the new project is better. Maybe the new project completely invalidates the current project. Or the current project is dragging on with no end in sight. If you’re switching just because the new project is, well, new, then remember this. There will come a time when the new project will also lose its shine. All projects eventually enter a phase where you need to put in some hard work to complete them. If you’re switching projects to avoid hard work, then eventually, you’ll look for another project to replace the new one.

This is the cycle where nothing gets done.

When I started teaching programming a few years ago, I wanted to make it fun and interesting. In other words, increase the shine so that students would be interested and stay interested for as long as possible. There’s just one problem. Building a modern 3D game similar to what people are used to buying and playing is a huge task that can take a full team of experienced developers multiple years to complete.

I started teaching simple text based games such as tic-tac-toe or wordguess. These are the types of games that you can complete in a weekend even if you’ve never written any program before.

I can see the enthusiasm fade though when I explain what type of game allows a new programmer to focus on learning how to program. So I started building a library that will help you build a 2D game. Jumping right into a 3D game is still not something that I recommend. I found a good library called SFML that’s really good at drawing but lacks some higher level concepts that allow you to focus on building your game.

I built a library that sits on top of SFML and help you manage things like switching between scenes or binding input events to game actions. I ran into some problems managing all the images needed by a graphical game. I still think this is a good project but at some point, I had to ask myself if I was getting too far away from being able to release something.

For the last few weeks, I’ve gone back to text based games because they’re simpler. It makes it easier for you to learn how to program. But at the same time, I’m creating a system that’s more advanced than tic-tac-toe. Something that allows you to build games with action. Something that allows you to focus on how to program your game without getting sidetracked with graphics. There’s a time for that sort of thing. Probably not when you’re beginning to learn how to program.

I had a decision to make. Should I continue with the 2D library or go back to text? The sunk cost fallacy would suggest that I should continue with the 2D library just because I’d already spent so much time on it. The shiny object syndrome would suggest switching just because something new comes along. Neither one of these reasons is reliable.

You should continue with the current project if you can get it to a point where it can be released. And then switch to the new project.

Or you should switch if the new project offers a substantial customer benefit.

In this case, I felt that the benefit to you was worth switching. I’m using the curses library which allows more advanced drawing even though it’s still using just text. This is a step up from the simple text games. It uses many of the concepts from a 2D game but without the graphics.

For example, I took the game loop from the 2D game. The new game is processing input, updating game elements, and drawing to the screen just like a 2D game or even the most advanced 3D game. This allows you to learn concepts first so that when you do move to more advanced games, it won’t all be new.

I’ve said many times that we learn through associations. When we try to learn something that’s completely different from anything we’re used to, it’s much harder. That’s why I try to find examples from our everyday lives that you can relate to. It gives you something to associate with the new concept.

There’s a lot of new things to learn when learning how to program. You get the most benefit by taking steps big enough for you to feel like you’re making progress but not so big that you feel confused.

This is the benefit that convinced me to switch to a more advanced text based game. It’s just one step beyond tic-tac-toe.

I still have to be careful to make sure that I consciously decide when to switch projects. One thing that helps is like this case where the two projects are related and the new project becomes more of an intermediate step instead of a completely unrelated project.

You can follow the game development project on Patreon. One of the reward levels allows you to participate in an hour of development each month. You can experience the process as I decide what to implement next and then how I go about this. Sure, you can see the checkins on Github but they don’t show you everything. I might try something, change my mind, try something else, and then find a bug. Once I get to a good point, I’ll commit the changes. Visit takeupcode.com and click the link to become a patron. There’s already a special podcast episode available and you’ll get access to a new episode just for patrons each month.