There's a lot of things to learn and understand in software development, beyond the frameworks and tools we use. Some lessons come early, like code reviews and asking for help. Others come later, like avoiding tribal knowledge and realizing you're not stuck.
But one of the harder lessons, and one I have to learn and relearn, is that making progress sometimes means slowing down first. I wonder if that used to be easier in the past, when a programmer's punch cards sat in an inbox for hours (or days) at a time? Then again, I suppose there were other reasons to spend as much time as possible compiling code...
..... ah the future
Things work nice and fast now (but never fast enough!) so we can just keep changing code, rebuilding it, rinse and repeat, until we're all wound up and blue in the face. Measure twice, cut once? More like, write code 20x, commit once. Delete the other versions and we shall never talk about it again.
We all know that's not the best way to do things. Sprinting off with a half-baked idea is easy, only matched in simplicity by the incredible frustration it ultimately causes. It's amazing how hopelessly twisted up we can get on a problem. Sitting back, taking a deep breath, and regrouping is sometimes the fastest way forward.
It could mean grabbing someone nearby (poor them, lol) and explaining what you're trying to do. Even if they don't have a clue what you're talking about, having to form coherent sentences can suddenly bring on the inspiration that's been so elusive. Call it rubber-ducking, soundboarding, or whatever, I've been on both ends and it works. Our minds are so weird.
Even better, if the other person does start asking for more details, teach them. Stephen Ritchie shares a personal story right at the beginning of Pro .NET Best Practices, where he had to deal with a coworker who told him a project was so simple even a 5 year old could understand it. Talk about arrogant! But Stephen asked him to explain it to him like a 5 year old then, and that worked for both for them. Assuming (in a respectful way) that the other person knows as little as possible about what you're doing, and starting from the start, can be a great way to realize you missed something too.
If all else fails, try writing some documentation around whatever you're doing. I like to plan out work for our team using Visio and Word on SharePoint, but whatever you have at hand will do. If you're in the middle of something and it's just not making sense, start documenting it out as if someone else is going to have to do it... even if someone else is just you later this afternoon.
The process of slowing down isn't easy, at least not for me and I suspect not for a lot of others too. Whether it's pride or stubbornness or panic at a looming deadline, it's very easy to forget that sometimes slowing down (or coming to a stop, or even backing up) is the best way to keep moving forward.
We all want progress. But progress means getting nearer to the place where you want to be. And if you have taken a wrong turning then to go forward does not get you any nearer. If you are on the wrong road progress means doing an about-turn and walking back to the right road and in that case the man who turns back soonest is the most progressive man. There is nothing progressive about being pig-headed and refusing to admit a mistake.
~ CS Lewis, The Case for Christianity