Ask HN: How can I pick a side project and stick with it?

686 points by corecoder ↗ HN
I'm a web developer and DevOps engineer. I know a few languages and frameworks very well, I can find my way around with a good deal of other languages and frameworks, and I'd like to learn a lot more.

My problem is that I cannot seem to be able to pick a project (any project) and stick with it long enough to do any meaningful progress, let alone finishing it. It's been several years since I've managed to work on a side project for more than two days continually.

I sit before the computer thinking: I know! I'll write a roguelike in X! Five minutes later, I'm thinking: fuck roguelikes! I'll write a graphical solitar card game with Y! Five minutes later, I don't care for it anymore, and would rather write an isomorphic strategy game in Z.

The same thing happens with tools I might need, applications I think about, experimental stuff, etc.

Has anyone else experienced this, and, more importantly, found their way out? How?

373 comments

[ 6.4 ms ] story [ 788 ms ] thread
yep. my solution uas simple. listen to my attention. if it's boring (at that instant), why stay? eventually i found and completed several projects, the need or interest driving me. and sometimes, i pick something up off the backburner and bring it closer to fruition.
This is a great question and one that often goes unnoticed: I observe my optimal work habits and patterns, instead of seeing them as a drawback, how to turn it advantageous?

If your optimal flow is 2-3 days spurts on mini projects then think of a big project and break it down into these mini-projects. If you can build one power ranger, you can build the mega ranger, just thoughtfully break the tasks into pieces first.

More importantly, you need a topic you are passionate about, and then you can use all your computer knowhow to make tools with that domain as a central focus or backbone. Again, you don't even have to stick with the same toolkit as long as you can break your work into meaningful mini projects.

Celebrate and rejoice when you complete mini projects, and keep your eye on how satisfying it will be to make big projects come perfectly together. If it took many people many days to build the pyramids, it will probably take one person a while to build one. I don't think that's unreasonable, the key is staying motivated. Come to the desert and leave with a pyramid

Find something that bothers you in your everyday life and make a MVP that solves that problem.
(comment deleted)
It's pretty normal. Figure out first what you want from each side project. If your goal is to learn or play around with new "X" then it's fine to half-ass it, build the fun parts and then never look at it again. If you want to try and build a business and make money on the side then this is usually the time to not try out new "X" and instead stick to boring tech you know well.

Edit: for practical tips on keeping some momentum, just start with a tiny amount each day, like just 30-40 minutes after work or before. The next week you can add a little more ect.

Maybe you need to examine what your true goal is. Why do you want a side project? Are you doing it because you feel like you are supposed to have side projects, or because you actually want to accomplish a goal? If it's the former, you could try to align the side project with another goal of yours - say learning some new language or framework.

If you are just trying to build a portfolio you can come up with a (small) "SMART" goal, and commit to completing it. After you reach the milestone you can make a conscious decision whether to continue or not - but either way you have _something_ completed.

https://en.wikipedia.org/wiki/SMART_criteria

> Maybe you need to examine what your true goal is.

I think that's absolutely the most important factor here. People don't finish things for a variety of reasons.

Perfectionism is a big one. It's tied to a fear of failure that manifests as losing interest. If the root cause is perfectionist tendencies, one thing that can help is to collaborate with others. Just doing something for someone, helping them out in some way will often de-fang the perfectionism and self-criticism and drive you towards something tangible.

It could also be boredom. If you're doing X at work day-after-day, maybe it's not a great idea to also do X as a side-project?

I personally am allergic to SMART criteria-- too much association with corporate performance evaluation fuckery, it kills motivation and creativity for lots of people.

With portfolios it's perfectly ok to take existing ideas. Especially for learning purposes there is no way around duplication.
Use your skills for something or someone fighting for a cause you care as a person? Inner motivation would come naturally, experts say.
You’ve already done step one: realise the pattern. Step two is don’t do the new project. See it for what it is, not a great new idea, but another step down the road you’ve been walking down for years.

Just because an idea pops into your brain, doesn’t mean you owe it anything.

Something that may help is picking a smaller project, so small you could do it in a day or two. Build up some endurance over time.

Good luck

This is fantastic advice.

Just because we could possibly code some amazing concept project, doesn't mean we'd enjoy it. Or that it wouldn't end up causing us huge amounts of stress.

A lot of us are stuck at home, bouncing off the walls and feeling like we're not doing anything.

THAT IS OK!

