One thing I've noted is that all coding isn't the same, that is, you have your very difficult tricky issues, stuff in the middle, and then your routine type things. It seems you can't (at least I can't) keep a 'fever pitch' of intensity on difficult tricky issues for too long a time. So if first thing in the morning you spend a couple hours solving something difficult, you had better not spend the next couple hours working on the next real difficult issue. Because if you do, you'll probably spend your next whole day unraveling the problems you caused yourself during your last coding period when you were possibly 85% instead of 110%. In other words - work slow!