The software world is moving away from specialist roles to generalist roles. When I started working, the term “Full Stack Engineer” was not to be heard. Today, everyone knows the “Full Stack Engineer.”
What gives to this trend?
- Better abstractions.
- Economies of scale.
- Market forces.
Software abstractions are getting better day by day. You can do more with less.
In the yesteryears, if you had to deploy server-side software, you needed someone to:
- Buy a physical server machine.
- Place the server in a data center and hook it up to the outside world(networking).
- Set up and upkeep the server.
- Deploy your software on the server and maintain it.
Each bullet point in the above is a specialized role. If you wanted to build software in this era, you had to employ these specialists in your organization.
Today, all developers have to do in the Serverless or Platform As A Service(PAAS) world is—write their code and click deploy. The abstractions magically take care of the rest.
You can do away with the specialists and only employ generalist coders to build software now.
Economies of scale
Even in a Serverless world, someone has to buy the server, place it in a data center, and do the gamut of work. Since the demand for software is high—software is eating the world—only a handful of companies(and people) can specialize in this and expose the service to others in the guise of Serverless and PAAS.
The economies of scale of software dictate that not every company that builds software has to hire these specialists. The number of companies building generic software outstrips the specialist companies—hence the buzz about generalist engineers.
Time to market is the mantra in today’s world. If you do not do it quickly, someone else will and eat your lunch. Companies want to be agile. In such a scenario, siloed roles within organizations dampen the pace.
Instead of having separate people(or teams) build software, test it, deploy it, and run it—which slows the pace—one person(or team) is tasked with these roles. Also, thanks to the abstractions, specialized knowledge required to be effective in these roles has reduced; a generic skillset suffices.
Take, for example, the role of a database administrator. Today’s databases have abstracted the specialist knowledge required to run, tune and maintain them so that a generalist engineer can do these tasks. You do not need a specialist.
The quality and maturity of tools(harking back to the point of abstraction) and frameworks make sure that the default settings(without extensive tuning and customization) give you a long runway for growth—with generalist teams. This also implies that a small set of specialists can service large generalist teams.
This trend will accelerate, as evidenced by the rise of No-code tools that eliminate the need for generalist engineers too. We are not far from a future where a layperson can build and deploy sophisticated software without programming knowledge.