
Ask HN: Staying focused on your project - tmaly
What tools or techniques do you use to maximize your focus on your project when you are working on it?
======
mikekchar
Lately I've been doing something a bit crazy: 5 minute pomodoros. I use org
mode to maintain a TODO list of things I am planning (granularity of around 10
minutes each). I then work on them in order. At the end of a 5 minute
pomodoro, I write down in log what I have done in that 5 minutes (it's got to
be a quick one liner).

Obviously sometimes you don't want to break every 5 minutes, so my pomodoros
actually seem to average about 9 minutes. However, the forced reflection after
5 minutes makes me think: am I doing the right thing, should I change
direction, am I just staring off into space, etc. The writing down what I have
done makes me realize that time is passing (which is hard for me). I try to
make sure I have something to write down that isn't "continue with the
previous thing". The TODO list helps me focus. Every once in a while I spend a
whole pomodoro updating the TODO and planning what's coming up next. If I'm
pairing, the end of the pomodoro is where we hand over the keyboard.

So far it has been going spectacularly well, but it's hard to sustain for a
whole day. Make sure to take breaks ;-)

~~~
Kinnard
5 minute pomodoros sound like a horrible idea. The pomodoro technique is
supposed to employ half-hour blocks. You should try the pomotodo iOS app. It
takes care of a lot of the overhead and keeps track of all the data for you:
[https://pomotodo.com/](https://pomotodo.com/)

~~~
mikekchar
In fairness, I _did_ say it was a crazy idea. I can certainly understand that
it sounds like a horrible idea, but I think you might have missed the bit
where I said it was working fantastically well. ;-)

I have done 25+5 minute pomodoros many, many times. It is a good technique. In
many ways the 5 minute pomodoros are not that much different. You could treat
it as normal pomodoro with a timer going off every 5 minutes. What the 5
minutes timer gives you, though, is a sanity check about what you are doing.
Because you have to write down what you have accomplished, if you feel you
have accomplished nothing in that time, it gives you a quick way to change
gears.

The main advantage I have been getting from this is in difficult problems.
I'll spend 5 minutes assessing the situation and then realize that I'm not
really any further along (i.e., it's going to take me 20-30 minutes just to
figure out what to do). So I start to think, "Is there anything I could do in
5 minutes that will give me a place to start?" It's tempting just to read code
for half an hour, or step through with a debugger, or whatever. The "what can
I do in 5 minutes", limits you to selecting partial solutions and decomposing
your problem from there. This has improved my productivity quite a bit.

Similarly, I have often looked at something and thought "I'll just refactor
that quickly". Then the 5 minute timer beeps and I'm forced to think, "Is this
really a fast refactor? Can I get it done in the next pomodoro? Was it really
a necessary refactor?" Sometimes the answer is "no", which saves me a lot of
time chasing things that are unnecessary.

Sometimes I'm pairing with my partner and we disagree on approach. After 5
minutes, we're forced to write in our log "We were arguing". But the next
pomodoro we just say, "Let's pick one and see what it looks like." Even doing
it twice is often a lot faster than continuing arguing.

Also when pairing, it is good to swap the keyboard frequently. 25 minutes is
too long in my experience. What often happens is that the person who is
stronger will dominate because they can write a lot of code in 25 minutes.
Then they switch and the next person ends up playing catch up for their 25
minutes at the keyboard. Rinse and repeat. 5 minutes is not enough time to
dominate the design. Also, it is easy for the navigator to stay focussed for
that period of time and not wander off to check Facebook, etc. Ping pong is
also another technique which is good for this problem.

Org mode in emacs also works very well. The interface is exceptionally
efficient. The nice thing is that it stores everything in text files. We can
check in those text files into the project. Since we check in code every 4 or
5 pomodoros, the diff in the commit shows the changes to the TODOs and a list
of things you did to make those TODOs change. If you review these commit by
commit, you can also see where we planned to do something and then changed our
mind.

This last bit is especially useful because I live in Japan and my colleagues
live in the UK. We pair together in the UK morning. My colleague will then
solo code (or pair with someone local) in the UK afternoon. I will pick it up
in my morning and we will meet again in my evening (UK morning). I call this
"relay programming". By looking at the journal in each commit, I can easily
see what my colleagues did and what they were thinking. It takes all of about
10 minutes to catch up completely and to be able to carry on effectively.

