Ask HN: How to turn mindless browsing time into productive programming time?

38 points by snazz ↗ HN
I’m not a programmer by trade; it’s just a hobby for me. When I set out some time to sit down and write code, I spend most of it browsing the web to compare languages and libraries to make the project instead of actually working on the project. I usually get as far as a repository and a README, but after lots of thinking and mindless thumb-twiddling-web-browsing-time-wasting, I just shelve the project for another time and look for another idea that I’m convinced that I’ll be more passionate about.

I see all these amazing side projects on HN that required months of self-directed, hard work.

What’s everyone’s secret to staying focused on a personal side project and pushing it to completion?

17 comments

[ 2.7 ms ] story [ 19.8 ms ] thread
I believe breaking the big goal/task into tiny chunks of work items in Todo list, paperbook is the most important first step.

And then day by day when I complete the tiny task, I strike them which makes me motivating.

This way has increased my productivity. Ofcourse I still browse but after completion of tiny task

ticking off checkboxes releases adrenalin i think, that's definitely a motivator. how many checkboxes can i tick off today?
I have spent over 10 years obsessively thinking about the same project/vision, and I have not executed a single thing.

I spent hundreds of hours agonizing about every detail (name, domain, programming language, framework, database, text editor, operating system, computer). For weeks at a time, I'll seriously consider (without actually doing anything) designing and implementing my own programming language/operating system/IDE/database, because none of the existing ones are "good enough". I regularly come back to the old Vim vs Emacs debate. When I need some challenge, I look at the Millenium Prize Problems and take a stab at P-versus-NP. Rinse and repeat, ad infinitum.

Every time I buy a new computer, switch to a new Linux distribution, setup a new IDE, go through a new programming language tutorial, I think that's the last step. I think that I'll finally be able to be productive. This is never the case.

I think we use procrastination as a defense mechanism to avoid facing a reality in which we might fail. I think that's a problem with our ego. What if we're not good enough?

I don't know what the solution is. I'm still struggling with this.

I think people who actually build stuff just make arbitrary decisions and don't care if things aren't perfect. They'll stack a bunch of hacks and anti-patterns, and look at the output rather than at the process.

Maybe I'll try that.

I think many people here do that.

Let computers be the tool you use. You don't profit from imaginary "elegance" in parts of the computer that you don't need for your daily work. Be a regular user. Develop only what you're good at.

Think about return on (time) investment. If you take weeks to configure your editor and learn how it works, it's most likely not worth it.

It's okay for software to be intuitive and easy. It's a tool, after all. If there is no proper onboarding and the software doesn't explain itself, the developers didn't get the UX right. You shouldn't rely on them for your work.

yup, i dread setting up a new computer. had to do that just this month. it was a relief to finally get on with work and be done with setup and configuration.

for the same reason i like to use programs at their defaults and not spend hours tweaking them.

instead i'll do that very slowly over time whenever something bugs me enough that i feel the need to change it.

this reminds me of another fear that i have run into: the worry that what i am doing is to big to complete.

i'll definitely not create a new programming language if my goal is not the creation of the language itself. (i do have some ideas for a language, but they are not the project in my vision.)

i too have a project that i have been working on for more than a decade. i am still working on it, but instead of directly aiming for the big vision, i have been searching for smaller side goals that i could reach with that project.

so instead of starting with a road-trip across the country, i look for a reason to get to the next block. once there i find another and another, until i worked enough on it that i could work up the courage to aim for the next city. i am still far away from the actual goal, but in the meantime i crossed a state line, and i have at least achieved something.

I get a lot more joy from setting things up or the first few hours of a new project than the ongoing grunt work required to get something finished.

I think this is because setting stuff up is cool, like playing with a new toy, whereas finishing something is more like work, like shoveling a massive pile of snow.

procrastination defense mechanism

I agree with this. I also did this for years. Then a couple of years ago I buckled down, built an MVP (mininamal viable product) in the most brain dead way possible, and put it out there. And... nothing, my idea received zero interest.

So the really cruel thing here is, all the dithering and indecisiveness really do amount to nothing, none of the decisions you mentioned matter; language, framework, db, etc. If something you build does gain users, then worry about it!

A good thing is you are already, motivated to sit down and work on your side project.

I suffered from the same issue and the problem was, i lose focus really easily, so what helped me overcome this is for each session i take to work on my side project, i should first define a concrete and an achievable task, so for example if the side project i am working on requires me to use a library that i am not familiar with, the tasks that i will define are :

- find out which resources are recommended to learn this library, and pick the most recommended one.

- read sections A, B and C from the chosen resource.

