2) If you have a design but are just trying to figure out how to implement it, then TDD can help a lot. Write a test that checks if your thing does what it is supposed to. Then run the test, it should say you have X failures. There, now you have a concrete problem to solve: you need to fix those failures.
3) If you are intimidated by a large coding problem, try instead to just make the simplest possible prototype version that just barely works. Even if this exercise causes you to write throwaway code, it's worthwhile. Once you have something working at all, it's easier to think about the features that you need to add to make it finished.
In general I think people get blocked when they try to solve too many open-ended questions at once. So try to break apart your problems into bite-sized pieces, and find ways to turn your open-ended questions into specific, measurable problems.