For me, I feel excited when doing performance tuning work, front-end stuff etc. However, I would quickly become bored after working on work that take more than 5 days or so, even if I love the subject. Although I'm not really into TDD, but I think sometimes using TDD could help you get some more feedback when you work on some abstract stuff. (Although writing the tests could be boring for the beginning...)
I would argue that having no expectation on the first-draft may not be the best way to be more productive. Having some concrete goals or metrics could be beneficial if you can get the feedback-loop working. Under-defined, subjective goals could be bad as achieving the goal may seem never-ending if you want perfection. (at least for me)