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'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.
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.
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.
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.
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)
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.
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.
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.
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.
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.
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.
(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.)
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.
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 :)
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:
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.
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.
1. Get paid for side projects (bad motivation but better than nothing for a boring project).
2. Since programming is a hobby and also a day job, make hobby part of it fun. Make your current side projects fun and engaging, drop when they become boring.
3. A side project which is used by people becomes a responsibility, sometimes you can throw it away, or pass over to someone else to manage. That's a relief. Sometimes being needed by people can give some motivation.
4. If stuck on an unpaid side project you cannot drop (or as well, have boring regular job project which you cannot drop for obvious reasons), make your side project relaxing and fun. Make sure you do your fun hobby often to avoid burning out.
Side projects cannot last long, while you have steam to push it on. If, say, two months passed and thing isn't ready -- make a decision, do you want to keep it, will someone want or need it, then continue or drop it and find a new toy, which is fun again.
144 comments
[ 3.1 ms ] story [ 154 ms ] threadFigure out how / when / where you're going to release them, and work towards that moment.
Other people's feedback is a huge factor in being motivated.
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.
(https://www.dropbox.com/s/98kngmtwzrsmvjg/Screenshot%202014-...)
(https://www.dropbox.com/s/v5czzto5zfzz7rw/Screenshot%202014-...)
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
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 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.
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.
https://unicornfree.com/2014/dont-write-1000-words-a-day
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 :)
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:
http://ai-maker.com/
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.
Not over working at day job.
2. Since programming is a hobby and also a day job, make hobby part of it fun. Make your current side projects fun and engaging, drop when they become boring.
3. A side project which is used by people becomes a responsibility, sometimes you can throw it away, or pass over to someone else to manage. That's a relief. Sometimes being needed by people can give some motivation.
4. If stuck on an unpaid side project you cannot drop (or as well, have boring regular job project which you cannot drop for obvious reasons), make your side project relaxing and fun. Make sure you do your fun hobby often to avoid burning out.
Side projects cannot last long, while you have steam to push it on. If, say, two months passed and thing isn't ready -- make a decision, do you want to keep it, will someone want or need it, then continue or drop it and find a new toy, which is fun again.