Back in 2018 I was asked about whether someone should become a Unix specialist.
In a similar vein, I saw a question on LinkedIn that asked whether someone should become a generalist or a front-end specialist or a back-end specialist.
Of course I had opinions :-) This is an extended take on my quick reply to the LinkedIn question.
Let’s scope this a bit better
I think, first, we need to think slightly wider than “front/backend”. A true generalist is more of a “full stack” person. By this I don’t mean they need to have knowledge of VLSI design, but knowing about CPU cache coherency might be useful. They don’t need to know about datacenter design, but being aware that some methods are less power efficient than others can help.
Definitely they should have knowledge from the platform layer up. So if you’re deploying to a Unix machine, having some Unix sysadmin skills would be useful; if you’re deploying to a k8s cluster then having some skills there helps. They don’t need to know how to configure a Cisco switch, but knowing TCP is a definite benefit. Being able to create database schemas, knowing when indexes are needed, monitor performance…
All these things are aspects a “full stack” developer should have.
Generalists
In my experience, I’ve found these people to be very valuable as part of a team. They may not be the best front end person nor the best back end person, but they know a bit of both. A good “full stack” person can talk to both those specialists, and the sysadmin, and the DBA and the network team and the firewall team and more. And, importantly, get those people talking to each other.
Because they have skills that overlap all these areas they can become team leads. They also may have a better overview of the project because they see how components fit together and how to do end-to-end analysis of data flow. Later may even become architects.
I’ve been that generalist. My first job kinda required it (managing Unix systems, networking, vendor relations, telex systems, telecoms…). Although I was primarily a Unix person I was also an old school code hacker; I wrote code in C, I wrote a complete shipboard general ledger system in TurboPascal, later I wrote the first commercial Java app sold in the UK (according to Sun Microsystems at the time, anyway!). Then later still an Oracle DBA, Window NT admin, Lotus Notes admin, web developer…
Having experience of all these things made me a more valuable person; for example, as a security architect I could see how things fitted and worked together; I could see the gaps and provide advice. I doubt I would even have reached that position if I had remained a Unix sysadmin.
We need specialists
But we need specialists. We’ve seen what happens when a developer tries to be a DBA (indeed one of the curses of the web is that it encourages this mess). The results are not as good, or sometimes miss some important aspect that a specialist would pick up.
So an employer needs both generalists and specialists on their team if they want the best outcome. They could get by with just generalists (less people to employee so cheaper), but the result may not be as good. Similarly, without the generalist the higher level architecture may suffer.
As time went on the technologies change; the DBA skills I learned for Oracle 8 still mostly apply to the latest versions, but there’s a lot more stuff that I’m not aware of. So, for example, when evaluating the security of ExaCS backups I relied on our senior DBAs to help fill in my knowledge gaps.
Similarly when looking at replacement Unix authentication tools I relied on senior platform engineers to do the hard design work for the infrastructure deployments. The generalist (me) saw how things should fit together (e.g. needing to enforce configurations, needing to integrate with the enterprise password vault, needing identity governance) and got all those teams working together; the specialists in each area worked out how to do the implementations.
A homelab could get me up to speed on some the technologies (especially if they’re free!) but it only got me so far.
Summary
There’s a methodology used by some to try and classify people; an I-shaped person is a specialist; they have deep knowledge in a specific discipline. A T-shaped person has a broader knowledge base but with a focus on one specific discipline. And then there’s M type people, who are multi-discipline.
I like learning new things and also getting people to talk to each other (“I don’t know that answer but you should talk to Fred Bloggs; he runs that stuff and will know the answer”). I’m an M-shaped person.
But I feel it’s essential to have I and T-shaped people in an organisation.
If I was starting over I think I’d follow the generalist path again.
But not everyone is suited for it, especially if you want to be “the best” at something. A generalist can be good at lots of things but there will always be people better than you in each of those areas.