How we think about a problem has a direct impact on the solutions that are available to us. What is or isn’t possible is oftentimes a fluid thing based on what we know and also what we believe. In software, virtually anything is possible but the level of difficulty often depends on our starting assumptions.
I’ve had the privilege of working with thousands of developers over the last quarter of a century in my career. The difference between a good developer and a super-star developer can be a factor of 100 to 1 (yes, really, I know developers who are one hundred times more productive than an average developer). I don’t think that is true for other professions. For example, I can’t imagine a carpenter being 100 times more productive than his fellow carpenter or a lawyer able to handle 100 times more cases than her colleagues but this can be true for software developers.
If you are a developer then you probably have the experience of thinking about a very difficult problem and then suddenly find a solution that makes the problem almost trivial. If you had this experience then you know there is the potential for huge productivity gains; we just need to have those epiphanies more often.
Flashes of insight may appear to be random but there’re not. There are things we can do to induce them. In fact, I would say that problem solving skills are really the thing that distinguishes great developers from average ones. Once we are able to understand a problem and see its solution the rest is merely typing.