It might not fit your programming style, but if you are doing XP style
programming, I would recommend giving it a try. It has worked quite well for
me.

------
chipsy
I go to the coffeeshop with paper and pens only. Then I try to kill the ideas
around what I'm working on right then and there, using a UX-centric focus.
I've realized that my personality centers this paper design process, and works
best if I try not to consider too many implementation decisions at this stage.
The result should be something approximating a functional spec, with features
and their rationale, asset lists, wireframes, etc. - a document that describes
something that "should" already exist. The coffeeshop time is when I am most
allowed to space out, enjoy the moment, doodle some things. What I'm really
doing is batching together all the biggest emotional decisions of the day so
that my remaining work is smoothed out - it's all execution without having to
stop and decide.

Upon my return I turn the indicated design into Trello cards. When I want to
do labor I look at the cards and pick one. Speed and terseness is essential
for my retaining focus - having the paper design prevents me from compromising
quality as I try to take shortcuts. If I get too much into storytelling while
sitting at the computer, I may romanticize what I'm doing instead of doing it.
If I have to send emails for business I try to keep a short timetable of a few
minutes each; likewise with code. When I get tempted to narrate future work in
my code, I deliberately make the comment barebones - a list of titles, for
example, just enough to be a reminder. The cost of filling in the gaps in the
comment could go to finishing the feature. If I need an additional level of
documentation, that signals that I should go back to the paper design and the
cards.

This is only most possible with solo work and a high level of familiarity with
everything I'm doing. If I have to learn, then I have to go through a
different process of playing and practicing before I can proceed so rigidly.
And with team projects things are necessarily different.

~~~
SyneRyder
A possible alternative for folks who like the idea of pen & paper, but also
wish they could keep digital copies & not have to keep sheets of paper around
- take a look at the Galaxy Tab A S-Pen models (or the Galaxy Note 10). I find
it still puts me in the same mental mode as pen & paper, but with the added
benefit of syncing my handwritten notes to Evernote so I can refer to them
everywhere. I used to keep a clipboard full of paper handwritten notes, this
has eliminated the clutter for me. I take my tablet a lot to coffee shops as
well for planning & deeper thinking.

~~~
tonyedgecombe
Taking a break from technology can be useful in itself though.

------
bad_user
I've been working on an open-source project on GitHub for more than a year.
It's not the kind of project that will ever bring me income obviously and it's
not a success story, but I can relate to many of the challenges involved in
building any kind of project.

The first problem is what happens after the novelty is gone. The Pareto
principle applies, the last 20% of work needed to be done being the hardest.
And we tend to start working on something, satisfy our initial urge and then
move on. Well, a year and a half later I'm still working on it, even though
I've had pauses that lasted for weeks or even months. For me the recipe is
finding something that is worth solving. And given that my library was born
out of necessities at work, plus a couple of users that started using my
library, I felt enough responsibility to proceed. My library also has
competition, but every time I've looked at the competition, I remember the
very good reasons I've had for starting my own thing. And I'm now marching
towards a 1.0 release that will be in good shape and provide API stability for
some time. But now I'm feeling the second problem - how to market it, how to
scale the development process and so on. I know that I've got something good
on my hands, but I don't know how to convince others.

But the biggest problem is that this project is a love child. My problem won't
be that I lack the motivation or focus to work on it, because I do, finding
the focus necessary is effortless when you really want to work on something.
No, my problem will be to let go of this project if the alternatives will
evolve to be better.

Back to your question, for immediate advice - I'm the kind of individual for
which time management techniques never helped, ever, as my problems are
usually of inspiration and finding the necessary motivation. On motivation,
having a child to feed surely helps :-)

But I can say that when I'm getting in "the zone" I'm 10 times more productive
and when I get there, I tend to stay there for as much as possible, as getting
in that zone is hard. And that means I stop my IM, I put my phone on silent
(with my wife added as an exception) and I play music. Music helps me a lot,
because I need background noise to keep my mind from wondering off. Also, I
try to have a healthy sleep cycle and weekends are always for fun and
relaxation. Rules like that can keep you from burning out.

