We shape our tools, and thereafter our tools shape us – Marshall McLuhan.
So much time and energy is spared each time every day building something that is a pattern. If it is spent on abstracting individual instances to an idea, it can be implemented in a way so that reuse yields business value. It is only after using PFL that one would believe it saves time and money.
At the time when feature XYZ was being developed, all other teams were sincerely developing in whole or parts the necessary or missing pieces to put XYZ in place. My team (A-Team) did not require one line of code (including the backend) to embrace XYZ. The intention is not to underestimate or discredit the honest efforts of other teams but to propose and present modern ways to build software that would truly benefit the business. So the offering from my team was almost zero cost to the business for implementing and adopting XYZ. Some might critique that there is still the cost to test. Following is the counter argument:
<< contextual counter argument >> ... but it is safe to say that we can depend on the libraries from A-Team.
All we had to do for XYZ adoption was add a configuration line item. In an ideal world, we shouldn’t have to even add that. Imagine how rest of the applications would benefit the business if conceived and implemented that way.
ATL is built based on real time use cases or usage scenarios. The library defines and sticks to the semantics so that the developer can concentrate on high-level concepts or business problems, not mundane details. It helps the developer think of what instead of how. Besides satisfying the basic needs (commonly use cases), the libraries can be extended, if needed. The end effect is that the amount of code churned is relatively reduced and at the same time produce code with clarity of business logic.
Too Long, Didn't Read Syndrome - Readability is the first enemy of software maintenance. The library is guaranteed to make the user code succinct and human readable. Less code avoids TLDR syndrome. Less code there is to read, the higher the odds are that someone will actually read it.
The library in itself is succinct and uses advanced features of the language. Some of the limitations of the language are actually taken advantage of. It is not about some reductio ad absurdum contest where we use up all the clever tricks in our books to make the code fit into less physical space. It is actually practical, sensible strategies to reduce the volume of code an individual programmer has to read to understand how a program works.
Why do we need to take so much pain → rephrase → effort in doing these things? It is a tricky question to answer. Typically the truth in the answer is subjective. Software is an intangible thing. Unlike most other branches of engineering - civil or automobile, it is difficult to identify and realize the right way to write software. Worse, it is even more difficult to prove it because what seems right to one may not be so to the other. Most other branches of science/engineering have laws (of nature) that we cannot break or positively stated, we can depend on - force, gravity etc. For instance, if I were to build a bridge, I have to obey nature’s laws - for instance the length between the pillars being proportional to the maximum wind force. Failing to do so will have tangible results.
|Bridge Falling Animation|
Over time, we seem to have found only one way to identify and confirm the right way to build software. Different people say it in different words but it means the same. It is only through mind’s eye we have to think about how we intend to solve the problem, and also think how long and how well will it withstand the test of time. That enlightens us with the solution of the time!
In other words, we have to identify patterns, create models, and discover abstractions. We have to establish our own laws in software, more appropriately stated, define our conventions. It is lot like butterfly effect, and preventing it. Or... get control over the butterfly effect, if you will.
It is on these core principles that the ATL is built: abstract, reuse, extend!
Our ability to imagine complex applications will always exceed our ability to create them - Grady Booch, Father of Object Orientation
Time isn’t enough to think about and document all the different ways we can improve our software. Sometimes, or most times, we just have to do it. There are lots of radical improvements that would truly benefit the business. For instance, imagine the code base not needing to physically have CSS per sister-site, or any configuration for that matter, on disk. Imagine the day when adding a new sister-site is just a click of a button, truly a click of a button. That is the horizon we should aim for. We may never touch it but we can definitely learnt a lot and reap some benefits in its pursuit.
It was never the effort of one man. It has been the collective effort of the minds of the A-Team since the beginning. Even if denied by modest and affectionate team members, ATL has always been a product of inspiration, passed on from one to another.