1. Work backwards from goals to milestones to tasks. I have no idea why more people don't do this.
2. Stop multi-tasking. No, seriously—stop. See my response to #1
3. Be militant about eliminating distractions. I'm not militant enough. Hence this post.
4. Schedule your email. I need to try that. Setting a filter to only alert when my boss emails me has helped in the past. Other emails get answered between 60-90 minute tasks.
5. Use the phone. I despise the phone. Email conversations provide a written record of the exchange and allow me to cut/paste responses if it's something for work (like a URL or code snippet). That said, I will force myself to pick up the handset.
6. Work on your own agenda. My new job and situation allow for a lot more of this. It's life changing.
7. Work in 60 to 90 minute intervals. I do try to do this. It works very well, although I usually don't make it to 90 minutes, just 60 minutes of just coding goes a long way. Do that a few times in a day (with meetings and such filling the balance of the day) and you're getting somewhere.