One summer day in 7th grade I remember being really bored.  You know those days where nothing (not even asteroids on the Atari 2600) seems like fun?  On this particular day I decided to make a list of stuff to do when I was bored.  I don’t remember the list as a smashing success, but in the first couple of months of starting my own business I decided to apply this same logic to the time between projects.  It really helps if you have a big-ass whiteboard on the wall in front of your desk that you have to stare at all day.  On the left side of my whiteboard I started my list:

Write blog entries (heh)
Clean up Inbox
Tidy Network Wiring
Master LDAP
MySQL IndexesPrune bugzilla
Research competitors
Follow up with XXX about YYY

You get the idea.  The list is actually much longer but I’ve saved us both from some of the embarrassing ones.  It’s funny how so much of what we do as developers feels like a rush job and we find ourselves saying “yeah I did it that way because I didn’t have time to do it the right way”.  There isn’t really a way to avoid most of that stuff unless you have a really good sense for how much time everything takes.  You get much better at it with time, but there is always that surprise feature that causes the sleepless nights.  Anyway, having a list to refer back to on the days where all your code is working or you’re waiting on a render or you have meetings that cancelled can keep you from wasting an afternoon on youtube watching hockey highlights (ahem).