I'm continually becoming overwhelmed by large projects, once they reach a certain level of complexity. Once I reach a certain point in a project, my progress slows to a crawl and I find myself constantly retracing my steps and sorting out all kinds of confusion.

I've gotten really good at refactoring due to this weakness of mine. And I always try to decompose my objects into smaller, more manageable ones. This weakness has also probably caused me to pay too much attention to designing things properly.

I know if I can break my problems down into smaller ones, I'll be able to accomplish smoothly. One strategy that comes to mind is test-driven development. What else can I do?