I turned my side project into a unicorn job. It only took about 10 years of hard work...but I did it the hard way.
Find the easiest thing that you are legitimately passionate about. Do not work on a project because it is in a popular space, because you are looking to make a quick buck, or any other reason than you are undeniably interested in the space.
If you are not interested in the project, it will become boring and you will lose steam. Even if you are interested in it, there will be boring tasks to tackle. It might be that the only project you are truly interested in tackling is not an easy one (as is my case). I have a massive graveyard of failed ideas that halted at some point because I lost interest and/or realized they were dumb ideas. The only one that has lived is the one I keep coming back to (and am now working on full time).
These are not factual statements, just a reflection of my experience. Yours may differ.
Yes, as user "scroy" points out I am talking about Voxel Quest.
Bits and pieces of my story are scattered around, but here is the full thing (grab a pillow):
In around 2000-2004, I was working several jobs while attending UCSB, as a gardener, a lab monitor, and a freelance web designer. I got by working the first couple years but the last year was hard and I was disqualified from engineering. I wanted to quit school but my parents pushed me to transfer. In 2004-2006, I worked on my first big game engine while finishing my degree. I lived the majority of my time in isolation (at a school that was built over a "haunted" mental hospital of all places; I wish I was making this up: http://www.hauntedplaces.org/item/camarillo-state-mental-hos...). The initial tech demo was well received, but no crowd-funding or "early access" existed at that point, and I tried to keep the game going via donations but only got about $200 outside of family (the original people who donated were given really good rewards from my recent Kickstarter campaign though).
My parents nudged me to get a paying job (I had been out of college for 6 months at that point), so I worked for a startup in SD called Goowy Media (funded by Mark Cuban, led by Alex Bard, and acquired by AOL - I was just an employee though). Startup hours killed any hope of finishing the project but I kept working on small games and other projects in my spare time. In a way my many failures turned out to be the perfect storm. For a lot of people, I think success kills their ambitions - they tend to get into funding other peoples projects rather than their own. My failures hardened my desire for success, while helping me hone my skills.
Several years ago, I was working for my twin brother and his partner making mobile applications (we have both since left the company although I think he still might consult). The people were all nice but the job was time consuming and not very interesting for me. In spite of working long hours, I still tried to do what I could outside of work. My job was often hard, but occasionally calm, so I had some windows to work on projects. After a few brutal months of work, I got really desperate. My life was falling apart in almost every respect - my health was suffering (there were some weeks I worked 100 hours), my relationship with my girlfriend (now wife) was naturally suffering as well, I was depressed, I had just finished paying off a large amount of debt so my financial situation was only just recovering. I started testing the waters for other jobs (could not find any good fits), and started cold-emailing investors to pitch bad ideas (no responses of course).
I remember the exact moment I turned my life around. It is kind of embarrassing to say, but I was looking at myself in the bathroom mirror, and I looked like hell, and I broke down into tears (I don't often cry, or express any emotion for that matter - it takes a lot to get anything out of me). I wanted to blame my situation on anyone but myself, I wanted to feel sorry for myself, and then I realized that was exactly what was wrong with my life. Who was going to change my life if not me? F__k it, I thought, I'm reprogramming my life now.
I put in my one month notice to quit, and threw a "Hail Mary" pass to Reddit, asking for advice about what to do in my situation. To my surprise, a person from Switzerland looked over my work and offered to invest some money (he was not an investor, just had some money in savings that he was willing to loan out). I was going to Germany to meet my (at the time) girlfriend's family, and made a side trip to Switzerland to meet my investor in what felt like a clandestine James Bond meeting. I also snuck in a proposal to my wife while in Switzerland. :)
With my job severance and new investment, I began to bootstrap my game (Voxel Quest). I worked over a year on it (doubletime), and posted here on HN a few times. In fact, HN was almost solely responsible for my success up to this point, as it was one of the few communities that seemed to get what I was working on. Each time I posted to HN, I would hit the top of the front page, and investors began to take interest. Right now I pay myself about $15/hour and have a wife/kid/dogs/car/house to pay for, so choosing to stay private was not easy. I invested my life in my work, and cashing out felt too much like giving up on realizing its full potential (or I am just really bad at making financial decisions, you choose). :) In spite of turning everyone down, several have offered more than once, so there is comfort in knowing that additional options exist if needed.
I launched my Kickstarter at perhaps the worst time possible, when projects are failing left and right, press is refusing to cover many KS projects, and backers are more skeptical than ever. I was lucky to reach and exceed my goal, and I am extremely thankful to everyone here for making it happen (over 1/3 of donations came from here on HN).
Right now I am just working hard, when not procrastinating as with writing this. I try to update weekly, and each update seems to bring a bit of new interest and preorders are picking up so I am still optimistic about the way things are going, even though life is not easy at this point.
A few more tips:
Never hide your work. Make everything you do public. I went 6 months between updates, which is an eternity in project time. Strive to update weekly, no matter how small the amount of work done. It can seem time consuming but you will get better at it the more you do it.
Publicity will make you accountable for your work (or lack thereof), it will motivate you (via praise), and it will help you improve your results (via criticism).
Share your successes, even if you are not comfortable tooting your own horn. People like to hear about success, and it breeds interest in your work.
IMHO there are two reason you are not millionaire(yet):
-You need an application or game for your engine so people can play with it.
-You need to learn a little marketing. That is, you need to understand the needs of the people, so you can design around humans beings, not just around machines.
Both of these are things that I (massively) failed to address early on and am actually now striving towards.
I'm actually pretty happy at this point. If my wage were raised just slightly, and the threat of running out of (non-investor) money was not looming, I would be 100 percent happy. Wouldn't take millions, but nonetheless its good to aim high. :)
Currently working on putting out at least a minimally viable game to accompany the engine, which will be released with source this coming March (fingers crossed). I'm taking community input for the most part as to what they want to see in the game, filtered by my judgment.
Minecraft has actually been a great case study for me in terms of marketing. There are many Minecraftian games, but none have really reached the success of Minecraft (even though many clones generated millions), and you have to ask why that is. There are many theories, but mine is that:
A) Minecraft's success was a self-fulfilling prophecy (the more successful it was, the more news it generated, and thus the more sales it drove). This is not to say, at all, that any of its success was not well-deserved.
B) It appealed to the younger generation in a (say, ages 4 to 14) in a way that many people are still failing to grasp. A huge amount of marketing revolved around user-made Youtube videos. I don't think I can do this, but still it is interesting to analyze. It was immediately accessible but showed its potential for further development which is why it was so successful in pioneering the early access model.
C) Markus Persson is a likeable guy, and an entertaining read on Twitter. He created a culture around Minecraft. He is also genuine - he really takes part in the indie community, cares about what people say, and actively develops even though he no longer needs to. Another part of this is because he has befriended and surrounded himself with other interesting people, and curates interesting content. He has almost 2 million followers at this point, including the vast majority of the gaming press, so single tweets can have powerful effects.
The project is really impressive, you have some truly beautiful examples in the gallery. I see what you mean that user content creation doesn't seem easily accessible enough to hit Minecraft's level of self-marketing. But there is tremendous potential I think once you reach a more fleshed-out demo. Hope to see that soon.
Yes, I don't think I will ever achieve Minecraft's level of success, in part due to the fact that I'm designing something relatively niche and for a less broad age range. But still, I'm curious to see what the potential of it is.
Looks quite impressive, but I was wondering what language do you use to build your Voxel Engine? And the motivation for such a choice? Looking forward to your feedback.
This is all somewhat cliche advice, but as usual there is truth to be found in any advice.
Treat your life like an imperative programming language. Determine your goal, and start breaking it down into the simplest steps to achieve that goal. Many time you can simply replicate the steps others have taken (this does not mean exactly). Nothing will change until you start making the changes. Find everything you dislike in your life and determine a way out of it. There are certain things you can't do (not everyone can be an NBA star), but there are a multitude of other options. Also, be shameless. It is ok to depend on other people, promote your work, ask for favors (just don't spam). 99 percent of the time you will be rejected but don't be disheartened. More than anything else, develop some skill towards perfection so that you are less likely to be rejected. Alternately (or at minimum, in addition), find out how to market the hell out of yourself and your work. This does not mean buying ads, it means capturing minds. Find people who are better than you and take genuine interest in their work, and strive to make your work as good as theirs (they will take interest, and others will by association). Be honest in everything you do, dishonesty can destroy your future chances at anything. Be genuine, don't try to sell something you are not interested in. Don't get caught up in your own made-up principles, do the things that are proven to work.
There is no easy or guaranteed path to success, but every failure tempers you against future failures. Most successful people go for years before they produce anything successful (a common number seems to be around 8-10 years). People, like me, will say to do XYZ, but in the end even going against common advice can make you successful. Listen to everyone's advice, but weigh it against your own instinct.
Much of the advice people gave me I ignored, and it worked out for the better. This does not mean to act like you are smarter than everyone else - listen to what everyone has to say, it may help you as well.
If you find that you lose motivation or get bored with a side project then I think you really need to ask yourself why you are doing it.
We find the time and energy for those things that we place importance on. If the project isn't important to you then maybe it is time to move on. If it is important and this is just a temporary state - perhaps due to hitting a difficult part or a bit you don't enjoy dealing with - you need a strategy.
Break it down into manageable chunks. Put a date on them. Make sure however that the dates are achievable, there is no better way to become demotivated than to constantly feel you are falling behind.
If your thing hasn't shipped yet, can you get it to a release version sooner? Can you cut stuff out? Getting your project in front of other people can be a real help.
Treat the project as a first class citizen alongside your other work. Meaning that even if you can only devote 4 hours a week to it, those 4 hours are scheduled and used. Don't push them out for other work. Plan what you will do in that time, ahead of time, so you don't start to procrastinate when you sit down.
For me, a combination of these three things has proved to be successful:
1) Every day. I've seen this with working out, side projects, or whatever... I can't stick with commitments if I try for an "every other day" or "only weekdays" strategy. Has to be every day. [1]
2) Track it in a visible fashion. GitHub's contribution calendar is fantastic for this. I've got a text file named 'work-log.md' in my side project's folder, and I update and commit that file whenever I spend time on my side project-- even if all that I did that day was research, rather than coding. My current high score/longest streak is 59 days in a row, and wanting to push that higher is incredibly motivating. With workouts, some sort of fitness tracker serves the same purpose.
3) I don't beat myself up too long or hard about screwing up. There are some folks whose "longest streak" on GitHub is 365 days or more. Good for them! I'm always sad when I realize I've missed a day, and I often take a break for a week or two once that happens, but I've never even thought about just quitting. Just motivates me to try and do better next time.
[1] One exception to this was biking to work: I never really biked on the weekends, but it didn't prove to be a problem. Probably because commuting by bike was so hard to forget about.
You will lose steam at some point. Go with the flow; take a break, try something else, come back to what matters. I put del.icio.us down for 6 months very early on.
Is that you Joshua Schachter? Del.icio.us was one of the greatest, and most underrated ideas to come out of the early web. For a while I would use del.icio.us as a search engine because it often gave better results than Google. If you can beat Google in search even in a limited area you are onto something big. (Am I remembering correctly that del.icio.us "static" pages would actually show as top Google hits?) Sadly del.icio.us has languished over the years under various owners. I still use it though and have a few thousand links saved.
I think it might be interesting to note that different people have different motivations for "side projects" (as well as different definitions for side projects!).
For someone, a side project might be about solving arbitrary problems such as trying to write a Tetris clone under, say 1024 bytes on x86-64 Linux machine -- something which has absolutely no real world relevance whatsoever, while for someone else that'd make no sense and be waste of time. Probably they'd much rather build something much more concrete, say a real product (say a web app) actual people can, and hopefully will use.
Perhaps it is a meaningless and arbitrary attempt at making distinctions, but I find it relevant for myself as I certainly fall under the first example, while many here in HN fall under the second. I feel this definitely plays a role in what we consider "side projects" and how we deal with them.
Since you mentioned it, me and at least 2 other people have written Tetris in 256 bytes. I used 80286 assembly and you probably can't get away with that these days - even when I did, it was already old. 64 bit code will probably be much bigger. But the main trick besides the right instruction set is to use XOR for drawing, erasing, and collision checks. Have fun!
I agree with you. It's a matter of taste and purpose, and this is dynamic, so you'll probably want to see them all in time.
My motivation has always been focused on deliberate practice (i.e., a fancy way to approach personal and professional development). I have been through the app-based MVP and the personal mind-dump. I recently started a new blog, which intends to be a mixture of the two: personal interest and passion for Artificial Intelligence, and an approach to consulting:
I view my side projects as the main work, and anything else as merely a way of supporting them. Also, I have enough side projects that if I lose interest in one I can switch to another.
Why? The work you do in your spare time can directly (by reusing libraries you build) or indirectly (learning a new language, framework, etc) improve your performance at work.
Only reason you should ever feel guilty is if your side projects are meant to directly compete with the work you do at work. In that case, I would say it's a bit unethical.
I assume it's because he/she is spending time doing the side projects, time which could instead be spent doing whatever he does for his job.
I feel like this is actually one of the things I really hate about being paid salary. I either feel guilty for not working enough or just hate not being able to spend time doing other things.
Don't you think that companies should support such personal deeds? This is very common in the electronics community, where expensive instruments are needed and workers find it difficult to buy them themselves. Eventually, motivated and eager-to-keep-learning employees are the best assets that a company can have.
I promise you that your company doesn't feel the same about you (or any of your coworkers, for that matter). When it comes to employment, loyalty died out many years ago.
Set small goals for yourself that have a visible or measurable impact. Each time you complete one, you'll feel a sense of reward. The important thing is to work with your psychology not fight it.
What I've found to be effective is to have a list of goals roughly by week, for the next few months, and then each week to assign myself a small list of tasks for each day. I also try to mix up the type of tasks over each day -- some are fun and I'm excited to do them, some are more tedious but have to be done. So when I do some tedious work I reward myself with the fun tasks.
When I fail to meet my goals I allow myself to get angry with myself -- almost a disappointed self-hatred. But only for a few minutes, and then I move on. Perhaps some people will disagree with this technique, and might suggest only positive self-reenforcement, but if you're not totally honest with yourself it's going to be tough to keep yourself on track.
Whatever you do, you should definitely start by examining your goals and motivations for working on your project, since everything entirely depends on these.
Don't be afraid to drop a project. I tend to have a handful of projects going at any one time. A good project will stand out and it will pull you through to completion. Pretty much all of my significant jobs were spun out of my side projects. My current job started as a side project that I prototyped in a few weeks. A company was built around it and now our company is part of Google. This. https://www.youtube.com/watch?v=h2OfQdYrHRs
Take note of things that inspire you. For me, books or other people's projects. Show your work to your friends and try to convince your friends to work on projects with you.
Find programming languages / environments that make it easy to spin up a simple project without too much overhead. Start small. Last I counted, I have about 140 folders in my dev directory. Each one has a small project I started up. One turned into a successful company. Another won a DARPA challenge. A few others were released in various forms. But most got dropped because they just weren't as cool as something else. And I think dropping projects isn't just ok, it's great fun and will help you find that project that's worth completing.
"How do you keep yourself pushing code when life gets busy or you just get bored?"
I don't. When life gets busy with other I am busy and the other people are my priority. If you are with your family and you are not really there, you will feel guilty later on work and not be there either.
What Steve could do after years of training(and reading thousands of books and learning from others) is probably not what a normal person could do. But they can apply some of the ideas.
In my experience, people from the US tend to work to much, but not really work. e.g When a German person works, he works, do not distract him because he will get upset.
I had never ever got bored in my entire life. I have always done whatever I wanted to do. Life has been tough to me at some times, but always in the sense of the Lion on the wild, that if he does not hunt, he just dies.
It is just so easy today to choose safety, but also living on a cage.
Go to the zoo and look at the animals there. Have you ever seen an animal(lions, leopards, elephants) in the wild?
It is completely different. It is the same with people.
What do you think a side project is? I have tons of them, but none of them feel like work to me. I get great joy out of them whenever I work on them (which is quite a bit).
I suppose it's a bit of a catch-22. If side projects were like this for everyone, one wouldn't be asking how to motivate oneself.
I enjoy programming, and making things, but my side projects are the only code I write which really lets me be creative. So I keep going because I want to like what I do.
Also,sometimes the only thing keeping me going is the sunk cost fallacy. I don't want to just give up on something I spent months or years on.
But one think that did help me out was learning to recognize the difference between moving forward and moving in circles. Not wasting a lot of time refactoring stuff - especially if a lot of time has passed - because your tastes or mood has changed. I have one project (a web project, nothing anyone would care about) that I literally rebuilt from the ground up at least three times already, just because I got sick of the current framework I was using. I wasted a lot of time moving in circles because I didn't actually want to finish the project, but I did want to keep working on it.
I just finished with a side project. I knew going in that I would lose motivation for reasons left and right, even though it's the right project for me to work on. In order to keep up my motivation, I started "Side Projects Dinner" - I would make dinner for my friends every other week, and they would give me feedback on my project. It worked great, and we've had quite a lot of fun. And of course, my friends are also getting feedback on their own projects and thinking of new project ideas. Highly recommended!
Great idea about sharing the ideas around. I can use this idea, but currently 100% of my local friends are non-technical, still it'd be interesting to show an idea to friends. Friend-development approach?
A super easy way to keep yourself accountable when doing something like this is with the contribution graph on Github. My desire to not break my streak keeps me working on my projects every day.
That works for some, but not others. I have gone weeks and once even months with not doing a thing (intentionally). Distancing myself from it has always worked out well for me.
I get energized about my side project when I get suggestions, comments, or other feedback from users. I can go months without doing anything and then I'll get one person asking for a feature or change and I'll work for a few hours or days to get it done.
My advice is to make is easy for customers / users to give you feedback. Use a support ticket system and provide email links on your homepage.
Not just bug reports and feature requests. Compliments do a little wonder in fueling motivation, so the more things you give people to comment on, the greater the chances of hearing back will be.
Keep a public work log, publish your progress and encourage feedback. Not just commit history on GitHub, something a bit more humane and substantial. Something to look back and see how much you've accomplished so far.
How? By wanting to work on things that you want to work on, more than you want to watch TV, or play a video game, or do anything else.
The thing it came down to for me is understanding how incredibly rewarding it is to create cool things that I use. For example, the digital situation of Chess really sucks in the work right now, so for the last few months I've devoted about 10 to 15 hours a week to created a catch all solution to playing chess online and on your phone. It's gotten to the point where I can now use it to play with my brother, dad, sister and friends. As a person that lives a fair ways away from my family, it's really rewarding to be able to do something like that. I love getting input from them, and just being able to bond with them over something simple.
As far as the motivation, and not just the desire, it also came down to understanding how I work. I burn out quickly if I work on something a ton, and so I have an incredibly strict schedule during the week, and then completely leave the weekends open. Essentially, I kind of made a compromise with my personality so that I ended up happier, and my professional life came out ahead.
In addition to that, I educated myself. I realized what I wanted to be in 40 years, and I found out how other really smart people did it. The books below really had a major influence on me in motivating myself to work harder at everything, and to motivate me to work on side projects.
Lastly, and for myself this is huge, I surrounded myself by people I wanted to become. It's really really really hard to do stuff on your own, so I worked hard to become friends with smarter people than me, that challenged me at life, for lack of a better way to put it. I know stuff that like may sound a little cliché, but it really is one of the most rewarding things I've been able to do in my life.
Book List:
1. Without their permission. Alexis Ohanian
2. Outliers. Malcolm Gladwell
3. How to Win Friends and Influence People. Dale Carnegie
4. Hackers and Painters. Paul Graham
Perhaps a better (or at least related) question is: how does one find the time to put into side projects on top of staying competitive as a programmer in an environment where 45-55 hour weeks are customary and expected, and also achieve some kind of work/life balance involving significant others and children?
I challenge anyone to show that the math for this works out. Everyone I know who has put effective effort into so-called 'side projects' is either living off saved wealth, working 20-30 hours/week on lucrative consulting contracts, and/or has an SO that works their ass off in some all-consuming, soul-crushing, high-paying career.
The reason the math doesn't work out is that you're using the wrong math. If my job expected 55 hours/week from me, I'd look for another job. If life balance is really important for you, look for a job that allows you to achieve it.
If you're spending all day in the office or with your clients you're going to be burned out and you won't have the energy to get down and dirty into the denser parts of your own project.
- Trello, and break it down to the most granular set of tasks that you can.
- Put some real easy ones in a list called "low-hanging fruit"
- When motivation is low, pick one or two off to get going...if motivation doesn't come back that day, just rst. But often the mere act of getting going will move you along
Like others here, if I lose steam on one, I switch to another. The novelty effect is real. To support switching though I have to use a notebook. As I get to the point where a project is feeling more drag than energizing, I write down everything about it that I have in my head at that point into my notebook. Then I find another project I had left in that state, read the page(s) on it, and spin it up.
Still, my biggest problem isn't losing steam its simply too many choices. I need to get better at deciding I'm not going to do a project and putting it down for good.
Anything larger than a small project will need to be put aside for a while from time to time (for whatever reason), and I've found that making it easy to pick it up again is one of the most important things you can do.
My strategy for this (admittedly most suitable for software projects):
1) Write down your large, fantastic vision for the finished, complete project.
2) Write down the smallest possible feature that would bring you some utility. MVP, if you like.
3) Take this requirements and write an automated test at the highest level of abstraction possible. It should almost read like the MVP requirement you just formulated. That doesn't have to mean BDD, just something you can read easily.
4) Implement until the test passes.
5) Go to 2.
What I've found over the years is:
- Quickly reaching milestones of utility are key for keeping motivation while working. This is obvious, of course.
- The written down vision brings the motivation and big picture plan back when picking things up: Get your blood pumping again!
- The automated tests help keep implementation going when your drive falters. What should I do know? You should just make the test pass. Nothing harder than that. No need to think super hard. Just try to make it pass.
- The automated tests help you get hacking again without the immediate fear of breaking things: Get the ball rolling again, quickly and easily!
- The automated tests also serve as your requirement specification so far: You can easily see what already works.
Side projects are so important, and one should make it as easy as possible to sustain and restart them! Good luck!
I'm a bit confused by this approach. Is it related to some established design approach or principles?
What is MVP or BDD? Could you provide an example of your process?
Would it be similar to this example?
1. I want to put out a rpg for iOS.
2. Implement a pokemon style battle system -> when health < 0, NPC dies.
3. Not sure where automation fits in?
4. Code it and test until it works.
5. Move on to adding experience when killing an enemy, etc.
MVP occurs a lot on Hacker News, in that context meaning Minimum Viable Product, or the least amount of work you must do to make it useful for users/customers.
BDD in the software context means Behaviour-Driven Design and is an opinionated way of writing tests.
With regards to step 3 in your example: Sometimes it can be challenging to design automated tests for certain functionality.
For a game, it could be scripting "fake" user input that is supposed to have a certain end result, and then verify that that end result actually occurred. E.g., the player makes a few good moves, then a few bad moves that should cause health to drop below 0, then check that the player actually died.
Automated tests are a life saver, and often it pays off in the end to learn how to write them for almost any functional requirement.
One thing that works for me is to get lots of external feedback on my project. If at least one other person beside myself has some interest/investment into my project I am a lot more inclined to continue working on it. When I am the only one with interest... Well, I tend to lose motivation pretty quickly.
I've come to strive for what I call the minimum overhead principle. If I have a project going on I make it as easy as possible to continue (editor open, pad and paper at hand etc) and try to do at least a few minutes per day. Sometimes it's only those few minutes and sometimes I can get a few hours in. And those add up.
For personal software projects I've discarded all engineering principles and do what I would call structured hacking. Everything is neat and tidy but only up to a point that it lets me progress swiftly.
Lots of great answers here. One I don't see is to work with somebody else on the project. Holding yourself accountable to somebody else can be a lot more motivating. In addition, it's hard to get a pat on the back from an end user for doing some things, like unit testing or setting up an LLC, but with a parter these baby steps seem more significant.
If you choose to work solo, bring in a friend - preferably who is working on their own side project - to mentor you. Try scheduling work time together or swapping expertise (e.g. design feedback or code review). I worked on a project in parallel with a friend's project, and we did IDoneThis updates to each other every day. That accountability helped to motivate both of us, and rather than give up when we got stuck, we had somebody to talk through issues with.
An organizatoinal tip is to set up a personal kanban and break everything that you are doing into tasks. Jumping into a large project that takes months can seem like a neverending tunnel, but being able to see incremental progress in terms of completed cards every day can be motivating. When you start to lose focus, look back at the cards and see what you are supposed to be working on or pick another card.
Finally, don't lose sight of the end user - build something that people love, and keep dialogue with your customers before you launch the product. Get feedback, shadow them, identify pain points, grab coffee - a project become a lot more real when you humanize the end user.
I tweak my motivation setup, but for me, currently:
1) http://thinklegend.com/commit/ - I have "do 30 min X project per day", which isn't much but usually the hard part is starting. It's easy to kick out 30 minutes work, feel good and add a link to the chain.
2) Yesterday I itemised a bunch of push and pull factors about my current job and my side project. We regularly build amazing things for customers but forget to do what's important to us. We get caught up in "urgent" and forget about "important".
3) Startup podcasts. In the absence of a mastermind (Anyone else in Johannesburg?) they keep me in the mindset of building. They're like a small daily escape into a world of possibility. I listen while driving, so after the work-day drudgery I'm reminded of what I'm working towards.
Make something that can be built and deployed before you get bored[1]. Once you start attracting users, it's easy to keep going on it.
[1] Which may mean that the MVP takes a day to build, or the project is something that will be sufficiently useful for you that you can work on it for six months without getting bored.
I've found that it helps me when I get feedback, like I finish some major functionality or feature, I feel fantastic when I see it work and during my working time, I think about that feature and can't wait to get back to it. When I stop in the middle where there is no discernible change or a feature is not fully implemented, when it passes my mind during work or free time, I think about how broken it is, and I feel like I'm heading back to a broken bike, which is not too exciting.
It's hard, especially when a particular feature needs days/weeks of effort. For that sort of thing, you just need to persistent, I guess.
Keep a commit streak. My current streak is at 153 days[1]. I've seen that I have grown as a developer, learning new languages and writing better code. It's awesome that git quantifies commits and puts it on a graph. I've adapted this from Seinfeld's productivity strategy and has played a large part in my streak[2].
Pure determination. I work more hours than any person should, or that is even healthy but I do not want to go to my grave having not fulfilled my dream and personal goal of having a company of my own.
Based on my experience of running the site over a year now, there is nothing wrong with side projects that do not become "success" (whatever the definition of your success may be). The most important part is the building it and shipping that v1.0 (or v0.1.. whatever).
When I have a hard time getting myself to do anything, I try to think about why I should do something from different points of view at different levels.
What I mean by this is that you need to rationalize why doing something is important to you in terms of its meaningfulness and impactfulness.
For example, let's say I'm a web developer with zero knowledge of building a mobile app. And I want to build a mobile game in ios that doesn't exist in the world yet. When it comes to pushing myself to work on such an app, I remind myself that I want to become a programmer with versatile skill sets desired by many employers.
That will be your high level goal.
However, this goal might be too general and isn't convincing enough for you to keep working on the project. So, let's make your goal more specific. So, in this case, it can be that you are super interested in learning about technical details behind implementing the game whether it is about designing the db relations, software architecture and etc.
That will be your middle level goal.
Finally, if none of them made you want to work on the project, let's dig deeper and make a goal really personal to you. It can be something like you want to build it because you want to play this game but you cannot find anything like it from anywhere else. That will be your low level goal.
I've been working on mine (bit.ly/1rqJ0NG) for over 7 years. There are a few things that keep me going -
- The first is that while I've been using it (or a version of it) for about 5 years, there are a lot of features I want that are still missing.
- Second is wanting to see it through. There are loads (over 20) of unfinished apps in my \Dev folder. I think some of them are epic ideas, but decided to focus on one and see it through.
- Third is to make some cash. That's a nice to have, and I'm ok with it not making anything, because of reason 4 -
- I love working on it. It's rewarding like nothing else is. I once told a friend (quite seriously) that solving some hard problem in it was better than sex. He told me I was doing sex wrong. Maybe... but I can stare at a piece of code for ages after writing it, if I think it's good. Narcissistic, I suppose, and probably deluded, too. But there it is.
- Fifth, and last, I've learnt more from it than any other (single) project I've ever done - privately or professionally. Not just code, the cloud, document v. relational v. graph dbs, but also the not-so-great value of TDD, the value of DevOps, and arguably the most important, the value of just not accruing technical debt, ever, at all. If you gave me another minute I'll think of a million other things it taught me.
I try to remind myself that it is in the last part of a project (the 80% effort that appears only giving 20% of the result) that I truly learn something.
Not finishing projects is a really bad habit, even for side-projects. Try to set a goal of at least publishing your project in some meaningful form - maybe it is just a blog or a forum posting.
Also be careful of vetting your ideas before you start. Make notes, paper prototypes, drawings or something that allows you to better reflect on and filter your ideas.
Because I make things I WANT TO USE!! I'm not making them to put on my resume, or to show people, I'm making things that I actually want to use and they don't exist yet and they would make my life better/easier/whatever. Sometimes I show others and they like them because if I want something made generally there are others that want something like that as well. But sometimes I don't release them as well. But I find that to keep me motivated.
The first question you should ask is, if you can't keep motivated, why are you doing it?
For me, side projects are things I do because I'm interested in them and have free time to invest. If I don't, I don't work on the project, and it's no big deal. Yeah, sometimes I'd love to have more time, but oh well.
It'd be different if I made money off of them, but I don't. To me, that would make it a job, and not a side project.
Simple: I do my 'real' job and then I am reminded why I don't want to work for other people. That's insanely motivating. For example, if your boss has some project and design which which you disagree and you're powerless to improve it -- that's great motivation to do it the 'right' way on your own project. My side project work is often passive aggressive responses to my employers.
I have too faced demotivation when it comes to side-projects. Until recently (64 days to be exact) I have started spending my morning's first 3 hours on my side projects.. and these side projects are not to make any extra pocket money.. but just that it is interesting and I get excited to learn something new while doing something which is interesting.
I get motivated even more seeing the github streak (github.com/rajeshvaya) and it a very small measure which helps me going as well.. everyday for past 64 days I have made sure I spend my first 3 hours of my morning time (even on weekends.. I make sure I get up early)
after you get this initial start it is kind of self-motivating which will keep you moving forward.
What i think is just 2 important things to get this:
1. Work on the projects which interest you and not because other people think its cool or just to make little amount of money
2. Try to spend first few hours of morning on your side project rather than ad-hoc amount of time and different time-span of day. Keep it regular, same time just like gym
Ship quick and get users. My passion project [1] started as a weekend endeavor, I started hosting it on campus at school immediately and the users began rolling in. Now it's got an install base of about 5 that I know of and a userbase in the hundreds (it's popular with the VPN and darknet crowds). Having other people besides me who care about the project is the sole thing that has kept me interested and pushing. Just make sure to sell your project hard to your friends and family, and make sure that you never stop being a user.
For things that are fun to make but nobody would want to use, beats me. Those things I usually play with until I run out of steam, at which point I figure I've learned what I'm going to learn from them and move on.
The greatest motivator is to think about the end result. This applies to other will-power consuming objectives like losing weight.
You should think about what you will achieve in the end. Especially if the side project is one that you can make use of yourself, the effect is even bigger since you will have immediate benefits from the outcome.
This. Don't wait until everything is perfect. If your side project does a barely minimum to be usable, just release it somewhere (if it's an open source project) or deploy it and send a message for other people to try it.
Other people's feedback is a huge factor in being motivated.
I got a full-time job and my motivation magically appeared for my side projects.
Before I was basically a bum that occasionally did contract work... now I work 40 hrs at my job, and 20 hrs at a coworking space on my startup. My hatred for the 9-5 job is what motivates me.
Work on something you like. Don't care about money or fame.
Use your side project as your playground to learn new things by doing mini projects within your side project:
- Want to learn about testing? Add test coverage.
- Want to learn about webcomponents? Find a way to integrate it.
You don't have to finish all the mini projects. Dropping something is fine, you still have the experience and knowledge!
What really helped for me in keeping steam is publishing the source of my side projects on GitHub. The idea that someone else uses your code is very satisfying. Once some traction comes, the pull requests and issues start coming in and it gets even more fun.
And when you get bored? No problem, just switch to a different side project or think of a new mini project.
The best kinds of side projects are the fun ones. When you really enjoy working on something, you really don't need to "stay motivated".
I love to code and I love to build things, and I would lose my sanity if there was only one thing I ever worked on. Plus, one of the best things about side projects is that there's usually no pressure to really get it done, so when I load my workspace for a side project, I'm always excited to get started, because I know nothing really important depends on it. And unsurprisingly, I've learned so much from random fun stuff on the side that I would never have learned otherwise.
Combine more projects into the same codebase. With games this is easy - make a "multicart" game that has more than one game in the same program.
Once that is done, you always have the whole portfolio of unfinished-yet-related things sitting there. If you can't work on any of them, you start a new one, but eventually you hit the point where you can see that you're just redoing an old one. You don't get stuck on overengineering it because the context of it is already as a small part of a whole. If one of them proves to be a really good idea and more deserving of attention, you chop it out of the original context.
Maybe part of the problem is your framing: "pushing code."
My projects don't involve writing much code, but there are always different things I can be working on. I can be working on the visual look of the website. I can be working on firming up my definition of what the project is about. I can be working on talking to people and recruiting prospective audience members. Etc.
If pushing code is turning stale, what other thing can you do to further the project? Those other parts matter and you may be more able to address some other piece of it at some point where "pushing code" is the last thing you feel like doing.
I'm currently reading "Mini Habits: Smaller Habits, Bigger Results" and have to say it's could work for me. I've battled with starting/stopping side projects. This book presents an interesting argument in that willpower and making "stupid simple" tasks that you do every day (his example is one pushup) is the key to building a habit since repetition is what is necessary to build a true habit.
Oh... I also find that consistency to be very important. Rather than randomly using free time... Pick a day or two of the week and block out a bit of time for the project. This gives you a reason to not just procrastinate.
What keeps me going is the awareness that my project is worthwhile. It's got science fiction level worthwhileness. Ya, that sums up the motivation source right there.
I do it right. I take my time. Spend much time thinking about the next step. Draw and stuff. Spent like 12 years experimenting with different geometry games. Looking for the one that feels right.
I have this stack of project sketchbooks. Sometimes I look at the stack and think "I'm nuts".
The final climax seems close.
Sometimes I wish a bunch of enthusiastic highschool kids would take my project over, but not quite yet.
Also there's bucks in it. It's got material worth.
It's good to always have a problem in mind from that side project. It might get a little tricky trying to balance that problem in your head with your day job problems, but doing so may help keep up the steam.
I build things that I need, so the act of me fulfilling that need is enough for me to carry on.
Unfortunately I don't always have enough time to push code every day, but that doesn't mean I can't answer emails, add items to Trello and be active in the Gitter chatroom etc.
For those interested, I'm currently working on Cachet, an open source replacement for StatusPage.io (https://github.com/cachethq/cachet)
Today I created a CrowdIn project for translating the language files into other languages :)
Do interesting projects? If it's boring, I usually don't do it (unless it's some sort of educational project I picked to learn new tech, but those tend to be pretty short)
I worked on a book about Node.js and Backbone.js last year as a side project. Keeping motivation is easier if you have some rythm. For the book, I wrote mostly on Friday evening and Saturday/Sunday mornings. From publication to first sales, it took much time. So, in that time, I was missing mostly feedback, what others think about my project. For my new sideproejct, a meetup group about Arduino, I find it great to have regular feedback from a "known" audience.
I imagine the money this new crazy idea is gonna bring in; and how I'm going to use that 'windfall' to fund the new crazy idea I can't stop thinking about..
I have yet to have one of 'side' projects make me rich enough to fund my next side project, though... Really the side projects just keep me fresh and expose me to new technologies concepts in a way that I would not get from client work.
I've recently started sending my todo lists to my friends and asked them to do the same. The progress I've made is substantial. Tasks I haven't finished in years were done in a week, and I finished significantly more work than I set out to do. One of my side projects which has been sitting idle for over a year will be finished this weekend.
I owe my career, and as a result my means and lifestyle to the Internet. In turn I like to do things to fix the Internet and make it better for everyone else.
It also helps me to work on things that I think really matter. For some people that is building an easier to use templating engine. For me, it's building security and reliability.
I have a Big Board in my room with my goals listed. It helps when you visually reinforce yourself.
Also I have a physical calendar in my room. I want to go to the gym 70% of days in the year so cross a day off each time I do cardio/lift. I stole this technique from Jerry Seinfeld who used it for writing jokes :)
I have 2 criteria for picking an idea I actually want to work on:
- One is how many days consecutively am I still thinking about the idea without forcing myself
- Second is even if no one uses it and everything about it's progress is shitty, will I still want to keep working on it?
It obviously depends on the type of side project, but if you can find users, that can be a big motivator to keep on working. Getting emails from people who enjoy your work is very effective at motivating you to continue.
I do things that truly I am passionate about. I don't work on side projects because it's "popular" or it's an easy dollar but because the topic they are concerning are ones I actually care about.
Use a technology that you would like to learn instead of a technology you already know. If you lose motivation in the project, you at least have the motivation of learning a new skill.
In my free time, I mostly do whatever I feel like, so I experiment on random projects - I don't necessarily care whether I finish them, but I have fun and learn new things.
Do something relevant that you really want to do. That means don't pick a project because it's easy, but pick one that passionates you, no matter how hard.
Set a goal of making a bit of progress every day. Even 10-15 minutes a day adds up over time, and it keeps you in the habit of making ongoing improvements.
(Also worth noting that this isn't particularly bad, in the grand scheme of things. When you are dejected the rose colored glasses come off -- so if you want to keep motivated, build that emotion from reasons that are true even when the alternatives seem quite good.)
Find the easiest thing that you are legitimately passionate about. Do not work on a project because it is in a popular space, because you are looking to make a quick buck, or any other reason than you are undeniably interested in the space.
If you are not interested in the project, it will become boring and you will lose steam. Even if you are interested in it, there will be boring tasks to tackle. It might be that the only project you are truly interested in tackling is not an easy one (as is my case). I have a massive graveyard of failed ideas that halted at some point because I lost interest and/or realized they were dumb ideas. The only one that has lived is the one I keep coming back to (and am now working on full time).
These are not factual statements, just a reflection of my experience. Yours may differ.