Categories
Coding FooBar Front End

Premature complexity: an enemy of innovation

For +13 years or more than 12k hours, I’ve been trying to solve problems using code. Of those, I found myself over and over again surrounded of the same principles: “Don’t Repeat Yourself, Keep it Simple Stupid, Write Once Test Twice, etc”. I’ve tried to abide by those as much as possible. But I found my self entrenched in a complex system of thought that started to become a weight around my ankle instead of helping me move forward.

I believe that progressive enhancement is a journey. It is impossible to know every single requirement before hand without expending your whole life in the process. That means that innovation is not a result of a deep thought process but one of opportunity cost. If the problem is big enough, it will take considerably longer to come to a solution, still it will not be a perfect one. It’s the constant reiterative thinking of the problem and its minutia that drives innovation and problem solving.

Sometimes I’ve found myself in intricate system designs or shiny algorithms that make me feel smart but do little to push innovation forward. External complexity, the one that is not intersect to the problem being solved, needs to be eluded as much as possible. Don’t try to build a compiler if your problem is not compiling. Keep the focus, I’d tell myself. But it is hard. Because as we start to work on a single problem, we can start to see the other multiple problems that call for help. Those are on their own way of innovation, great motivations but even better distractors.

Complexity is a natural outcome of mature products. But they shouldn’t be of early ones. Introduction of new layers of complexity should be delayed as much as possible and considered as a way to slow down innovation. Movement and transformation, iteration and ideation, require fluidity of models and technologies that allow for continual improvement. Innovation thrives in low regulated environments, think of complexity as extra regulation added to your solution.

In any stage of problem solving, I suggest to my future self to consider the fastest approach to a professional technical solution, reduce complexity by focusing on the real problem and reject as much as possible any introduction of tangential complexity that would slow down progress.