We're in a world that is both scary and new, we don't know quite what is going on, and we need time and effort to process that. By "effort" I mean intellectual, spiritual, physical, and emotional. (If you're not religious, think of a workout in a gym: spiritual effort is stretching and flexibility, and emotional effort is strength/weights. Or perhaps that spiritual is subconscious and long-term, while emotional is conscious and shorter-term.)

tl;dr - too much heavy shit happening, don't overburden your head.

It's funny because I did exactly that (sticking to one project instead of jumping from idea to idea) because I had the same problem as the OP, but these days I'm getting the feeling this is also counterproductive. I spent a lot of time on a single project, learned a lot of things along the way, but progress was very very slow mainly because it started to feel like 'work'.

For me, these kinds of side-projects are all about learning new stuff, and sometimes to scratch some really small personal itch. So what I try to do now is to find projects that can be used a platform for trying out new stuff. For example, I've been working on an iOS game since 2014, but by now actually finishing it so people can play it is completely secondary to the personal satisfaction of incrementally refactoring and repurposing parts of the engine, using techniques and technologies that interest me right now. Becase even that started to feel like work at some point, I decided to also start some other side-projects that go in completely different directions, so I can switch depending on my mood and make slow but steady progress in each of them. I try to also incorporate some technology/techniques that pop up around my daytime job but which I never have time to explore at the office, some of that stuff is super interesting but I cannot justify spending company time on it.

I think the main advice I have for the OP is to find one or two interesting projects that are diverse enough to be a platform for experimentation, instead of some very narrowly focussed problem that will inevitably start to become boring sooner or later. Unless you really want to create a product or something to show off with, the main purpose should be personal development/intellectual satisfaction, not reaching some predetermined goal.

> find one or two interesting projects that are diverse enough to be a platform for experimentation

This seems promising, thank you!

Just a question: don't you risk to get stuck in a perpetual refactoring/rewrite cycle?

[edit: fix formatting]

>> Just a question: don't you risk to get stuck in a perpetual refactoring/rewrite cycle?

Yes, definitely, it’s actually all I’ve been doing on one of these projects for the past two years. Guess I just like refactoring a lot it seems ;-)

Joking aside, refactoring is a broad term. Most of the time spent ‘refactoring’ this project was to incorporate interesting new ideas, increasing the capabilities of the game engine etc. Not just the typical technical debt cleanup. But even some of that was actually very educational, for example I found out that the whole idea to use object-oriented programming techniques to model the game was a bad idea, and have slowly refactored the whole thing to a hybrid between OOP and an entity-component system. Just the act of incrementally applying such a fundamental paradigm shift while keeping the engine mostly working was quite an interesting challenge!

> I spent a lot of time on a single project, learned a lot of things along the way, but progress was very very slow mainly because it started to feel like 'work'.

Can relate, my personal solution was to talk about the project to people around me (often non-technical), some would be interested to try, and when I feel like giving up, they are the one reminding me they are looking forward to use it.

Perhaps your passion is not the code, but setting up and maintaining it - DevOps
I find side projects useless. At work I solve real problems for real people, often big problems. Some toy project doesn't feel the least bit meaningful, and any idea I have for something that isn't just a toy is something 100 other people have had as well.

So I help with their implementation instead. Instead of building useless tech demos or starting primitive games I'll never finish, I look up the projects I do actually find useful and see what they need help with.

Eight years ago I was really bored at work (they just asked for a couple of SQL queries a day) so I made a poor man's automated trading system for government bonds. The basic idea was to camp for new bonds and look for new opportunities as soon as they presented themselves. I had also done some rudimentary backtesting to prove some simple strategies for buying and selling. I made no money off of this, it was just for fun. During development I learned how to acquire, store and process financial data in a live streaming way as well as how banks handle things, what the fees and taxes are, etc. Also helped me learn web automation, making and deploying my own services to my own servers, etc.

A year ago I started working on hedge fund software and all this experience was a huge help. So if you are busy at work making tools, great. But the benefit of side project stuff is pretty situational.

Any chance you've written about this side project and the areas you learned about and how to figured those things out?
This is probably the first and only time it was mentioned in public. I do have a private bitbucket graveyard where it resides. Oh and this was done when mongodb was still a thing, so I have some of that going in there for finding sparse stock correlation matrices. And ruby was everywhere at the time, so the bank interface was created in watir instead of puppeteer.
Interesting. I've been working on automating some personal finance Google Sheet stuff trying to use watir to automate pulling stuff from Mint. Did you find watir useful for things like this? Or would you say there's ultimately better options for a personal Rails app?
google sheets is awesome, they even let you reply to rudimentary get requests and define your own functions with google script. I think it is a hidden gem.

