A Software Developer’s Guide to Side Projects
I don’t know a single software developer who hasn’t thought of starting a side project.
I, myself, have had many different side projects throughout my career.
Well, I should be more clear by saying that I started many side projects throughout my career.
To be honest, most of them didn’t get finished.
To be honest, most them didn’t really get started.
You see, there is a huge difference between a dream and a goal.
A dream is something you chase and a goal is something you do—something you make happen.
I used to be a dreamer.
I used to chase ideas… dreams.
I’ve always been involved in some side project, but I haven’t always been committed.
In fact, I can trace my life and career back to a single moment in time where things drastically changed—a single inflection point.
That inflection point was one of the first side projects I actually finished.
I wanted to learn Android development and to create an Android application, so I decided to make an app called PaceMaker, which I eventually renamed to “Run Faster” due to a trademark dispute. (Long story.)
|Hey John| I like long stories. That’s why I picked up this MASSIVE book.
Ok, well you asked for it.
So, initially I created my Android app—and later an iOS version—called PaceMaker.
I didn’t do any research on trademarks or the name, because I really didn’t think about it and didn’t think it was a big deal.
The app was designed to tell you if your running pace was too fast or too slow based on your target pace. It would tell you either “speed up” or “slow down,” based on if you were too fast or too slow.
Initially the app sold pretty well. I got a mention in Shape magazine early on and that sold a bunch of copies of the app, but eventually things dried up and I’d sell perhaps 4-5 copies of the app per week.
(I actually still make about $30-$50 a month from the app and haven’t updated it in years.)
Well, one day, I got an email from a company that makes DJing software called “PaceMaker.”
They had the Trademark on the name PaceMaker and asked me to change the name of my app.
I wasn’t sure of all the legal repercussions of saying “no,” and whether they had a case or not since my app was a running app and theirs was in the music industry, but I decided that the smartest thing I could possibly do would be to ask them for some compensation for going through the trouble of changing the name of my application and giving them the email address, Twitter account, etc for the name PaceMaker.
You might think “no way they would pay you for a name they already have a legal right to,” but you’d be wrong.
I won’t go into the exact details of the negotiation here, but let’s just say that I arrived at a price that made it well worth my time to make a quick name change in the app store and change the password on the PaceMaker Gmail account.
Anyway, I worked on this side project, just as I had worked on many other unfinished side projects, until I got bored with it and decided to quit.
But then, something happened.
Instead of quitting, I dug in my heels.
I said to myself, “John, you are going to finish this app and put it into the Android app store. It doesn’t matter how long it takes, but you are going to work on this app at least an hour each day, until it’s done.”
That was the moment everything changed.
That was the moment I became a finisher.
Finishing that one side project led to opportunities upon opportunities and other side projects, which eventually took me to where I never thought I’d be today; writing a book, making videos, owning my own company, and essentially being retired.
Fifteen or so years of my previous work experience didn’t make as much of a difference in my career and life as the one, small side project that I finally finished.
That side project is still in the Google Play store today. In fact, there is an iOS version as well.
I haven’t updated it in years, but it still makes me just a little bit of money each month and reminds me of just how important a little side project was to my career.
You Should Always Have A Side Project
One of the best ways to advance your career as a software developer, bar none, is through side projects.
I’ve already told you my story of how that little Android app made all the difference in my life and career, but even the smaller, unfinished side projects I started before “Run Faster” helped me enhance my software development skills, learn new technologies, and sometimes even make a little bit of extra cash.
One of my earliest side projects was a Palm Pilot application I called MaLi (Magic the Gathering Life Counter).
It was written in C and I ended up selling it for around $5 on my website at ssmoimo.com.
Using the power of the WayBack Machine, you can actually see the website I created and even download an old version of MaLi.
I learned quite a bit doing that side project.
I learned a bit of graphic design using PhotoShop to create my logo and the images for the website.
I learned how to create an animated GIF.
I learned some web design skills.
I had to learn a little bit of Perl so I could create a CGI script to handle PayPal payments and automatically send someone a registration code to unlock the registered version of the app.
I even had to learn how to implement a primitive copy protection and registration system, and how to conduct basic ecommerce on the web.
Now, I didn’t make a large amount of money, but I developed a wide range of skills that helped me greatly advance my career.
Most importantly, I developed confidence in my ability as a programmer.
I had created my own application and figured out how to sell it online—and I did it all on my own.
That’s the power of a side project: you learn new skills, practice your existing skills, are challenged in new ways and develop confidence in your abilities.
One six-month side project has the potential to gain you the experience it might take you years to get just working your 9-to-5.
Not only that, but each side project is like a small lottery ticket.
Each one has the chance of having a large amount of economic success, especially as you grow and learn.
That’s why I advise all software developers who really want to advance their careers to always be working on some kind of a side project.
Picking A Side Project
So maybe I’ve convinced you that you should start a side project, but you might be wondering what kind or how to pick one.
It’s easy to get stuck trying to figure out that perfect idea and end up never doing anything.
Remember how we talked about the difference between a dream and a goal?
You need to figure out what you are going to do and start doing it.
I’d highly advise you to start out with something very small.
Start with a very simple side project that you know you can easily complete.
Perhaps even something that will only take you a few weeks or a month at the most.
The reason why you should pick something small first is that most people get pretty good at lying to themselves.
They get so used to breaking their own promises and commitments to themselves that they lose the ability to trust themselves.
And they break their promises because they try to tackle projects or life changes that are too large and too much of a commitment.
They get in over their head, which causes them to fail or give up, and then they create this pattern where they continuously let themselves down, because they’ve lost the ability to trust themselves.
Maybe you are trapped in that pattern right now. I’ve certainly been at times in my life.
The best way to break out of this cycle is to make small commitments and follow through with them. (We’ll talk more about the power of being a finisher a little later in this chapter.)
So, start with a very small, non-ambitious side project.
Something you know you can do and can complete.
In fact, I usually advise most software developers to make their first side project a clone of something that already exists.
When I was first learning game programming, I didn’t try to create the masterpiece of a game I had in my mind that would take three years to build. Instead, I made a very simple Pong clone.
Don’t worry about copying; it’s not the same as plagiarizing.
In case you haven’t noticed, the app store is full of games and apps that are pretty much copies of other ones. They just aren’t exact copies, and your copy won’t be, either.
Your project becomes much easier and has a much higher chance of success if you aren’t trying to design software and build it at the same time.
Start by building software, and later, when you are more experienced with completing side projects and trust yourself more, you can work on designing something new and building it.
Once you’ve gotten a few of these smaller and easier side projects done, and have cemented your trust in yourself, it might be time to pick something more ambitious, but I would still limit my ambitions to a project which can be completed, or at least the first version shipped, in under three months.
You can always create future versions and build onto a side project over time––perhaps even make it your full-time gig, like I did––but you want to get it done and out there as soon as possible so you can gain the benefits from it, test out the idea, and not have it drag on for years.
Make The Side Project Serve At Least Two Purposes
I’m a big fan of multi-purposing.
Multitasking sucks, it’s difficult to do, and it ends up making you less productive overall.
(There are of course some exceptions to this.)
But multi-purposing, on the other hand, is where it’s at.
It’s the bee's knees.
What is multi-purposing, you ask?
It’s exactly what it sounds like: you take one thing—a side project in this case—and you have it accomplish more than one purpose.
Take this book, for instance.
I’m writing this book in many small, blog post-sized chapters: why?
Well, it started out with me wanting to maintain a writing habit of writing at least 1,000 words a day.
Rather than just write random stuff, I thought, hmm, I should write a book.
But a book takes a long time, isn’t usually very profitable, and you don’t get any benefit until you finish it—(if you do) and actually sell it.
So, I thought, how can I multi-purpose this even more?
Then I realized that I could take each chapter of the book and write it as a blog post on my blog first, then when I was done, I could make a book out of all the chapters.
I also thought this would be a great way to increase email signups on my blog.
This “book side project”—and it is a side project since I’m only working on it an hour each day—serves the following purposes:
- Maintains habit of writing 1,000 words a day
- Results in a completed book
- Generates additional company revenue when I sell the book
- Creates blog content
- Increases email signups
In my mind, that’s pretty good.
I’m getting quite a few benefits out of writing this book and I’ve structured it in a way that fulfills multiple purposes.
But that’s not all. I can multi-purpose it further by:
- Selling an eBook version
- Selling a print version
- Selling an audio version
- Making some videos and selling a premium packaged version with all the above
- Using chapters to create YouTube content
So when you pick a project to work on, even a small one:
Think about how you can multi-purpose that project in as many ways as possible.
Perhaps with your side project you can combine multiples of these purposes together:
- Learn a new programming language
- Learn a new framework
- Practice an existing skill or master it
- Create an app to solve some problem you have
- Create an app to solve someone else’s problem
- Create an additional income source
- Use it for your interview portfolio
- Use it for blog content
- Use creating the app for video content
- Use the project to mentor someone
- Use the project to be mentored
- Increase your self-discipline
- Try out a new time-management technique
- Make new friends
- Learn about an industry you are interested in
- Complete a college or university assignment
Before you start coding away—or doing whatever you are doing—it’s important to plan out what you are going to do and define what the end goal is.
Oftentimes, projects aren’t completed because they are missing three essential things:
- A goal or “finished” criteria
- A deadline
- A system or set interval to work on the project
You need all three of these things to be successful.
Start with defining your end goal.
What is the criteria you will use to say that the project is finished, or at least shippable?
Define the minimum feature set or criteria which will define the successful completion of your project.
The scope can increase later and you can create new projects to build new functionality into your existing projects, but make sure that you have an initial scope that will determine when this particular project is “done.”
Next, set a deadline.
Be aggressive, but not too aggressive.
Pick a deadline that you know you can accomplish, and give yourself a little buffer, but not too much.
If you give yourself too much buffer, you’ll procrastinate.
Having a deadline will create urgency and help you take yourself more seriously.
When I said I was going to complete this book by the end of this year, I had something to shoot for and commit to.
I couldn’t procrastinate and put things off, because I had a deadline that not only held myself accountable, but…
I also told the world.
Finally, you need a system and a schedule for actually working on the side project and making progress.
I talk about how I use various systems, including a quota system, in my book Soft Skills: The Software Developer’s Life Manual, in the section on productivity.
So I won’t go into the details here, but make sure you have some kind of system in place that will do the following things:
- Define clearly how much time you will commit to spending on the project each day or week
- Define when you will spend that time (put it on your calendar)
- Define the process you will use to track the work and what needs to be done
Good systems are the key to success.
This book had a system.
Every successful project I’ve ever undertaken had a system in place for getting it done.
Speaking of systems, let’s talk about one of the most important things you can do to actually complete and benefit from your side project: be consistent.
This means that you don’t work on the side project only when you feel like it, because there will be plenty of times you don’t.
It means you create a schedule for working on the side project and, come hell or high water, you stick to that schedule.
Any measure of true success I have enjoyed in my life has come from consistency.
I’m in shape and look good because I’m consistent in my diet and workout program.
(If you are wondering, I eat one meal a day, run 40 miles a week, and lift weights three times per week.)
I don’t miss a day—and I mean that.
I’m consistent in the writing of this book, of writing blog posts, of making YouTube videos, of just about anything I want to accomplish in life.
It’s all those small things that add up.
You build a wall by laying one perfect brick every single day.
Consistency is the key.
If you want to finish your side project, learn to be consistent.
|Hey John| You said you basically never miss a day. How is that possible? Don’t things come up that throw off your perfect schedule?
One of the main reasons why I never miss a day is because I plan ahead.
If I know something is coming up that absolutely will prevent me from doing my workout, recording my YouTube videos, writing a chapter in my book, or whatever else I have planned at my normally scheduled time, I already have a replacement time committed in my calendar.
Whenever I travel—which is pretty frequently—I always plan ahead what my workout plan will be.
What gym will I go to work out at and at what time on what days?
Where will I go to run and when?
How will I get my YouTube videos recorded?
It’s great to have a schedule, and just having one is going to really help you to be consistent, but you also have to plan ahead for when your schedule is interrupted.
Be A Finisher
And you want to be a finisher… trust me.
It’s really easy to start things and not finish them.
I’ve got a yellow belt in my closet, some old soccer cleats, a guitar, surfboard, and more.
I call it the closest of broken dreams, and we all have one.
We’ve all started things that we didn’t see through to the end.
We’ve all begun projects with the greatest of hopes, only to end up quitting after a few weeks or even days.
Stop doing that right now!
Resolve today to become a finisher!
Decide that no matter the project, no matter how much you hate it, once you start something, you will finish it, even if it kills you.
It’s that attitude that shifted my life around.
Now, I never start something unless I intend to finish it.
And even if I don’t feel like finishing something, I do it anyway.
I would have never written my first book, shipped 55 Pluralsight courses, made multiple products, obtained 6-pack abs, or done really much of anything if I had not decided one day to adopt this attitude for life.
That doesn’t mean every project I put my hands on turns to gold, but I’ll tell you what, they all get DONE.
|Hey John| How do I handle getting “stuck” in a project? When I don't know what to do next or how to solve a problem?
For the most part you just push on—even when you know your solution or your answer isn’t optimal.
It’s tough, believe me. I tend to be a perfectionist, but perfect is the enemy of good.
If I let myself get “stuck” because I didn’t know what to write or I couldn’t find the perfect sentence, you wouldn’t be reading this book right now.
The tradeoff is that some parts of this book won’t be as great as I’d like them to be.
But, the book will be finished and shipped.
Getting 99% done with a project, but not shipping it has 0% value.
It’s almost always better to push through and forge ahead rather than to allow yourself to get stuck and caught up in the problem you are trying to solve because you are trying to solve it perfectly.
Oftentimes, you have to just go forward with a best guess and perhaps a hope and a prayer.
Sometimes you’ll be wrong, but you are guaranteed to miss 100% of the swings you don’t take.
So, if you are feeling stuck, the first thing you should do is evaluate whether or not you are really “stuck” or if you are just waiting for a perfect solution.
If you still feel “stuck” and don’t know what to do, just try to think of the next smallest possible step and take it—even if it doesn’t feel right.
Can’t solve a problem, ask for help and then skip it and move on.
Not all problems have to be solved anyway.
Sometimes you just take a best guess and accept the consequences, knowing that something is almost always better than nothing.
Making Money From Your Side Project
Let’s wrap up this chapter by talking about how you—yes, you—can actually make some money on your side project.
First of all, I recommend that on any side project you undertake, you find some way to make money from it, even if it’s not a large amount.
Charge 99 cents for it if you must, but put it in the app store.
Make the app available for free, but put some ads in it.
Make the web app have a trial and a paid version.
At least put a donation button up, for goodness sake!
Try to come up with some way you are going to be able to monetize the project from the start.
If you are creating a blog—although, I suppose the same concept would apply to many endeavors—check out my short course on “10 Ways to Make Money From Your Blog,” for some ideas.
Now that I’ve said that, let’s be realistic.
You are not going to make a ton of money from your side project.
Yes, I know you think it’s awesome, and it probably is, but just don’t expect to make a large deal of money from it, at least not at first.
In time, you may be able to make some good money, but at first just try to figure out a way that you can make some kind of money.
If you work on multiple side projects, a little bit of money here and there can add up greatly over time through different income streams.
The important thing is to think about this upfront.
You are not Twitter or some ridiculously-funded startup who can try to get users and then worry about figuring out how to actually make money from them.
Alright, so hopefully you have a good idea by now of what to do and what not to do in terms of starting a side project.
And hopefully you are inspired to start one.
Like I said, I think all software developers should always have some side project going.
Just remember to start small, commit, and finish and you’ll be fine.
You always want to make sure you get a real benefit—and hopefully more than one—out of any side project you are going to devote your free time to.
Good luck and godspeed!