Our language and vocabulary shapes the way we think. Better understanding of language can help you make better decisions and to communicate them more accurately.
Knowing the components of a car allows you to better express what has gone wrong. Your mechanic will be able to diagnose a problem more quickly if you can say "it has trouble shifting into second gear" instead of "my car is broken".
Knowing the distinction between snow and sleet lets you know more about road conditions than someone who only knows the general term "ice".
For a similar reason, knowing more about the roles and expertise of software developers allows you to make better decisions about software development. If your vocabulary is stunted or confined to generalizations, your ability to organize a software team will suffer.
I've noticed that many managers and recruiters now lump software developers into two camps. In the imagination of these managers and recruiters, these two camps encompass the entire world of software development. They don't. The lose interpretation of front end, back end, and full stack developer leads to mistakes.
A "front end developer" generally means a software developer (or sometimes designer) specializing in the creation of web pages. A "back end developer" writes web apps or services that run on the server. A "full stack" developer, again in the popular use of the term, develops both the web page and the server app that provides it information.
According to this popular definition, "the stack" is:
I'm not sure if this terminology is borrowed from other engineering fields (where front end engineering has a completely different meaning), or if this was intended as a metaphor about the UI versus the rest of an app (instead of the web-centric meaning).
Unfortunately, many managers, and even some developers seem to believe a "full stack" developer does work in every branch of software development.
My grandfather, who was the kind of engineer that designed objects made with iron and steel, would have called this malarkey. Very few -- possibly zero -- developers do work in every branch.
The confusion is not their fault. "Full stack" is a terrible metaphor. Firstly, the word "full" implies that one works on everything. Secondly, the term doesn't even align spatially with the "front end" and "back end" metaphors. Nobody says the front of an object is stacked on the back of an object! Finally, as we shall see, there is plenty of technology between the "front" and "back" ends of a web app that "full stack" developers don't develop.
This terminology has made conversations about software careers challenging. Mobile app developers have an especially difficult time (not to mention kernel developers, embedded software development, desktop app developers, browser developers, security developers, and so on).
An iOS developer specializes in software development for iOS devices. There is little overlap with web development. And yet we see job postings requesting a "full stack" iOS developer, and folks don't get promotions because they aren't "full stack" developers.
If there is a stack for web development, the OSI model probably encompasses it. The OSI model looks like this:
Very few of what are lazily termed "full stack developers" actually develop in or even understand the lower layers of the OSI model. If your "full stack" developer can connect an oscilloscope or logic analyzer to hardware to diagnose the physical layer, I'm impressed!
Similarly, only a small subset of "full stack" developers have worked on building a web browser. Yet the browser is ultimately responsible for the appearance of your web app, as we often see when a page doesn't work properly with Safari or Firefox.
Another "stack" to consider are operating systems, although the structure of OSs doesn't usually look like a simple pile of layers.
Among other things, the operating systems which help serve or render a web app consist of:
A "back end" developer's entire work typically takes place within the confines of an application written for the operating system. Rarely do even "full stack" developers write kernel extensions, or a TCP/IP implementation, for instance. They take advantage of what the operating system already provides.
Hopefully I've illustrated how the concept of a "full stack" developer fits into the larger universe of software development. "Full Stack" developers aren't the generalists the term sounds like; they're web developers who write both client and server code.
I believe that that both specialist and generalist software developers offer a lot of value to businesses. Which one has more value really depends on the needs of the company.
Small companies often desire generalists. If you can only afford a few developers, you need folks who can solve software problems spanning your entire product line. What that looks like depends on your business.
If you're building custom computing hardware or a mobile app, a "full stack" web developer looks a specialist, not a generalist.
If you're a SAAS company, then a "full stack" web developer might appear a generalist, while a front end developer looks like a specialist.
If you're a consultancy that only builds user interfaces for web apps, then a "front end" developer looks like a generalist, while a React developer might look like a specialist.
Larger companies tend to specialize. The actors in Disney Land parades don't also operate roller coasters. Similarly, larger software companies don't ask their web developers to write device drivers. Large companies even specialize software management into managers, product managers, project managers, and so on.
However, even small software companies sometimes need specialists. Small companies exist in 3D graphics, security, machine learning, cryptography, iOS development, and Android development. These niche businesses tend to hire (or train) specialists.
In the end, confusion around the kinds of development leads to organizational problems. Some managers and even developers make decisions as if "full stack" web development is a superset of mobile app development. This is false. Web development and native mobile development are orthogonal.
An iOS developer specializes in software development for iOS devices. The tools and programming languages of the native iOS developer have little overlap with the typical front or back end web developer.
This ignorance creates two issues. The first is a lack of understanding of mobile app development. The folks making broader technical decisions can't do their job properly without understanding how mobile apps work.
One problem I've encountered are service endpoints which switch from delivering plain text to delivering HTML. While a web page is happy to render HTML in the same places as plain text, the same isn't true for iOS apps. HTML assigned to UILabels and UITextViews won't style the text; the ugly HTML tags will be visible to the user.
Issues like these exactly illustrate how native app development is a separate expertise from web development.
The second issue is that this ignorance magnifies itself. I've experienced organizations where the technical leadership is ignorant of mobile technology without realizing it. Not knowing better, instead of bringing in mobile expertise, they make decisions as if native mobile technology were the same as web technology.
Eventually this leadership ignorance drives mobile expertise away. Sometimes poor technical decisions are made without consulting mobile developers. Sometimes career ladders were arranged to push native mobile developers into web work.
I know iOS an developer who was told they couldn't get a promotion unless they also did web development work. However, this principal wasn't applied equally. None of their web developers were expected to contribute to native mobile work. I can only assume that their management incorrectly saw native iOS development as a kind of web development instead of a completely different expertise.
At best "full stack" developers are a misnomer. What we commonly call "full stack" developers are generalist web developers. A native mobile developer (e.g. an iOS Developer) does their work with a different set of tools and programming languages.
It's important in any organization with iOS apps to provide a career track that includes iOS developers in the highest ranks of technical leadership. Good technical decisions can't be made without including expertise in each of your organization's technologies.
To recruit and retain iOS development talent, it's important to have a career track that allows that talent to continue to develop their expertise instead of forcing them to a different career.