What is a Full Stack Developer, Anyway?

“What is a full stack developer” is a question that mystifies non-programmers.  I understand this because I run a content agency that pairs techies with non-technical editors.  The term comes up, and those not steeped in tech kind of squint at you if you say that and ask, “what….?”

What Is a Full Stack Developer?  The Short Version

So first, let’s give the short, direct answer to this question.  A “full stack” developer is a software developer with a general enough skill set to build all required components for a working piece of software.  They can handle the database, the programming logic, and the user interface, and they put it all together to deliver.

In a nutshell, that’s what we software people mean when we toss around this term.  But I can understand if you’re still scratching your head.  You’re probably wondering about some things now.

  • Why is it some kind of special thing that a software developer knows how to build all of the parts of the software?
  • Why is writing all of the software called “stack” and what does it mean for it to be “full?”
  • What is the origin of this expression?
  • How does one become a full stack developer?
  • Should you want to be a full stack developer?

For the rest of this post, I’m going to answer those questions.  When you’re finished, you’ll know everything you could ever have wanted to know about the term “full stack developer” and some things about software development in general, besides.

Software Development Is More Specialized Than You Think

From the outside looking in, software probably seems kind of uniform.  You go learn to program and then you, well, program.  Sure, there are different languages and stuff like that, but they’re all just kind of different flavors of the same thing, the way that there are all sorts of different makes and models of car, but they all get you around town.  Right?

Well, not really.  There are certain fundamentals that underpin it all, but there’s so much variance that you wouldn’t even recognize some of the deliverable work product as being the same thing.  So rather than it being like different makes and models of car, think airplanes, submarines, and unicycles.

Some software developers build web interfaces like the one on which you’re reading this post.  Others write extremely specialized code that lives inside your Fitbit and has no visual component.  Still, others make animal sacrifices to keep 50-year-old mainframes running inside banks.  (Alright, the sacrifice part might be a mild exaggeration.)

Because software is so specialized, there are software professionals that really couldn’t deliver a complete product on their own.  If you build the logical guts of the Fitbit, you might not know anything about how to build the app on your phone that shows users the step counts.  And you probably also don’t know how to physically construct and fabricate the device.  So your contribution could not, in fact, stand alone.

Thus, we have the difference between what I will, for now, call a self-sufficient generalist software developer and a highly specialized one.

What Is a “Stack” and What Does That Have to Do With Being a Generalist?

You’ve probably guessed that our self-sufficient generalists are “full stack” and the specialists are, well, not.  I guess they’re “half stacks” or “empty stacks” or something.  The negative condition is actually not specified, so you and I are probably free to coin something here if we want.

But why “full stack?”  Who reached into the deep, dark bowels of the weird naming barrel and yanked that one out?

Well, a “stack” is actually a really core concept in computer science.  But relax.  Before you close the tab, it’s actually not hard to explain.  Imagine that I stacked a deck of playing cards on top of one another.  That’s a stack.

Seriously.  That’s it.  The last thing you place on the stack goes on top, and it has to be the first thing to come off.  It’s a simple physical concept, and it’s a core and simple concept in the software world.

It’s so core, in fact, that we started applying it to other concepts.  The various pieces of software that route messages around the internet are affectionately known as a network “stack.”  And the group of programming languages, frameworks, and libraries that come to make up developers’ toolboxes became known as their “stacks” in the same way that a tool belt became a generic metaphor for the tactics any professional of any kind can bring to bear.

So a “stack” of languages and technologies is the set of languages and technologies needed for delivering a software product.  And a “full stack” developer is one that knows all of them.

How Does One Become a Full Stack Developer?

Given the ubiquity of the term, especially coming from the mouths of recruiters, you might want to know how to become one.  And that’s actually pretty straightforward.

If you’re not a programmer, the alphabet soup of technologies that go together might seem daunting.  It might even seem random.

But it’s really not.

Spend some time in the industry and you’ll see patterns emerge.  Software shops that bill themselves as “rails shops,” for instance, will use a pretty common set of languages and frameworks.  Same with Java shops or .NET shops.  There will be some variance, but you’ll see a core of common technologies emerge in the way that, say, food pairings do.  There are a lot of foods out there, but similar combinations of them become recognizable as “breakfast,” for instance.

Once you’ve identified a stack and you learn some of its core techs, you’re almost there.  At this point, you just need to make sure that you know a representative language/framework/tool for each common component of an application.  At its most basic, this tends to involve a database (or another data storage mechanism), an application language (like C# or Java), and some kind of user interface framework (e.g. one of the many Javascript frameworks available).

Once you know a group of these technologies and you have all of the components covered, you can safely call yourself a full stack developer.  You don’t necessarily need to be an expert in all of them, either.  You can be passable in some, competent in others, and maybe an expert in one or two.

After All This, Should You Want to be a Full Stack Developer?

You now thoroughly understand what this term means, even if you’re not (yet) a techie.  At least I hope you do, anyway.  Please tweet at me if you have any questions.

The million dollar question then becomes, “should you want to be a full stack developer?”

And the answer to that is surprisingly nuanced.  At first, it might seem like a no-brainer.  The aforementioned recruiters all want you to be one.  And isn’t being able to deliver a total piece of software without help—being self-sufficient—better than not being able to do so?

It’s easy to say yes.  Being a full stack developer—a generalist—makes you imminently employable.  But it also makes you something of a commodity in that you’re a jack of all trades.  And that can lower your rate and your earning potential compared to becoming a specialist.

To put this into perspective, ask yourself whether it’s better to be a general handyman or an electrician.  A general handyman can probably find more work more frequently.  But the electrician probably commands more pay because of the expert, specialized nature of the work.

There are tradeoffs either way, and it’s not a decision to be taken lightly.  But it’s also not a no-brainer either way.  I will say this, though.  It’s an excellent career move in the early going to become a full stack developer.  Become useful and employable and get a good sampling of work under your belt.  That way, if you do decide to specialize for more profitability, you’ll have a solid experience base and the wisdom to fully understand the specialization choice.