I often do the same thing as you, where I get up early (6ish for me) and do a couple hours of work before the start of the actual workday.
The most important part to me is to make sure that I'm only doing things that actually matter. So when I'm thinking about adding a feature to my product, I first try to see if that feature should actually be the highest-priority thing, or if my customers can live without it. And it helps to zoom way out, too. Often, programming is not the wisest way for me to spend my time. Sometimes it makes a lot more sense to spend time on, say, marketing, or on education, whether that be programming-related education or something else. Abraham Lincoln said, "If I had eight hours to chop down a tree, I'd spend six hours sharpening my ax." A lot of the time, sharpening your ax is the most effective use of your limited time.
I've found the following books helpful when it comes to time management and overall effectiveness. In order of how strongly I recommend them:
- The 7 Habits of Highly Effective People by Stephen R. Covey
- First Things First by Stephen R. Covey
- Getting Things Done by David Allen
- The first 20 pages or so of The Ultimate Sales Machine by Chet Holmes
I use a combination of tactics recommended by GTD, FTF and T7HOHEP. After reading GTD, I wrote down everything I could think of that I would have to or want to do, ever. Examples: do the dishes, email Steve, visit Europe. Later, I captured most of these items in Evernote, and then later, I graduated to Things. I suspect that the developers of Things have read GTD.
Now that I have all of my to-dos captured in Things, I try to take one day each week (usually Monday) to plan the rest of the week. Reality never matches up with the plan, but I don't think that means I need to throw out the entire process. It's still helpful to have at least a high-level idea of what I want to do with the week.
I still find Evernote valuable for capturing ideas, but Things seems best so far for capturing to-dos. I also still use pen and paper to plan on a day-to-day basis. If I go by Things only, I forget, so I usually transfer my daily Things to-dos to paper at the beginning of the day. As unexpected things naturally pop up throughout the day, I add them to my daily to-do list and/or Things, depending on how likely I think it is I'll get to that item the same day.
Also important: when I want to have a chunk of productivity, I close email and don't check Twitter/FB/Reddit/HN or anything like that. I'm obviously not trying very hard to be productive right at the moment.