What kind of software engineer should I become?
In todays IT market, is it better to be a specialist, a generalist or something else?
The other day I tweeted it would be best for software developers in their early careers to avoid startups.
It's a bit provoking and bold statement and it feels counterintuitive. In a startup you can learn how to be a generalist and a pretty good one, so why the statement?
What does it mean to be a generalist?
Simply put, you know many things. Generalist is often described as a full-stack developer. I disagree. Full-stack as a subset of a generalist in the context of experience.
frontend + backend (+ database) = full-stack
mobile + backend (+ database) = full-stack
frontend + mobile + backend (+ database) = full-stack
Generalists can cover much more: Infrastructure. Cloud. Data. CRM's. Databases. QA. Security. Backend. Frontend. Mobile...
I have been in on a technical interview, where I explained that I know mobile, backend, frontend a bit, AWS with Terraform, doing video courses etc.
Interviewer said: "So you're a full-stack."
I said: "No I'm not. I am mediocre at many things however my skills are best at mobile and backend."
What does it mean to be a specialist?
Well, you specialize in one thing only.
I am an android developer - says you have specialized in android only.
I am a data engineer - says you do nothing else but data-related architecture and development.
I am a .NET developer - ...
You get the point.
Which one is better?
Let's look through the prism of how much experience you have.
If you just started your career - be a generalist.
You need to learn as much as possible from as many different fields. Truth is, usually, you won't be that generalist.
As you land a new job, you'll focus on being the best you can at that one thing you're working on. It's up to you to be curious and explore many other things you could be working on.
Once you accumulate a couple of years in the industry, you have the luxury of specializing in something.
But here is the trick - specialize at multiple things, not just one. This is what is called Generalizing Specialist.
In the software industry nowadays, you don't wanna limit your opportunities by knowing one technology too damn good. Find your niche, expand it a bit and specialize. It helps with the identity of the company as well. Eventually, you'll be more wanted, and more expensive.
In his series of tweets, @thiagoghisi is talking about this and described Generalizing Specialists as "Jack of MANY Trades and Master of SOME".
I think that such a description fits perfectly. A warm suggestion to go and read the whole twitter thread.
So, why "avoid" startups early in your career?
Usually, early-stage startups are rushing to make something useful, as they are constantly running out of money. In this critical period, you'll be on your own more or less, while you could really use proper mentorship and guidance.
Therefore, seek for good mentors to guide you through the wood until you look at the green field.
You can form a diamond only once. Therefore, there is no greater danger for someone who is fresh in the industry, than to learn things in the wrong way and to be mediocre at everything.