Watir lets you host your own headless firefox or google chrome on a cheap server thanks to the headless gem. All headless does is to start Xvfb and let you execute the browser in it.

What I really like in watir's interface is the wait_for functionality which you can sprinkle everywhere in order to wait until a button or a dropdown is actually rendered by javascript so you can click on it once it is queryable.

These days I use websockets and chrome puppeteer protocol to talk to the browser. It is somewhat faster and more robust than the chromiumdriver, but if I had to use watir again, I wouldn't mind it.

Find a project that is useful to you.
I second this, I was project for a long time until I found out an app idea that was mainly driven by the fact that I really wanted it. Unfortunately this was quite a long process and now that it's done it's back to square one. Lots of ideas but no motivation to follow any through.
As someone who has been failing on side projects for over 20 years, I feel qualified to answer this question.

  - Have one private repository for random projects
  - Work in private repositories for random 
    projects that progress.
  - Move to public repositories when the project
    gets somewhere.
These tips above make failure cheap. Success is built on the many failures.

I also have general tips on side projects that make them more fun and less like work:

  - Use a different editor/ide to $job.
  - Use a different programming language.
I also have these general tips based on mistakes I made in the past:

  - Read other peoples solutions on github. Its inspiring.
  - If you get stuck take a break. Its not work and you can slack.
Side projects should always be in a position where you want them to become your main project.
I’ve been employing a tactic I’ve picked up from artists/authors: don’t talk about your project.

Talking about it tricks your brain into thinking you’ve done the work and you lose motivation.

Sticking to a schedule can help as can ritualizing the process of working on your project: have a certain place you associate with the project or a particular genre of music that gets you excited (it’s important to not listen to that genre/album while doing anything else). These tactics exploit the power of association in our brains to form habits.

I've come across this tactic, I think there may be some psychological studies backing up the suggestion.

There is an opposite suggestion that may work too: telling others you're planning on _releasing_ an app at some date (setting a public deadline). This way you may feel pressure (to avoid the pain of 'losing face') to complete it on time.

Note, do not talk about "I'm working on this thing" (see comment above why that may backfire), but instead talk about an explicit deadline you think you can hit.

Needless to say, this is best when talking with people you expect to interact with in the future (so you feel responsible to finish), it may not help psychologically when talking to someone you'll never see.

Pick one of your unfinished projects, identify a way to make progress on it, and then make that progress. Repeat this process until all your projects are done.
Learn a musical instrument. Guitar, Piano or Piano Accordion. You won't be able to do that last one if your currently in a relationship. YMMV. Once you start, you'll really suck at it for a very long time but it's fun and it's a relaxing way to build a skill that is calming and quarantine friendly.

Programmers program, writers write, doctors doctor? No doctors work hard most of the week and a bit of the weekends but they do that so they can have other stuff.

My job is Software and IT. It's less about code and more about clear rational decision making. Not thinking about it all the time makes it easier to think about it when it's time to do that work.

You describe focusing on the solution. The inspiration to make your solution generally feels great, but doesn't endure. On the contrary, you'll get caught up in more and more solutions because you're mostly satisfying fleeting whims.

Focusing on the problem and the people who feel it will generally engage and inspire you longer. When you ask someone about what's missing in their lives or specifically what emotions they feel in the area you want to work in, they tell you, you offer possible solutions, and they say "when will you finish it, I want to buy it?", that inspiration lasts a long time.

Whom do you want to make your project for? What emotions do they feel that you want to address? Are they bored, frustrated, confused, misunderstood, lonely, etc? Each emotion is different and will lead to different solutions. Ask them so you hear in their words what they want. Ask them to clarify.

The inspiration to help others is deeper and creates meaning and purpose beyond just "I'm going to do something cool everyone will love."

I cover how to make this happen in my book, Initiative http://joshuaspodek.com/initiative based on project-based learning entrepreneurship courses I taught at NYU. If anyone is interested in doing the exercises after reading the reviews and watching the videos but cost is a problem, email me and we'll work something out. I suggest the book because of the results people get from doing the exercises.

Have you considered the possibility that you may have ADHD-inattentive-type?

There are online tests based on DSM criteria that can show you if it’s worth looking deeper into, such as this one:

https://psychcentral.com/quizzes/adhd-quiz/

