You Must Tame Complexity to Become a Better Programmer
Stephen Young

Nice. I feel it should be said however, that all essential complexity is immutable. There is an absolute limit somewhere in the relationship between the number of things you wish to achieve, and the difficulty and mess one must create in achieving it. Failing to understand this will create more complexity, because in an effort to reduce said complexity, will effectively make you create more of it.

In some cases, your attempt to eliminate code complexity will create a worse kind of complexity: comprehension complexity and usage complexity, that is, by the code doing less, it requires the user to understand more of it, and requires the user to do more work to consume it.

Thus, your job is a balancing act, rearranging the essential complexity in the most clear and logical manner, balancing carefully on understanding your audience and applicable use-cases.

This is one of the hardest parts of programming, and even after doing it for many, many years, I still don’t feel I have a good enough grasp on it, and these concerns are what plague me when I’m in offline-coding mode, manufacturing ideas. A lot of ideas simply die because they would be impossible to create without simply creating problems worse than the problem they existed to solve.