We who code have been cursed.
We've trained our brains to think in code. We've somehow been blessed with the ability to speak to machines and order them about (I have no idea what I would have become in a different day and age). But with that blessing comes a curse: the curse of knowledge.
Once you know something, you can't unknow it.
It is very difficult to put yourself in the shoes of someone who *does not know *what you know. It's very difficult to explain to someone who does not understand how programming works, why this change is minor, and that change is a major upheaval. And yet doing so is a vital part of our jobs.
Otherwise, we toil in vain.
We need to be able to understand our users' needs. Then we try to find a compromise that offers the best mix of usability, speed, and cost. And communicate what different technical choices might entail in business terms. If we are unable to convey the implications of our choices in front of us, if we are unable to understand our users' needs, we run the risk of wasting everyone's time.
Effective communication is the prerequisite to being a good coder. And it is hard.
Explaining advanced computer science concepts — and why they matter — or even basic best practices requires time and mental agility. It often ends with blank stares and a shaky acknowledgment.
It's also a good way to ensure you know what you are talking about.
And in the long run it will make you a better coder.