Abstractions are much needed and essential for us in this world to function correctly. Though we don’t accurately understand how petrol/diesel comes from deep underground, you go an abstracted concept called Fuel Station. You don’t care how Banks works internally; you interact with the interface provided by Banks in the form of their websites or their buildings where people are sitting for you. They separate concerns so that one can do their job neatly and much.
In Software, abstracting away things is the norm. As you grow into a better developer or an architect, your entire focus goes into organizing your solution into folders, namespaces, packages, microservices, etc.. Even the companies divide themselves into teams and abstract them based on roles they need to perform. When you see a problem in UI, you directly contact your Lead UI person because it’s their responsibility. You either shower them with praises or rain fire on them, depending on the situation.
When you apply abstraction to Human Resources, the rules of coding don’t apply. It’s a different game. We often listen to people feeling pressure of working in a team, under a person. The problem is not just that person. It’s the chain of management above that person who lives in a simple assumption: “Well, we have abstracted some concerns into a team; it’s their headache how they do it.” As the technology evolved, the need for one person to take care of everything – referred to frequently as “full stack” also became a norm – and mostly, this is also a form of abstraction, to the least possible level – “a single human.”
Abstractions are not only to separate concerns, but they are also to identify problems, and they are the foundation to refactor.
It’s not the problem with the idea, it’s with the way we abuse abstractions. Abstractions are not only to separate concerns. They are to identify issues with ease and refactor your notions. The purpose of abstraction also should be to understand the problems teams have within them, groom them, nurture them – not to throw work at them and expecting results at insane speed and quality – that’s not the job of abstraction. It’s a way to organize.
Just because a concept called “Washing Machine” was abstracted, you don’t throw insane loads at it. As there is no way to measure Human potential, management often doesn’t know. As it’s hectic to track individual potential (though that’s what they are supposed to do), they abstract all team members into predictable abstractions – everyone should work for 8 hours and finish this much work. In companies with a lot of teams, there is no foreseeable way for problems to reach management, particularly technical problems. Unfortunately, abstractions though supposed to make teams lighter and move faster, become counterproductive and make things slower.
Some questions to keep asking your team: Are they struggling with some technology choice?
- Are they able to train peers properly – junior or senior
- What is killing productivity?
- If team members would change something, what would it be?
As a final note, when you are hiring external companies, freelancers also – the problem of management doesn’t go away. Understanding their issues and limitations is vital to create an environment of honest communication and address gaps.