Ask HN: How can I pick a side project and stick with it?
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 ] threadIf 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
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.
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
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.
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
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.
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.
This seems promising, thank you!
Just a question: don't you risk to get stuck in a perpetual refactoring/rewrite cycle?
[edit: fix formatting]
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!
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.
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.
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.
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.
I also have general tips on side projects that make them more fun and less like work:
I also have these general tips based on mistakes I made in the past: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.
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.
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.
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.
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/
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.)
I'm quite scared of medications, tbh, but I'd very much like to explore improving techniques.
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.
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.
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.
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.
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.