The title is my attempt at clickbait.
A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyse a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.
Robert Heinlein, Time Enough for Love[1][2]
It’s been 20 months since I became a team lead. I was a frontend developer before, I was miserable for the first six months of leading. It was a massive adjustment.
Before leading, I always took pride in implementing any spec you could throw at me; I would give you a high-quality implementation in no time. I hated calls (still do), inefficient product discussions, meetings, and the whole admin stuff. Just give me the spec, I always repeated.
Wrong assumption
This model of the world assumes there are all-knowing leaders who will steer the ship, and they’re not me, I’ll just operate the engine, without any navigational sense, trusting them with my career and time.
But these people don’t exist. No one knows the whole truth, we’re all throwing educated guesses at best. And we all need every brain cell involved in the operation to think hard about the ship’s direction and understand it and help steer it.
What are you, then?
I’m a product person, I make products. I ship. I obsess about what the users want and about running a profitable business. I don’t care about TypeScript, PHP, JavaScript, etc. I want a beautiful working product and I aim to understand it from A-Z. Specialization is valuable, but it carries a huge risk of being a distraction.
Anyone in the entire stack should care about the product, and have opinions about it, and fight on behalf of the user.
The disconnect between designers and developers is one symptom of this specialization. The fights over Vim or VS Code, the “PHP is dead” crowd, a ton of noise all over the place is just insect-thinking.
Being a frontend developer should be an assignment, not an identity. A mere temporary bias. Preferring VS Code or Vim or whatever should be an acknowledged bias, slightly more serious than a meme.
Product people are superstars
When I became a lead, and saw people smarter than me expecting me to hand out a spec, trusting me to have a fully formulated and good vision, it became instantly obvious that they’re putting too much faith in me. And the ones who don’t are superstars in my team. They help me steer, they don’t fight about implementation details, we share common goals. They don’t care about merging pull requests or closing issues. They care about having a running product and shipping it.
It’s much harder to be a product person. It takes serious commitment and passion, but it goes a long way. And it’s a superset of all specializations.
It was an insane realization to me that most engineers at FAANG can’t make a product from DB to frontend. That’s disastrous in my opinion. Every engineer should be able to make running products, and if they can’t, they should really rethink their choices.
If you want to boost your career, start making products, think in product, imagine what a user will feel when using your product. Don’t worry about any other nonsense.
Closing quote and book recommendation
“Overspecialization can lead to collective tragedy even when every individual separately takes the most reasonable course of action.”
David Epstein, Range: Why Generalists Triumph in a Specialized World
Highly recommended book.