My habit of procastination comes directly from "being smart". I've been able to do well on tests because during the test, I get this intense focus to do well within a time limit. Doing things at the last minute gave me the same kind of rush. If I did well, it validated that part of the ego. I was even aware of it, felt a bit silly, and went ahead and did it anyways.
I did find some ways to retrain this. I still procastinate, but I've been managing to get coding done -- I'm applying to YC Winter '09 with a prototype I've got up live two weeks ago. Here are some of the things I've tried:
(1) The most difficult part was taking action after making a decision. This is probably the biggest block ... you can think that you need to retrain your mind, or to get a "growth mindset", and your mind has been trained to think that as long as you think it, everything is OK. It isn't. As lame as it sounds, some of Anthony Robbin's "Personal Power" tapes work well. You start by doing some little things that you've been putting off, anything from taking out the garbage to even downloading the tools you need to get started on writing a prototype. The key is taking the action as soon as you instantiate the decision. The more you do that, the more your mind gets used to it.
(2) "Invest in loss". This is something that a martial arts teacher (Cheng-man Ching) said often. As it applies to fixed mind-set vs. growth mind-set, it means assuming that you already suck going into something. Over the past four or five years, my friends and I invite people out to our training group. We see a lot of newbies. No matter how physically talented you are, without training, you suck. There is no beginner's luck. Having some experience, I can feel when people get agitated by their suckage. They don't want to play anymore because it violates their image of themselves.
It takes some work, but it is doable -- you can learn to be comfortable with the uncomfortable feeling that you are not very skilled. It doesn't require you to go to some sort of martial arts bootcamp, it does require you to get your body moving ... which comes back to the first thing about taking action after making a decision.
(3) There are times when I get stuck during coding. Sometimes I need to refactor something, but I really don't want to do it. Sometimes I come across a choice between two architectural decisions. My habit is to stare at the screen trying to figure out the best way to proceed forward. I've noticed that it easily leads to distractions.
One of the key thing that appears in all forms of martial arts and fighting systems is the idea of slipping off the line of attack. Mentally, when I come up against a challenge, it feels like an obstacle in front of me. I want to go forward, but this annoying issue keeps coming up. I stop being able to see the vision -- that sense of awesomeness of the overall idea -- and trying to beat my way through it is painful. Even with the idea of "try harder", it is painful. What you want to do is slip off to the side, like dodging in side-scroller while continuing to go forward.
One way particular to my own martial arts training is to walk around in a circle while thinking of the problem domain, and then changing direction and going the opposite way. It is weird, but it always makes me feel confident enough to keep working, albeit from a different direction.
(4) Meditation. A simple practice of breathing and awareness. There's not much to it, but it clears the mind of baggage so you can move forward.
(5) Josh Waitzkin's book, Art of Learning has a lot more tips.
achievement through great effort http://en.wikipedia.org/wiki/Kung_fu_(term)
Anecdote in support of the article's hypothesis: I'm blabbing about myself instead of working on a cool idea I had this morning. Sigh.