- read sections D, E and F from the chosen resource.

...

And examples of programming tasks are :

- Create an Http end point that forwards requests to two configured hosts.

    - Create the class that captures the Http Requests.

    - Create a function IncomingHttpRequest => ForwardedHttpRequest.

    - write tests for this function.
Do not be afraid to further decompose your task into sub-tasks, and to define really small tasks.

Other things that helped me :

- having a desk that i only use to work on my side project.

- meditation

- listening to podcasts when i am doing a task that does not require a lot of focus.

good one. i use large whiteboards to break down the tasks of my project(s). so that whenever i want to work on the project, i can look at that task board and quickly remember where i left off last time. that helps me for my paid work too. so i can treat them side by side, and i don't spend a lot of mental effort to switch. that is another issue that otherwise keeps me from working on something.
Aim to produce a first draft on the first day. Quick and dirty, incomplete, maybe just a wireframe with stubs. In any language or framework. Just whatever has better documentation or examples. Then make it better every day.
release early and often. even if just to yourself. i like to see something working, and then gradually tweak it and add new features.

i just went though that exact motion with a small app that generates math exercises for my son. i needed an inputbox for parameters. i was searching through the documentation of pharo spec for the smallest example that would let me get started. once i had it, adding new features as i learned more about the framework became a breeze.

Writing code is like writing a book. You're not going to nail it on the first draft. It's okay to use a library that's probably not right for what you're doing but you can make something work, and then come back later and reimplement it with a more appropriate library. In fact, the problems you run into during the sub-optimal first draft will tell you what tools are really the best for your project.

It can also help to have someone else to keep you on track. Find a friend, a family member, a mentor, etc who is willing to take a few minutes every week to play around with what you create and give you some feedback. Having someone who you can show off to when you work hard, and who will be disappointed if you don't, is a pretty good motivator.

indeed, that also helps to address issues like finding a practical use for the project. your friend can give you feedback on that, or they can be the practical use case. it also helps if you don't like to work alone on something.
i am struggling with this too. one thing i am worried is that the sideproject will consume me and let me neglect other work that i need to do. in a way that is my fear of failure, not failing to complete the project but failing to give it the appropriate priority.

so this is one thing to look at: is there something that you are afraid of that might happen when you engage in this side-project.

find out why that is, and then try to address that fear.

if you are afraid that you will spend to much time on it, maybe schedule your time. only one hour a day, or only on one evening a week, or saturday afternoon, or only when you get to a particular location. in the Beijing GNU/Linux User Group, i started a monthly "Coding for Fun" event, where we'd meet to hack on our projects. a perfect space for a side-project.

if you are afraid of working alone on something, find a hacker/geek/linux user group that engages in related activities and find someone to join you on that project. again, our Coding for Fun afternoon was a perfect venue for that.

are you afraid of not completing the project, maybe try changing your goals, so that completing it is not the goal, instead have a goal that can be achieved even with a partially completed project.

another one of my fears is that the project is of no practical use to anyone. so i search for that practical use.

for example i have been wanting to learn smalltalk for years. but without a practical use, i could not do it. i'd download pharo images and then not get around to doing anything with them. in the meantime, i discovered that recreational coding is in itself a practical use. an hour of dabbling around, trying out something, learning something just for fun, without a customer being on my case, or without the pressure to get it right.

i now set up a pharo smalltalk environment so that i am be able to use it every day for a mundane task (it runs a commandline terminal), and now, whenever the mood strikes i can go off on a tangent and play. but i am not afraid of it consuming me (see above) because i'll still get to use it every day even if i don't go off to explore. compare that to learning linux by simply using it to read your email and browse the web without doing any focused learning activity, learn by getting used to having it around, then slowly find new activites. i can use smalltalk as a calculator for example. (i used to fire up pike or python for that before)

to bring that back to your project. find one good reason to work on that project, and as you go you may discover more reasons that help you to continue working on it.

Just do it. It really is that simple, yet the vast majority are simply not able to.
I'm similar that when I want to do something in my own time I need lots of the time to set into the mood to actually open the editor and drop some lines of codes. I found out sooner I open the editor more of my time I spend actually doing something rather than listening to YouTube or reading Hacker News or playing chess.

But recently I came to realize that I must change how I utilize my spare time as, you know, we are not getting younger and I'm not one of those lucky ones who worked for unicorn startup. I reflected on how to be better at not wasting time and one idea that popped in to my mind was to get somebody else involved and build something together. A little bit like pair studying in high school or at uni. I'm just kicking in so can't provide more feedback, but I'm moderately optimistic about the idea.