One of the major things which life of a software developer teaches is to determine how much time coding a feature would take, taking into consideration learning curve, development and testing time (and yeah not to forget your relaxation time as well! ). I have always found it hard to estimate, setting unrealistic targets which resulted in mismatch of expectation. Well, rookie mistake of a freshly graduate engineer, I could discount myself for this. I have learnt to improve along the way. One of the things which helped me get better understanding of myself was to use 1-2-3 rule for my to do list.
Assume that on any given day you can accomplish one big mission, two medium tasks, and three small things. Get those done as best you can. Then, as your workday concludes make the next day’s 1-2-3. This will help you keep pace with the reality vs expectation problem, and slowly you would be able to get things done under timelines set by yourself. Trust me its immense happiness when things get completed within deadlines you set for yourself, making one more disciplined.
Try and complete 1 cringe worthy mission before lunch. By taking down the most reviled task first you set yourself up for considerable paced day. Avoid procrastination by not to distract yourself with facebook/chatting before it gets done, keep your phone aside.
You could use 1-3-5 version rather than 1-2-3, whatever works better with you. Happy working !