little cubes

Full-stack Engineering is a Lie

A case for engineering specialization

Building an Engineering TeamSection titled: Building an Engineering Team

When managers sit down to build out a new engineering team, they have a lot of decisions to make. But one of the most important is how they’re going to structure that team.

A significant portion of companies in 2024 will decide to open several “Full-stack Engineer” positions.

The decision might seem obvious to some managers:

Why would I hire someone who can only do half the job when I can hire someone who will do both!

— Some manager, probably

Jack of all trades, master of noneSection titled: Jack of all trades, master of none

Everyone’s familiar with the phrase; it refers to someone who has many skills but no particular focus. In computer science terms we might say they have a lot of breadth, but no depth.

Imagine hiring a team of civil engineers to build a house. Each one of them is intelligent, highly educated, and has a lot of experience. They know a lot about the design and construction of houses and they’ve all done their fair share of woodworking. But how comfortable are they digging a foundation, putting up a new wall, or connecting to the city electrical and sewer?

When the stakes are high, you want the most qualified person to do the job. You want a specialist.

Contrasting Skill SetsSection titled: Contrasting Skill Sets

Here is an extremely incomplete comparison of some of the skills that Frontend and Backend web engineers are expected to have:

  • semantic html
  • CSS guru
  • create animations
  • design systems
  • custom svg
  • work closely with designers
  • responsive layout
  • accessible html
  • robust UI component APIs
  • application business logic
  • consume backend APIs
  • caching
  • performance optimization
  • automated testing
  • javascript bundle size management
  • performance optimization
  • configure javascript bundlers
  • deploy npm packages
  • javascript frameworks
  • reusable TypeScript types
  • server side rendering
  • time zone conversions
  • authentication
  • api endpoint design
  • database comparison
  • database management
  • continuous integration
  • database migrations
  • data pipelines
  • data models
  • manage server infrastructure
  • query optimization
  • containerization
  • container management
  • scalability
  • 3rd party integration architecture
  • data security
  • authorization
  • api versioning
  • audit logging

The extreme divergence of skills that are expressed purely on the frontend side of that diagram was described as The Great Divide by Chris Coyier. It has been further divided into front-of-the-front-end and back-of-the-front-end by Brad Frost.

Similarly, the backend side of the diagram has been further divided into DevOps engineering by much of the industry.

That is to say; either side of that diagram is likely too large for one person to master and keep up-to-date with. And yet a job posting for a “Full-stack Developer” expects one person to somehow have it all.

What you’re actually gettingSection titled: What you’re actually getting

The truth of the matter is that when you hire a “Full-stack” developer, you’re either getting a backend dev who wrote CSS one time, or someone lacking very important skills from both sides of the aisle.

In my experience, “full-stack developers” always translates to “programmers who can do frontend code because they have to and it’s ‘easy’.” It’s never the other way around. The term “full-stack developer” implies that a developer is equally adept at both frontend code and backend code, but I’ve never in my personal experience witnessed anyone who truly fits that description.

Brad Frost

The Solution: SpecializationSection titled: The Solution: Specialization

But you already knew that. There is a reason Harvard offers a PhD in Byzantine Studies and not one in “Social Studies”.

The math is simple; if the same person spends the same number of hours learning about half as many topics, they will be at least twice as knowledgeable in their field of study.

Hiring experts, each specialized in a particular area, is great for the business because it creates a team of people whose skills complement rather than duplicate each other. It’s great for the individual because it allows them to pursue their passion instead of floundering to keep up with an entire industry.

In ConclusionSection titled: In Conclusion

Yes plenty of devs exist that can write some code on both the frontend and the backend. But for at least 99 out of 100 of them, their skills on at least one of those are passable at best.

If you’re a manager, instead of opening 4 “full-stack” positions, opt for two frontend and two backend instead. The work will be higher quality, released faster, and stand up better over time.

If you’re feeling ambitious, or you would prioritize quality above all, maybe even consider what it would look like to hire a UX Engineer, a JavaScript Engineer, a Backend engineer, and a DevOps Engineer. These hyper-specific roles could also allow more junior engineers to flourish.

If you’re a developer early in your career, find the work that you’re passionate about and get really good at that. Jobs will hire you because you’re the best, which is so much better than being sub-optimal at a laundry list of things.

This is not a unique opinion.
But unfortunately, it still seems to be a controversial one.