As of late, I have found that one of the most common pieces of advice that I give to the developers on my team has been to take a step back and break down the tasks they're working on into smaller chunks.
It's not a novel concept. It's part of the problem solving process. In many cases, the developers that ask me for help have already broken down the problem to a certain degree but just haven't gone far enough.
When I go about the process of tackling a problem, I'll go through "break down" process many times. The first time, I'll break down the overall problem into big buckets of tasks. I might go through a few iterations of this to see if there are different ways to tackle the problem. Once I've got my basic buckets, I'll treat each one as a problem to solve and then break down each one independently. By going through this cycle, I get a good sense of the tasks that need to be done.
If I am working on a task that I start to feel overwhelmed with, I'll treat it as a problem and run through the break down process again. I find that it helps me refocus and provides me with a clear path to completion.
Most of the time, the developers already know the answers for themselves, they just need to take a moment to look at the problem again and break it down some more so that they can see the specific steps they need to take to move forward.