The Problem with Solutions

   

  

Have you published a response to this?

By instinct when faced with a problem we often grasp for solutions before fully understanding or appreciating the given problem. This missing context is often the source of new problems we didn't initially anticipate. Now we have more than one problem.

“The major cause of problems are solutions.” — Eric Sevareid

The easiest way to eliminate conditions of a given problem is stop doing the thing that creates the problem. The classic joke "doctor, it hurts when I do this" and the doctor replies "well, stop doing that" is deep wisdom. Programmers love the acronym YAGNI (you ain't gonna need it) but we tend to practise the idea a lot less than we say it.

Undifferentiated Heavy Lifting

Undifferentiated heavy lifting is a term often used in the context of cloud computing. It refers to the necessary but repetitive and non-differentiating tasks that companies must handle to maintain their cloud infrastructure. This can include managing servers, scaling databases, ensuring security compliance, and other foundational tasks that consume valuable time and resources but don't directly contribute to a company's unique value proposition.

In essence, the idea promotes identifying what really matters for your business's growth and outsourcing as much as possible to cloud services to create as much space as possible to focus on what you do best, which likely is not managing infrastructure. Said plainly, a sneaker manufacturer should not manage data centers. Taken to a logical extreme this shoe company might only write extremely high level code leaving behind all the concepts of physical infrastructure to the vendor never losing cycles to configuring networks, patching operating systems, or replacing hardware.

This idea of eliminating undifferentiated work does not have to be solely about cloud infrastructure. It feels kinda scary but embracing programming minimalism can significantly enhance productivity. Limitations absolutely foster creativity. Instead of adding another dependency can we use the native runtime platform? Maybe you can use the built-in node:test module instead of bringing in another library, and the maintenance burden that implicitly creates? Could we consider JSDoc for TypeScript instead of struggling with hard-to-debug artifacts of lossy transpiling? What are the merits of writing HTML instead of compiling it from a non-standard higher level dialect? Are the tradeoffs worth it? What can we remove?

The Best Solution

The best solution to a problem is eliminating the conditions that create that problem rather than adding another solution that creates new unique problems.

webdev serverless philosophy

Selfie of Brian LeRoux sitting with his cat Sutr0
Brian LeRoux on March 29, 2024
Follow me • MastodonGitHub