~~~
gedrap
>>> I've had pauses that lasted for weeks or even months. For me the recipe is
finding something that is worth solving.

I can totally relate to that. Sometimes I feel that ok, this project is much
more complicated than I expected, or maybe it's not that interesting really.
Should I abandon it?

So I try to honestly answer to myself, am I just being lazy right now, or is
it for real? I find it quite important to distinguish between these two.

If you are just feeling a bit lazy, just try to fix some simple bug, or update
readme, something small like that. It can do wonders. Usually, opening the IDE
and starting to write the first line of code is the hardest part :) even if
you can't be bothered to do anything that night, that's cool. Don't be too
harsh on yourself.

But sometimes, you genuinely lose interest in the project. In that case, I
think it's fine to just quit (assuming it's a side project which isn't
bringing any income and it never will, that kind of stuff). There's no point
to push yourself too hard, it's too likely that the product will end up being
a bit crappy since you've lost the interest, and you won't have much fun
(which often is the top priority) either.

------
gedrap
I try to (since it's not always possible) to have a list of small tasks, which
normally would take me 30 minutes or less.

It's much easier to get distracted when you only have these huge ugly tasks
where you have no idea where to start from. Which leads to the importance of
splitting big tasks into many smaller subtasks.

~~~
AdrianRossouw
i find writing / fixing tests is a good way to get started on something.

the subtasks usually become apparent very soon.

------
Communitivity
A work log page each day with a list of todos, notes, progress log, etc. in a
personal wiki like MoinMoin. I use this more often than third-party sites like
Wunderlist because I can use it with nothing more than Markdown in an offline
text editor if needed. If it is a project I am having trouble staying focused
on, then I also use the Pomodoro technique
([https://en.wikipedia.org/wiki/Pomodoro_Technique](https://en.wikipedia.org/wiki/Pomodoro_Technique)).
I tend to use a longer than usual Pomodoro amount of time, usually 45 minutes,
then a 5-10 minute break, then 5 minutes to refocus before diving back in.

~~~
wslh
> A work log page each day with a list of todos, notes, progress log, etc. in
> a personal wiki like MoinMoin.

For people working on Windows I recommend using OneNote. It can work like a
wiki but you can also put your blocks of text in a multi-column fashion
instead of the usual single-column text. In this way you can quickly see a
bigger picture of your project.

------
junto
This is going to sound a bit weird but try treating yourself as the client.

Use some kind of issue management / agile tool online.

Track your time and then bill yourself weekly or monthly.

I can recommend Pivotal Tracker or Trello and Harvest app. Both are free for
personal / small usage.

~~~
junto
You will start to appreciate how much you have achieved, which features to
prioritise and how much value (financially) you have put into your project.

------
Kenji
Loads of coffee, stomach not too full, sleep well at night, listening to
music, disable all IM programs and e-mail clients. Attacking a problem that
captivates me to get started. Sometimes it helps to leave a bug that you know
how to fix in the program so the next morning you have an easy thing to get
started.

------
marak830
Im sorry if this comes off the wrong way but- constantly realising this is the
only thing between me, and achieving a decent house/life for my family.

Every time i feel tired, i force myself to realise what my life was, what it
is now, and how much better it could be

~~~
triangleman
Seconded. Free will is a real thing, but are you willing to use it?

------
cpro
There are two techniques/strategies I have used to become more productive.
Both strategies revolve around the idea of not becoming distracted.

1\. Stop "planning" everything and start "doing" things. I believe planning is
a great way to procrastinate because you convince yourself you are being
productive when you are not. Instead, I try to minimize my planning and keep
things moving.

I stopped using planning tools such as Trello or other Kanban systems because
they are so heavy and in the browser it makes it easy to get distracted and
surf the web but also, those tools suck you in and you soon start 'planning' a
lot of details instead of actually doing work.

I replaced my task manager with a simple command line tool I made myself
([https://goo.gl/YF6Wsk](https://goo.gl/YF6Wsk)). I am not sure if it would
help anyone else but I use it every day. The premise of the tool is simple,
minimize the time I spend outside of my editor. If I have to log tasks I do it
and jump right back in my editor.

2\. The Pomodoro Technique has helped me "get in the zone" because the
technique makes you focus right off the bat.

------
brobinson
I make sure that I have a high-level development course plotted out so I have
a sense of progress from a bird's eye view, but I also keep a very granular
todo list for my day-to-day things so that way I never fall into the "what do
I do next" \+ feeling overwhelmed mindset.

Also, try to stay off distracting websites like HN, Reddit, 4chan, etc. On
that note, gotta go!

------
edw519

       1. Decouple dev from analysis; work on only 1.
       2. Analysis at night with pencil & paper.
       3. Don't go to sleep without specific morning plan.
       4. Dev starts first thing in the morning.
       5. Always focus on WHAT to build, never HOW.
       6. NO INTERNET in same room as dev computer.
       7. Start with the data; the process will follow.
       8. 3 3-hour dev sessions per day.
       9. 1 2-hour analysis/review/refactor session at night.
      10. It's a marathon, not a sprint.
      11. Apparent failures are OK. May lead to something great.
      12. Take care of myself (diet, exercise).
      13. When I'm not working, I'm not working.
      14. Never forget WHY I'm building something.
      15. Weekly & monthly project plans, frequently revised.
      16. Happy dance whenever something really cool works 1st time.

~~~
Mikushi
Nice recipe for burnout. 11h per day is not sustainable, not healthy and
hurtful to whatever you are trying to do.

~~~
electronvolt
I think that it's manageable, esp. if you are doing breaks for
meals/exercise/etc. and getting enough sleep, even moreso if this is not an
every day of the week plan (two days on, one or more off, for instance).
Without any data on frequency or what this person is working on, you really
can't make a blanket statement like that.

------
iisbum
All projects have the stuff that's exciting and fun, and all the other stuff
that's boring and dull, but needs to be done. I try and handle some of that
boring dull stuff early when I have lots of energy, and try and save more of
exciting stuff for later.

I've had trouble launching things when I've left that boring stuff till the
end, and boy does it drag on getting that stuff done.

------
vosper
I've recently added a repeating popup reminder to my Mac - it pops up a dialog
box every 30 minutes that says "Are you wasting time?". The answer is allowed
to be "yes" sometimes - I need breaks - but the point is to make sure it's a
conscious choice, and that 30 minutes of browsing or playing games doesn't
turn into 2 hours.

~~~
helsinki
How did you enable a popup to appear every thirty minutes on OSX?

~~~
bentrevor
You can use `osascript` to show a popup. Depending on which shell you're
using, it would look something like this:

    
    
        for i in {1..4}; do
          sleep $(expr 60 \* 30)
          osascript -e 'tell app "System Events" to display dialog "Are you wasting time?"'
        done

~~~
cweagans
Or just put the osascript line in your crontab?

~~~
swsieber
You could do notifications via hammerspoon. It's probably overkill, but you
could probably work in a custom active window time monitoring system.

------
swah
I have the same problem and some of the techniques might help you:
[http://bookofhook.blogspot.com/2013/03/smart-guy-
productivit...](http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-
pitfalls.html)

(But my biggest problem is getting work done when I'm not interested in it
anymore).

------
dome82
I am trying to use OKR in my projects. They help me to stay focused in what I
need to do and see progresses every quarter. I am using WeekDone for tracking
them.

Moreover, using Todoist for keeping track of my todo's, Quip for my documents
and Trello as my default board.

Agree that taking breaks from technology and staying offline is very helpful
to keep me focused.

------
brlewis
Talk to users. When I know someone who's waiting for me to complete the next
improvement, focus happens more naturally.

------
sbfeibish
I stop answering emails and phone calls. I ignore anyone ringing the doorbell.
Anyone of the above can result in an action event that creates a time-
consuming task. (I've found that every time a neighbor comes by its almost
certain to cost me money.)

~~~
tmaly
I have a busy button on my phone, but I still get people walking in my office
to bother me about trivial things. Sometimes I have to pull a Tim Ferris on
them

------
dchest
I'm reading The Willpower Instinct ([http://www.amazon.com/The-Willpower-
Instinct-Self-Control-Ma...](http://www.amazon.com/The-Willpower-Instinct-
Self-Control-Matters/dp/1583335080)).

~~~
tmaly
what do you like most about the book so far?

