Hope you’re stable in a world that is increasingly tumultuous. Let's spend a second on an interesting topic to distract ourselves from the earthly problems around us: abstractions! Such a loaded term. On one hand, it’s apparent that “moving up” or increasing the amount of abstraction drives standardization and often increases productivity and ROI for the business.
Abstraction is often great for the organization but not so much for the individual contributor. I can recall countless conversations with developers that had to interact with platforms that were abstracting too much. The developers were able to get that database but just had to trust that it would fit to the applications’ needs, wait and, once it was provisioned, pray. Abstraction for the individual is often perceived as something negative or restrictive, as something threatening to their own ability and career path.
We’re ending in a tragedy of the commons scenario. Makes sense for the population but doesn’t make sense for me. What I always found fascinating is that in high performing software organizations I observe(d) a high degree of abstraction. Miraculously enough if you work for Google, Github & Co you’re very much abstracted away from, for example, the underlying infrastructure. Yet you never hear any of those brilliant developers lamenting about this. The opposite holds true. They love it.
It took me a while to understand why and this is my interpretation of it:
- Trust: individual contributors at Google trust their counterparts in infrastructure to do excellent work and deliver just the right resource component given the right circumstance.
- Validation: Borg (Google's IDP) does an excellent job at providing the exact context of what it chooses and why. These “test run” capabilities make a huge difference. You know precisely what will happen and you can debug behavior before “letting go”.
I recently did a webinar with Andrew Davidson, the SVP Products at MongoDB where we talked about “layered abstractions”. By layering you give individuals the opportunity to “validate” as they go down the layers. And by giving the option to validate, you gain trust. Nothing is more important in platform engineering than the developers' trust in the platform. A prime example of “layered abstractions” is the Declaration Application Model. The user chooses to stay on the level of the abstract workload configuration or can go deep into the last Terraform file. Creating an executable representation of an app from a layered abstraction is called dynamic configuration management.
Anyhow, just one thought that I cannot get out of my head. We’re also at KubeCon and we’re even throwing a Berlin-style party, House of Kube. Would love to see you there!
Take care!
Kaspar