I used to have this problem for multiple personal reasons, and here's how I force myself to be efficient in the morning:
- I come in VERY early: you get a lot done when no one bothers you and you can get in your coding-zone. Beware of your own procrastination habits. Don't open your e-mail client, don't check anything. Just work on your current task. Work begins at 9am officially at my current office, but I usually show up at 7.30, sometimes earlier.
- I try to have a dynamic morning routine. My radio/phone blares and won't stop until I really get up. Nothing to turn it off: I need to get off my butt and stroll across the room to get it and turn it off before it wakes up everyone else. Prevents me from going back to sleep on auto-pilot. If I could put it in the bathroom so I'm almost in my shower, I would (except I don't hear it ring from there).
- Be active while you have breakfast and travel. If I don't have anything to do, will just read the paper or my feeds on my phone. If I have something to do, I take a notepad and start outlining and prioritizing the stuff I'll need to do.
- Micro-plan. Think of it like managing an agile project: you need to identify very small tasks and schedule them. If I have very busy period, I fire up my Google Calendar and I create events for all my activities. I then receive SMS notifications to track my progress and switch from task to task. It tends to prevent me from procrastinating.
- Drink coffee. If coffee is too hard on your stomach, drink tea. If caffeine is an issue, drink some sugary drink. Or just drink water, that's healthy, and gets your system rolling as well.
- Respect your sleep cycles. That's trickier to learn to do, but it's very important. Identify the best time for you to wake up and use only that timeframe. Waking up during the wrong cycle will make you grumpy and inefficient until you snap out of it.
The planning details are important, but so are the more health-oriented aspects. I can go through the day with just one meal, but usually I won't perform well except if I have only one big task do deal with all day (and don't move much). Eat well in the morning, take your coffee when you arrive at the office, have lunch, take breaks in the afternoon. Adapt to your rythm. Don't neglect sleep.
And most importantly: police yourself not to procrastinate. Don't start the day reading the news (I used to do that and would end up reading for hours. That's why I just do it on the bus now, and while I have lunch, if I eat at my desk - which isn't necessarily a good thing). Don't fire up a browser to check e-mails, news, stack overflow updates, etc... Don't activate desktop / widgets that send you notifications. Use software that helps to keep focused, and lots of task-lists and calendars.
Some other stuff:
- work in a quiet area. open-spaces and cubicles are a pain: they're good for collaboration, but a problem for focus.
- earphones are your friends. Helps to avoid disruption. Prefer music you enjoy but do not excite you so much that you start jumping off the walls screaming. So people usually recommend classical or relatively lyric-less rock, or electro/techno. But hey, that really depends on you.