Three years into my career, I had an identity crisis.
The specialist path: “Master React. Become the React expert everyone comes to.”
The generalist path: “Learn everything. Frontend, backend, DevOps, design, product.”
Everyone had advice:
Senior Dev A: “Specialize. Companies pay for deep expertise.”
Senior Dev B: “Be a generalist. Adaptability is the future.”
Recruiter: “Be T-shaped. Deep in one area, broad across many.”
Me: “What the hell does T-shaped actually mean?”
I tried the specialist path first.
For six months, I learned nothing but React.
Read every blog post. Took every course. Built ten React apps.
I became good at React. Really good.
But then:
Project requirement: “We need this to persist data. Can you build the backend?”
Me: “I only know React.”
Manager: “Can you learn?”
Me: “I… don’t know anything about backend.”
I was a specialist who couldn’t ship a full feature.
So I switched to generalist mode.
For six months, I learned everything:
Backend (Node, Python, Go), databases (SQL, NoSQL), DevOps (Docker, Kubernetes), cloud (AWS, GCP), mobile (React Native)…
I knew a little about everything.
But then:
Interview question: “Explain React’s reconciliation algorithm in depth.”
Me: “Uh… it’s… the virtual DOM… and… it compares?”
Interviewer: “We’re looking for someone with deep React expertise.”
I’d become a generalist who couldn’t compete with specialists.
Neither extreme worked.
Then I discovered T-shaped learning.
And everything changed.
The T-Shaped Model
The T-shaped person:
Breadth across many areas] A --> C[Vertical Bar:
Depth in one or two areas] B --> D[Frontend | Backend | DevOps | Design | Product] C --> E[React Expert Level] style B fill:#4d96ff style C fill:#6bcf7f
The horizontal bar (top of the T): Broad knowledge across many domains.
You know enough to:
- Have intelligent conversations
- Understand how pieces fit together
- Know what you don’t know
- Collaborate effectively
The vertical bar (stem of the T): Deep expertise in 1-2 areas.
You know enough to:
- Solve hard problems
- Be the go-to person
- Command higher pay
- Deliver expert-level work
The magic: The combination.
You can ship full features (breadth) while being excellent at your specialty (depth).
Story: The Full-Stack Developer Who Couldn’t Get Hired
Meet Alex.
Alex was a full-stack developer.
On paper, he looked amazing:
- Frontend: React, Vue, Angular
- Backend: Node, Python, Ruby, Java
- Databases: MySQL, PostgreSQL, MongoDB
- DevOps: Docker, Kubernetes, AWS
In interviews:
Interviewer: “Tell me about a complex React problem you solved.”
Alex: “I’ve used React on a few projects. Built some components.”
Interviewer: “Okay, what about scaling a backend service?”
Alex: “I’ve deployed a few apps. Used Docker.”
Interviewer: “What about database optimization?”
Alex: “I’ve written queries. Used indexes.”
Result: No offers.
The problem: Alex was a mile wide, an inch deep.
He knew a little about everything. He was an expert at nothing.
Companies want:
- Deep expertise in their primary need
- Breadth to understand the full system
They don’t want:
- Shallow knowledge everywhere
- No depth anywhere
What Alex needed: Pick one area. Go deep. Maintain breadth elsewhere.
The Depth-Breadth Matrix
The Specialist] A --> C[Shallow and Wide
The Dilettante] A --> D[Deep and Wide
The Polymath] A --> E[Shallow and Narrow
The Beginner] B --> F[Pros: Expertise, high pay
Cons: Inflexible, vulnerable to change] C --> G[Pros: Adaptable, curious
Cons: No expertise, low value] D --> H[Pros: Valuable, adaptable, innovative
Cons: Takes years to build] E --> I[Pros: Easy to start
Cons: Limited value] style D fill:#6bcf7f style B fill:#ffd93d style C fill:#ff9999 style E fill:#ff6b6b
The Specialist (Deep and Narrow):
Great at one thing. Struggles outside that domain.
Example: React expert who can’t write SQL.
The Dilettante (Shallow and Wide):
Knows about many things. Expert at none.
Example: Alex from the story above.
The Polymath (Deep and Wide):
Expert in 1-2 areas. Competent across many.
Example: Frontend expert who can also ship backend features, understand DevOps, talk to designers.
This is the goal.
But it takes time.
The Beginner (Shallow and Narrow):
Everyone starts here. It’s fine. Don’t stay here.
My Journey to T-Shaped
Here’s what actually worked:
Phase 1: Establish Depth (Year 1-2)
Goal: Become legitimately good at one thing.
My choice: Frontend development (React specifically).
What I did:
- Built 10+ React projects
- Read React source code
- Answered React questions on Stack Overflow
- Wrote blog posts about React internals
- Contributed to React-related open source
Result: I could solve hard React problems. I was the React person on my team.
Why depth first:
- It builds confidence. You’re legitimately good at something.
- It provides a foundation. Many concepts transfer.
- It creates value. Companies will hire you.
- It gives you credibility. People trust your judgment.
Phase 2: Add Strategic Breadth (Year 2-3)
Goal: Learn enough about adjacent areas to be effective.
What I added:
Backend basics:
- Enough to build simple APIs
- Enough to understand backend engineers
- Not enough to architect complex systems
DevOps basics:
- Enough to deploy my own projects
- Enough to debug deployment issues
- Not enough to manage infrastructure
Design basics:
- Enough to implement designs correctly
- Enough to give design feedback
- Not enough to create designs from scratch
Product basics:
- Enough to understand product decisions
- Enough to contribute to product discussions
- Not enough to own product strategy
The key: I didn’t try to match specialist-level knowledge.
I just wanted enough to:
- Be dangerous (can build if needed)
- Collaborate effectively (understand their world)
- Make better decisions (see the full picture)
Phase 3: Deepen the Spike (Year 3-4)
Goal: Go from good to expert in my specialty.
What I did:
- Studied advanced React patterns
- Built a complex state management library
- Spoke at conferences about React
- Consulted on React architecture
Result: I was no longer just good at React. I was an expert.
Why return to depth:
The breadth was useful, but expertise is what creates leverage.
Phase 4: Add a Second Spike (Year 4-5)
Goal: Develop expertise in a complementary area.
My second spike: TypeScript and type systems.
Why TypeScript:
- Complementary to React (many React apps use TypeScript)
- Different enough to be interesting (language design vs. UI patterns)
- High leverage (applicable across many languages)
Result: Now I’m T-shaped with two stems.
Expert level] A --> C[Deep: TypeScript
Expert level] A --> D[Broad: Backend, DevOps, Design, Product
Competent level] style B fill:#6bcf7f style C fill:#6bcf7f style D fill:#4d96ff
This is the goal: π-shaped (or M-shaped).
How to Choose Your Depth Area
Not all depth is equally valuable.
Here’s how to pick:
Criterion 1: Market Demand
Ask: Is this skill in demand? Will it be in 5 years?
High-demand areas (as of 2024):
- Cloud infrastructure
- Data engineering
- Machine learning
- Security
- Developer tools
Lower-demand areas:
- Legacy technologies (unless you’re maintaining critical systems)
- Hyper-specific frameworks
The test: Search job boards. Count openings.
Criterion 2: Personal Interest
Ask: Can I sustain deep learning in this area for years?
If you hate it, you won’t go deep enough.
Example:
I tried to specialize in DevOps. I was good at it.
But I hated it. Every day felt like a grind.
Result: I switched to frontend. Loved it. Went much deeper.
The rule: Pick something that’s in demand and that you enjoy.
Criterion 3: Competitive Advantage
Ask: What unique combination of skills can I build?
Example:
Common: React expert
Less common: React expert + TypeScript expert
Rare: React expert + TypeScript expert + UI design background
The more unique your combination, the more valuable you are.
Criterion 4: Leverage
Ask: Does expertise in this area unlock other skills?
High-leverage skills:
- Programming languages (understand one deeply → learn others faster)
- System design (applies everywhere)
- Data structures (foundational)
Low-leverage skills:
- Specific tool syntax (doesn’t transfer)
- Framework-specific patterns (becomes outdated)
The pattern: Prefer depth in principles over depth in tools.
The Breadth Strategy
Breadth isn’t about learning everything.
It’s about strategic exposure.
My breadth framework:
Layer 1: Awareness (Many areas)
Goal: Know it exists. Know when it’s relevant.
Example areas for me:
- GraphQL
- Rust
- Blockchain
- Game development
- Hardware
Time investment: 2-4 hours per topic. Read one good article. Try one tutorial.
Result: When someone mentions GraphQL, I know what it is and why it might matter.
Layer 2: Competence (Adjacent areas)
Goal: Can do basic work. Can collaborate effectively.
Example areas for me:
- Backend APIs
- SQL databases
- Docker
- Git/GitHub
- UI design principles
Time investment: 20-40 hours per topic. Build a small project.
Result: I can ship a simple backend if needed. I can review a backend PR intelligently.
Layer 3: Proficiency (1-2 complementary areas)
Goal: Can do significant work. Can solve non-trivial problems.
Example areas for me:
- TypeScript
- Node.js
Time investment: 100-200 hours per topic. Build multiple projects.
Result: I can own significant features in these areas.
Layer 4: Expertise (1 primary area)
Goal: Can solve hard problems. Can teach others.
Example area for me:
- React
Time investment: 1000+ hours. Years of deliberate practice.
Result: I’m the person others come to for React problems.
The pyramid:
React] --> B[Proficiency: 2 areas
TypeScript, Node.js] B --> C[Competence: 5 areas
Backend, SQL, Docker, Git, Design] C --> D[Awareness: 10+ areas
GraphQL, Rust, Blockchain, etc.] style A fill:#6bcf7f style B fill:#4d96ff style C fill:#ffd93d style D fill:#ff9999
Common Mistakes
Mistake 1: Collecting Skills Without Depth
The pattern: Learning surface-level knowledge across 20 technologies.
Example:
“I know React, Vue, Angular, Svelte, Next.js, Gatsby, Remix…”
Reality: You’ve done tutorials. You haven’t built anything complex.
The fix: Pick one. Go deep. Then add others.
Mistake 2: Going Too Deep Too Early
The pattern: Spending 3 years on one framework before learning anything else.
Example:
You’re a jQuery expert. The world moved to React. You’re now stuck.
The fix: Build depth, but maintain enough breadth to adapt.
Mistake 3: Confusing Breadth with Distraction
Breadth: Learning adjacent skills strategically.
Distraction: Chasing every new shiny thing.
Example:
Strategic breadth: You’re a frontend dev. You learn basic backend to understand full-stack context.
Distraction: You’re a frontend dev. You learn Rust, then blockchain, then game dev, then ML, all superficially.
The fix: Breadth should support your depth, not replace it.
Mistake 4: Premature Specialization
The pattern: Picking a specialty on day 1 before exploring.
Example:
Day 1 of programming: “I’m going to be a React specialist!”
Problem: You haven’t tried anything else. How do you know?
The fix:
Months 0-6: Explore broadly. Try different areas.
Months 6-24: Pick a specialty based on what you enjoyed and what’s valuable.
Years 2+: Go deep in your specialty while maintaining breadth.
Mistake 5: The “I’m a Generalist” Excuse
The pattern: Using “generalist” to justify never developing expertise.
Example:
Interview: “What are you expert in?”
Candidate: “I’m a generalist. I don’t believe in specialization.”
Translation: “I’ve never gone deep enough to be great at anything.”
The fix: Be T-shaped, not just wide.
The Depth-Breadth Timeline
Here’s a realistic timeline:
Year 0-1: Focused Depth
- Pick one area
- Go deep
- Ignore breadth (for now)
- Goal: Become competent in your specialty
Year 1-2: First Breadth Layer
- Maintain depth (keep practicing your specialty)
- Add adjacent skills to competence level
- Goal: Can collaborate effectively across the stack
Year 2-3: Deepen the Spike
- Go from competent to expert in your specialty
- Maintain breadth (don’t let it decay)
- Goal: Be the go-to person for your area
Year 3-5: Second Spike or Broader Breadth
- Option A: Add a second area of expertise
- Option B: Expand breadth to more areas
- Goal: Become more versatile while maintaining expertise
Year 5+: Refinement
- Deep expertise in 1-2 areas
- Competence across 5-10 adjacent areas
- Awareness of 20+ areas
- Goal: Be uniquely valuable
The key: This takes years. Don’t rush it.
Real-World Examples
Example 1: Sarah - The Valuable Frontend Engineer
Year 1: Learned React deeply. Built 5 projects. Read source code.
Year 2: Added TypeScript, basic Node.js, UI design principles.
Year 3: Became React expert. Contributed to open source.
Year 4: Added GraphQL and state management expertise.
Year 5: Sarah is now:
- React expert
- TypeScript proficient
- Can build simple backends
- Understands design
- Knows GraphQL
Result: Commands $200k+. Multiple companies compete for her.
Why: She’s not just a React dev. She’s a React expert who can ship full features and communicate across teams.
Example 2: Mike - The Stuck Specialist
Year 1: Learned jQuery. Got really good at it.
Year 2-5: Only jQuery. Ignored new frameworks.
Year 6: Companies stop using jQuery.
Year 7: Mike can’t find jobs. His expertise is obsolete.
What went wrong: Too narrow. No breadth. Couldn’t adapt.
Example 3: Alex - The Shallow Generalist
Year 1: Tried React, Vue, Angular.
Year 2: Tried Node, Python, Go.
Year 3: Tried AWS, GCP, Azure.
Year 4: Alex knows about many things. Expert at none.
Result: Can’t compete with specialists. Can’t command high pay.
What went wrong: All breadth. No depth.
How to Maintain the T-Shape
Once you’ve built it, you need to maintain it.
Tactic 1: The 70/20/10 Rule
70% of learning time: Deepen your primary expertise.
20% of learning time: Maintain and expand breadth.
10% of learning time: Explore new areas for awareness.
Example week (10 hours of learning):
- 7 hours: Advanced React patterns
- 2 hours: Learning about GraphQL
- 1 hour: Reading about Rust
Tactic 2: The Project Mix
Don’t only do projects in your specialty.
My mix:
- 60% of projects: Deep in my expertise (React apps)
- 30% of projects: Use breadth skills (full-stack features)
- 10% of projects: Experimental (try new tech)
This forces you to maintain breadth while building depth.
Tactic 3: The Teaching Test
Teach your depth. Learn your breadth.
For depth: Write blog posts, give talks, mentor others.
Why: Teaching forces you to understand deeply.
For breadth: Take courses, read docs, do tutorials.
Why: You don’t need to teach it, just use it.
Tactic 4: The Currency Check
Every 6 months, ask:
“Is my depth still valuable? Is my breadth still relevant?”
If no: Adjust.
Example:
I was deep in class-based React. Hooks came out.
Currency check: Class components becoming outdated.
Action: Learned hooks deeply. Updated my expertise.
Final Thoughts
I wasted a year trying to be a specialist.
Then I wasted a year trying to be a generalist.
Neither worked.
What worked: Building a T.
Deep in React. Broad across frontend, backend, DevOps, design.
Now I can:
- Solve hard React problems (depth)
- Ship full features (breadth)
- Collaborate across teams (breadth)
- Command high pay (depth)
- Adapt to change (breadth)
The T-shape isn’t a hack.
It’s a multi-year investment.
But it’s the best investment I’ve made in my career.
Start with depth. You need to be good at something.
Add breadth. You need to be useful on a team.
Deepen the spike. You need expertise to be valuable.
Optionally add a second spike. You need to be unique.
Don’t be a specialist who can’t ship.
Don’t be a generalist who isn’t excellent at anything.
Be T-shaped.
Deep enough to be expert.
Broad enough to be effective.
That’s where the value is.
Where are you on the depth-breadth spectrum? Do you need more depth or more breadth right now?