I don't know if I count as a "successful" programmer (I'd like to think so), but here are things I've started doing in the last few years that have had a tangible increase in my productivity.<p><i>Know yourself</i>. Know your body and your mind and your tics. If I don't get 8 hours of sleep, for example, I get irritable and have trouble focusing. I've had arguments with managers and executives about this before, and frankly I'll quit before I'll commit to working at not my best. Having my ass in the chair at 9 sharp, tired and bleary and cranky, does nobody any good--especially if waiting a mere hour would result in like 4x the productivity. If your bosses can't see this, and you can't show them numerically that you are producing, you need to leave your job. Speaking of showing progress...<p><i>Make todo lists</i>. Whether in an issue tracker, post-its, notebook, or mad scrawlings on your cube wall, make notes of the next few things you need to get done. Annotate those things with the mid-to-low level deliverables or requirements. This is not just to keep track of where everything is, but also to help you get right back into context when you need to switch gears. Moreover, this also helps you audit what you've been <i>doing</i> the last few months.<p><i>Write sloppy solutions first</i>. Don't lose steam fighting optimizations, unless that is the exact goal you're trying to accomplish. Welders use tack welds (teeny welds that are fast) to shape up a workpiece before going to do everything--similarly, use the obvious solutions (preferably functional ones if the language, like JS, affords them) and then go back and clean things up in a subsequent pass.<p><i>Accept that you'll waste time</i>. I know that some amount of random garbage (chats, twitter, HN, etc.) is useful for helping reset my brain. On bad days, it even gives me a place to vent while I'm waiting on solving problems and gives me a sense of community. Don't begrudge yourself this, and instead focus on learning to recognize when you've gotten that recharge and can go back at things.<p><i>Do the medium-detail design work up front, and write it down</i>. Especially at hackathons or during stressful times or even when just spewing code because you're not on the ball, it's really easy to code yourself into corners. So, the design work is a guardrail to help nudge you onto the right path. This way you won't get into a situation where you have to throw away a lot of work.<p>EDIT:<p>One more thing.<p>The measure of a good engineer isn't how awesome they are when they're at their best--it's what and how consistently they can deliver when they're not.