When facing a complex problem, in programming (but probably also outside), the way to success is often in removing the blocking factors, which is probably not the problem itself, but most probably you. More practically, your lack of skills or proper tools. Working on those is the way to go.
Disclaimer : I’m the kind of person that writes woodcutting analogies without having ever cut any stick thicker than two of my fingers. Meaning my vision of woodcutting is probably as realist as The Onion. The good news is : this post is not really about woodcutting, so it probably does not matter.
Woodcutting in the morning
How difficult is it to cut a tree ?
Just for the sake of the example, let’s say you woke up this morning, took a look to your garden, and decided that it was time to cut the big oak that is blocking your view since so long. So, after the last coffee sip, let’s go to work.
If it the first tree you cut, you are probably not really well equipped either, and your quick trip in the marvelous world of woodcutting will end at best with a lot of sweat and effort for a very shallow cut in the tree, at worst with some blood and bandages.
It will probably be the time to call a professional woodcutter. Two hours later, he’s there, take a look at the tree, some basic measures, get back to his truck to get his chainsaw. Twenty minutes later, he’s gone without even breaking a sweat, the tree is neatly split in quite regular pieces of wood, and the view is clear.
Really, it does not look difficult at all.
The experienced woodcutter
What did the woodcutter do that made so much difference ? Not so much, actually : he took a good look of the situation to assert it, which any sane person would do. But this situation was exactly like a thousand other he has already encountered. This mean that he knew what to check (which kind of tree is this), and what to do with this information (is it especially hard ?). He also knew that making a partial cut would allow him to make the tree fall where he decided, to make his job of cutting it to piece easier.
Of course, every tree and every garden is different, your too. But the experienced woodcutter knows what matter in those differences, and can safely ignore the rest - he probably even not think about it.
But even the best woodcutter would have a lot of trouble without a good tool : a well sharpened saw with a good grip. Or more probably, a good set of tools : different trees and different gardens require different tools. Once the proper one has been selected, it become just a matter of discipline and some effort. Should the woodcutter be there with only my butter knife, he would probably not arm himself, but at the end of the day, the tree would still stand.
So, again, how difficult is it to cut a tree ?
“Difficult” is not about the problem
Roughly, the way the question is formulated is misleading : it is not a question about the tree. It is a question about the woodcutter. Yet, we still rank problems more based on their characteristics than about the person or team that need to solve them. Which is a bad idea, as in most situation, you cannot really “make” the problem intrinsically simpler.
It is true in many domains, and certainly in software development. Solving complex problems require skills and adequate tooling. My last consulting job was about getting a team up to speed on new technologies and rewriting a very old project using legacy technology. How difficult is it ? Actually, not so much, as I’ve done this kind of things several times before, meaning I have a proper methodology, I know where to look for potential problems, and where to start. The rest is just discipline and some effort. The “problem tree” is still outside, it did not change, but I’ve got experience in this. And I was allowed to bring my own toolbox, which make the situation actually quite simple to solve.
The importance of proper tooling cannot be overemphasized. Some of our work on Sybil require code parsing. Parsing is a really complex problem. It certainly looks like one. But given proper tooling (ANTLR for example), it is certainly solvable. Mastering those tools would make it a success.
So, next time you are facing a complicated problem, step back, and ask yourself if you got the proper skills to tackle it, and if you’re well equipped. If not, go learn something (or team with someone more proficient), and complete your toolbox. Sharpen your skills and tools, and the problem will probably look far more difficult. You cannot change the problem. But you can change you. I try to, everyday.
And if you're stuck with the complexity of managing your developers skills, we do have a proper tool.