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:

graph TD A[The T-Shape] --> B[Horizontal Bar:
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

graph TD A{Your Skills} --> B[Deep and Narrow
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:

  1. It builds confidence. You’re legitimately good at something.
  2. It provides a foundation. Many concepts transfer.
  3. It creates value. Companies will hire you.
  4. 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.

graph TD A[My Skills Profile] --> B[Deep: React
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:

graph TD A[Expertise: 1 area
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?