I do score quite high (total 44, inattentive scale 19, hyperactivity/impulsivity scale 25), yet I'm not convinced: at work I almost always manage to get things done well and in time, and I'm generally considered accomplished by my peers and managers, though maybe strange and over the top.
Yeh. That’s a significant finding. Honestly.

People with ADHD can most definitely be productive and generally considered accomplished. They just tend to have put a lot of effort in, their whole lives, in order to get there, and may have developed a lot of cool techniques to get there. Treatment itself is about improving these techniques (and finding helpful medications, the two parts work together.)

Thank you very much.

I'm quite scared of medications, tbh, but I'd very much like to explore improving techniques.

The stimulant caffeine is a popular alternative (provided you’re not overly sensitive to it [it can cause heart palpitations and anxiety], and don’t take it too late in the day) — lots of people use it to self-medicate ;)
Yes, I used to go really heavy on it. Had to quit it almost entirely, for both heart palpitations and anxiety.
Not to harp on about medications, but there are “non-stimulant” medications used to successfully treat ADHD as well, such as Strattera.

On the non-medicine side, techniques like bullet journaling are useful, also having “accountability partners” — friends or groups you report in with each week to check on each other’s progress; things like that.

Exercise and mindfulness also worth mentioning. Good sleep also a biggie.
ADHD seems to be a popular diagnosis in the west (mainly US).

But it can just as well be that you have depression and anxiety disorders or anxiety based personality disorders. (E.g.: Obsessive Compulsive Personality disorder which includes dysfunctional traits like perfectionism that can interfere with your ability to complete projects).

What I am trying to say is that if you feel that psychological counseling can help you figure out why you are stuck in life or some other thing in life in particular, please do not try to diagnose yourself. Go to a good hospital that specialises in mental health and get a proper diagnoses by a qualified psychiatrist.

It is very easy to go the wrong track and come to the wrong conclusion while self-diagnosing yourself as many symptoms overlap with many related mental ailments.

Make a list of things you want to do but don’t start it. Remove them when you lose interest. If anything stays it might be a goer. You will never have time to do everything.

Also, think about what you really want to achieve. When you think “I’ll make a roguelike in X!” do you actually want to make something you or other people want to play? Or do you really want to just have a cursory understanding of how a roguelike works? Or to get a slight familiarity with language X? Do the initial research without committing too much to it and see if you maintain interest.

Which one potentially benefits others the most? That’s the easiest one to stick with.
Maybe work on personal discipline, also I’ve noticed with myself that sometimes a lack of motivation can be confused with a lack of understanding. The more you practice your tools the longer you’ll go before you get badly blocked and give up, eventually you’ll have projects that you can hack on for years.

Here’s what worked for me:

1) pick a language (it doesn’t matter, C, python, ocaml) and just start writing small things in it. Do this so much that your inner monologue starts speaking the language, that you have an uncontrollable urge to sit down on Saturday and barf our thousands of lines of bad code in it the way you might write a rambling post on tumblr.

2) understand problem decomposition: practice OOP for the broader application (you don’t need an OO language just use it to break the problem down, write UML if it’s your first couple times) and FP for smaller problems.

3) practice discipline. Clean your room, do your laundry, make your bed, wake up at the same time every morning, go for a walk every day, keep a house plant alive. It’s almost unbelievable how much this discipline with small things can make you more focused and less compulsive.

The point 3 really helped me to see some improvements. When I complete those little tasks in the morning, I get the necessary boost to get the next things done.
Focus on solving a problem. Find something you actually care about and need to make instead of something that you think sounds cool or that you think might make money. Let those things happen organically. If you actually solve a problem people will tell you that it's cool, and they might pay you for the solution.
> Find something you actually care about and need to make This is my problem. It's hard to find something that I care about enough to spend time working on it. When I start on something that I do care about, I often find something that already exists that does what I wanted to make.
Do it anyway. Or think about how you can improve it. If it's open-source look at their code and collaborate with them.
Nothing wrong with your situation, you're just experimenting and learning. Keep doing what interests you most, you'll eventually settle on something for longer period of time.
Definitely not an expert in this but I have found that the bigger the aim, greater the tendency to nope out of it (for me).

So one way of going around this is keeping short, simple, achievable-today goals.

Example Target: I need to develop a CMS.

New target: Need to create that one method which will do X and return boolean value.

Once that is done, on to next.

Do it with someone else. You're then not just accountable to yourself.