I am an above average programmer (I take interest in the development of languages, frameworks and technology in general and have a good grasp of systems), but I constantly find my self not being able to deliver things (on time). This does not affect my day to day work as it has good control process (bite sized tasks with shame driven development) But it definitely hurts me in my personal projects.
Some of the reasons that I think are at play. -I make things more complicated than they need to be. Often a lot more than I admit to my self. -I am not very good at making the tasks smaller at times. -I wander off into obscure corners when I encounter them instead of keeping a laser focus.
The result is often that I don't deliver. Now I may know at the back of my head that what I need to do, but I would appreciate your strategy on how to be the guy who "delivers".