We evolved from writing technical not so useful code to writing specifications.
Don’t misunderstand, when I am talking about specifications, I am talking about code. I am talking about coding crystal clear specifications even a computer can understand.How can we write “good” code?
Good code has two characteristics: it is useful for the business and usable for the developers. (usable in the meaning of Alexandru Bolboaca and Johan Martinsson , for more information please refer to Alexandru’s book currently in writing, or Johan’s blog).
To write useful code, we need continuous domain knowledge crunching and refining. We want to avoid technical stuff producing no direct value for the business.
To write usable code, we want to write code with clear abstractions, and easy navigate around these abstractions. We also want to replace/modify some code without pain.
From a business point of view, unless they are in a really specific context, they don’t need to know how to pad left. They don’t need to explain it either, because it’s obvious.
In most modern languages, these obvious and technically common operations are part of the core framework. Even if we know how to code them, even if it is quick to code, we don’t want to, because it creates no value for the business, and no usability for the developers. It does not make our code better.
It’s dangerous to say « We should not depend on other libraries, we should rewrite what we need! » Where do we put the bar for « rewriting? » Should we stop using NPM? JQuery? What about .NET and Java? It’s not the user’s fault, it’s the design’s fault.
That’s a core rule from UX translated to usable software design. We should always keep it in mind when trying to understand a problem.
The lesson from this “left pad” story is not that we should re-write everything to depend on nothing, but that NPM’s design allows a library to be deleted, or worse, to be changed.
Asking every .NET developer to write these themselves is not the solution, even if writing a concatenation function is easy.
It’s unsustainable, a whole ecosystem cannot be built on an unstable foundation. If we want an ecosystem to evolve, we need a rock solid foundation.
This story shows how immutability is fundamental when thousands of users are depending on us.
The difference between bad dependencies (big frameworks) and good dependencies (little libraries) may be tricky. The key is: if the hidden part seems obvious to us and adds no value to our business, then it’s a good dependency. Otherwise we should prefer to rewrite it in complex contexts, because we will quickly be limited by what we don’t understand in our framework anyway.
This story should teach us that building an ecosystem is hard, and requires immutable, solid foundations. Please don’t re-write everything.
Let’s evolve together.