dmvrtx

Optimise complexity

Humans evolved thanks to curiosity, fascination of the nature and trying its boundaries. Nowadays, curiosity continues to drive us to explore new areas. People do it to get a feeling of accomplishment when become able to solve complex challenges or find inter-connections. Or out of the fear of missing out. Others have a passion for something new. It can serve as an interesting past-time which produces something to bring about in the discussion.

With the learnings from those explorations and experience, there is an overlooked consequence of the urge to apply those learnings. Akin to how someone, who has learned a new language construct, tries to put it in use everywhere they can, and leans towards approaches that allow them to use it upon (simpler) alternatives.

What happens when this urge reaches an emerging developer? XCKD has an answer:

XKCD 1513: Code Quality

Everywhere around us people learn something new every day and subconsciously look for a ways to put it to practice: bits of the new language, cooking recipes, stories, ideas, concepts and connections among other things. And they do it even more in the competitive environment, such as office space.

The more complex and shiny in the eye of the beholder the new concept is, the more damage it can make in the end, if attempted to use in the inappropriate place. Company processes can become a complex labyrinth of requirements. Or software system can be built to the extent that its operators require months-long trainings to operate it to solve a problem it was built for.

We are the only gatekeepers who control the flow of those complexities in the things we do. Our duty is to be vigilant in identifying then it is creeping into the inappropriate places and ruthlessly stop it from propagating beyond the designated scope.

E.g. a software developers should aim to build good enough to solve a challenge. In other words optimise complexity to solve a defined business problem. And if complexity is required on the certain level, build an interface around it, simple enough to address majority of the use cases, leaving the edge ones to be dealt with by the development team.

See Also