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.
(https://www.dropbox.com/s/98kngmtwzrsmvjg/Screenshot%202014-...)
(https://www.dropbox.com/s/v5czzto5zfzz7rw/Screenshot%202014-...)
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.
Sounds fascinating. Could you give more details? What was your sideproject? What did you do to turn it into a unicorn job? Thanks in advance.
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.
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.
Steve Pavlina explains it better than I do: http://www.stevepavlina.com/blog/2014/12/130-days-off-per-ye...
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.
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.
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.
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:
Programmers tend to say: ABC, which stands for Always Be Coding. I apply it to anything I like and that I intend to get better at.
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.
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!
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.
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.
Not over working at day job.
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.
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.
Other people's feedback is a huge factor in being motivated.
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 :)
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.
We turned our side project into our main source of revenue, you can read some of that in the first chapter of the book I wrote based on that story here http://rachelandrew.co.uk/archives/2014/03/21/chapter-1-the-...
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.
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.
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.
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.
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
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.
Be religious about setting aside your own time
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.
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.
Good luck!
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.
[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.
Figure out how / when / where you're going to release them, and work towards that moment.
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.
It's hard to see value in something until you add it, this is why your greatest achievements will be hard to see moving forward.
[2] http://lifehacker.com/281626/jerry-seinfelds-productivity-se...
(disclaimer - I maintain the site)
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).
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.
- 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.
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.
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.
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
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.
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.
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.
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.
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.
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.
http://www.amazon.com/Mini-Habits-Smaller-Bigger-Results-ebo...
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.
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 :)
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.
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.
It doesn't matter if it's two our daily or two days a month. If you are working on something you like you will prioritize it.
So don't be afraid to kill a project that you don't want to prioritize.
2. I structure them in sprints.
3. I have a clear life cycle for them (plan, implement, promote, evaluate) that feeds into 1 and 2 .
This means that it always feels possible and rewarding to work on projects. Hack your limbic system! ;-)
I have nothing else to do nor I'm likely to achieve anything else.
If i'm willing to endure major pain, it's no longer a side project.
1) Money 2) Fun
As simple as that :)