The biggest misconceptions about full-stack developers
There are many different types of software developers out there. Some are generalists, while others are more specialized. The distinction in specialism is not only between application types, such as web vs native. Even in the same type of app, some programmers can build the whole thing and there are the ones whose expertise is only limited to one part of it, such as the user interface.
This distinction is particularly prominent in the world of web apps. There are those who only ever do the front end. There are those who don’t touch anything other than the back end. There are those who are experts in databases that wouldn’t do anything else. And there are also full-stack developers, who are seen as the ones who would be able to tackle all these parts of the software.
However, many people wonder if there is even such a thing as a full-stack developer. Technology moves forward at a fast pace; therefore even being a specialist is hard. In the web front end alone, new libraries and frameworks get released at an incredibly fast rate.
So, even in that narrow domain, keeping up with all of the changes is incredibly difficult. So how can somebody keep themselves up to date with front-end technologies while, at the same time, keeping up with the developments in back-end and databases?
The truth is, however, that full-stack developers do exist. And they are neither geniuses nor mediocre programmers who have a superficial knowledge of many technologies but aren’t masters in any. Perhaps, some do fall into either of these categories, but this is not how things are overall.
Before we continue with the article, let me give a shout-out to Project Ascend. This is not a sponsored placement and I am not getting compensated for mentioning it. I am mentioning it purely because I was genuinely impressed with the approach they use to help aspiring developers build realistic experiences and help them land their first job in IT.
The best thing about it is that it’s free to enroll in. Project Ascend is funded by organizations that it places engineers in and not the students themselves. So, if you are an aspiring developer, give Project Ascend a shot.
Now, let’s get back to our conversations about full-stack developers.
Full-stack developers know all the fundamentals
So, what makes one a full-stack developer? Primarily, it is the knowledge of all fundamentals of the core technologies that each layer of the application stack consists of. This includes the knowledge of the best practices for each of the layers. So, if a particular stack uses a relational database as the data storage layer, a full stack developer will not merely know basic SQL syntax, but will also know how to index tables and normalize the data structure.
At the same time, the same developer will be competent with the back-end code that lies between the data and the user interface. So, for example, if such code is written in C#, the developer will not merely know how to code in this language, but will also be aware of the difference between managed and unmanaged resources, reference and value types, conditional compilation, garbage collection, etc..
When it comes to the front end, the same developer will be competent enough to be able to build professional web pages. They will have a good knowledge of HTML, CSS, JavaScript, and some of the popular front-end frameworks and libraries, such as Angular.
As well as the above, a full-stack developer will know enough about the server software that hosts the web application. Perhaps, they wouldn’t have a very detailed knowledge of it, but would still know enough to be able to run and diagnose the applications.
Finally, a full-stack developer will be aware of the best security practices. Therefore, the app that they would build would not be vulnerable to common attacks, such as SQL Injection and Cross-site scripting. Likewise, user passwords for such an app are very unlikely to be stored as plain text.
However, breadth of knowledge comes at the expense of depth. Therefore, although a full-stack developer is fully capable of building a fully functional professional app, there are certain scenarios where advanced specialist skills would be more beneficial.
For example, it is unlikely that a full-stack developer would know as much about databases as a DBA would do. For databases that are designed to store relatively small volumes of data, this would not be an issue. However, when there are millions, or even billions, of records, someone with very detailed database knowledge would be needed to ensure that the performance remains at an acceptable level.
Likewise, although a full-stack developer would be capable of building a professional-looking front-end, there are scenarios where extra creative user interfaces with some advanced animations are required. A specialist front-end developers are much more suited for such a task.
Some degree of specialization is always needed
While the breadth of knowledge is important for full-stack developers, they still are specialists to a degree. This is because there are many stacks to choose from. There is LAMP, there is MEAN and there are several different flavors of ASP.NET Core, among many others. A successful full-stack developer is someone who, rather than knowing many of these stacks, knows one of them well.
It is impossible to be a successful software developer while also being a very broad generalist. John Sonmez emphasizes this point very well in his book, The Complete Software Developer’s Career Guide:
Think of it this way: suppose you wanted to be an “athlete.”
That is pretty dang broad. How should you train to be an “athlete?”
Maybe you should lift weights and run, but maybe you should practice swimming. Maybe you should hit a ball with a tennis racket.
Better do all those things and more, so you are prepared for any sport that you might end up getting on a team to play.
See how ridiculous that sounds?
That is how ridiculous—in fact even more so—it sounds when someone expects to be a “software developer.”
Instead, pick your sport.
Nobody does full-stack development all the time
While a full stack developer is someone who knows the whole of a particular technology stack reasonably well, it doesn’t mean that they work on all layers of the stack all the time.
Whether they will be working on the whole app or only a relatively small part of it, depends on how big is the organization where they work and how big is the app that is being developed.
Small start-ups have to be able to build software as quickly as possible by as few developers as possible. Therefore, this is an environment where full stack skills are most likely to be utilized to the full. This is where each developer is likely to be responsible for an entire app or a major feature of the software ecosystem.
Medium-sized companies are likely to have individual teams responsible for individual apps. However, it is still very likely that, at any given time, each member of the development team will be working on more than one layer of an application.
For example, for one person, it may be the front end and the part of the back end that is attached to it. For another person, it could be the data storage and the part of the back-end that manages the data. This is where full stack skills are still beneficial, but each person is unlikely to be able to utilize them all in the same project.
Finally, large organizations, such as Amazon, are likely to build very large and complex applications; therefore it would be impossible for any one developer to be familiar with the whole system. This is why such organizations tend to have a dedicated team responsible for a single feature, each of which usually lies within a single layer of stack. As a developer working in such an organization, you are not only unlikely to work on multiple layers of the stack but are unlikely to work on any single application layer in its entirety.
Of course, the size of the software is a more reliable indicator of whether full-stack skills are likely to be used. Large organizations sometimes also build small apps. Consultancy firms such as CGI, for example, run a large number of relatively small bespoke projects at any one time.
In this scenario, each project team operates as an independent software house. However, more often than not, the size and complexity of the software correlate to the size of the organization that is building it.
However, even for developers who work in medium and large organizations, it pays to know more than one technology component. If you are not utilizing some of your skills in the current project, it doesn’t mean that you won’t be able to utilize those skills in your next project. All it means is that there is a limited set of skills that can be utilized by a particular person at any one time.
Therefore, even in an environment where specialization is encouraged, as a full-stack developer you would have better choices of projects than you would have had as a specialist. However, as the size of the software that you work on increases, specialization becomes something that is enforced rather than merely encouraged. Therefore, if you join an organization where specialization is crucial, you are likely to become a specialist in a narrow area over time, even if you used to be a full-stack developer.
You don’t have to know it all
You have probably heard that to be successful as a software developer, you need to keep learning new technologies all the time. This is, technically, true. However, many programmers, especially the junior ones, misunderstand what this means.
New programming languages and other technologies are released all the time. For JavaScript alone, there are literally thousands of different frameworks, libraries, and toolkits on the market. Because of this, programmers often feel overwhelmed.
The good news is, however, that you don’t have to learn it all. Yes, there are indeed way too many JavaScript frameworks out there for any single person to learn. However, only a few of them stand the test of time. For example, in 2014, people were talking about Angular. It’s still popular in 2024, exactly 10 years later. This is why you don’t necessarily have to be an early adopter of every “hot” new framework.
Of course, Angular has evolved over the years. However, for someone who has learned the first version of it and continued using it, the changes that had to be learned were incremental and gradual.
Also, those frameworks that do stand the test of time seem to be very similar to each other. Anyone who knows KnockoutJS can easily transition to Angular or Aurelia. Therefore, to be a competent JavaScript developer, all you need to do is have a thorough knowledge of one or two frameworks and a couple of specialist libraries, such as Moment.js for time processing. That alone is sufficient to solve any problem that JavaScript can solve.
In fact, if you already have a thorough knowledge of any particular JavaScript framework, there are, pretty much, only two reasons why you should learn any other one. The first one is that your framework of choice doesn’t happen to solve a particular problem in the best way possible. To find out whether this is the case, you don’t have to do much. Just subscribe to a good web-based magazine related to front-end development. Anything great at solving specific types of problems ought to be mentioned there.
The second scenario where you will need to learn a new framework is when you move to a project where a particular framework that is different from what you already know is being used. However, as I said before, it will probably not be a very steep learning curve.
Also, as long as you have gained a good fundamental knowledge of certain technologies, you don’t necessarily have to keep up with them all the time. Imagine the following scenario: you have started on a project where version 10 of C# was used. After you’ve built the software, you’ve transitioned into maintaining it. The long-term plan is to eventually get the app decommissioned; therefore there was never any need to update the version of the language in it.
While your primary role was to maintain the software, versions 11 and then 12 of C# were released. However, you had no time to keep up with the changes. So, what would happen if you were to quit your current project and join one where the latest version of the language is used?
Well, nothing catastrophic will occur. If you are already familiar with most C# features up to version 10, learning a handful of features that were introduced in the two most recent versions will probably take you no more than a day. Therefore, you will still be absolutely fine.
So, this is how it is possible to be a full-stack developer and stay relevant while new technologies keep popping up. You don’t have to learn it all. You only need to keep up with those technologies that are relevant to your domain.
It is now easier to be a full-stack developer than ever
Another good news is that programming technologies tend to evolve in such a way that transitioning between different layers of the application stack becomes easier.
One of the most recent technology stacks, MEAN (which stands for MongoDB, Express.js, Angular, and Node.js) uses JavaScript as the main programming language all the way through. Not only does the language run in the front end as well as the back end but even data manipulation is done in the same way as you would normally call a method in JavaScript. The data itself is stored in JSON, which is a native data structure format for JavaScript.
However, even if you don’t pick up MEAN and stick to a different stack, you will still find your job as a full-stack developer easier than you would have done a couple of years ago. For example, it used to be necessary to write JavaScript code differently from how you would write code in a compilable language, such as C#.
Although JavaScript syntax loosely resembles the syntax of C-family languages, such as Java and C#, the language was not designed to be modular. Therefore, it was necessary to have large files where having access to shared data or functions was necessary.
Likewise, JavaScript variables are dynamic, which implies that completely different types of data can be assigned to the same variable without throwing any syntax errors. These language features were used to catch some developers off guard, especially the ones who were used to strongly typed languages.
However, since Node.js became popular, many tools became available for JavaScript to make it easier to use. For example, JavaScript applications can now be developed in a modular manner that resembles a pure object-oriented language. Likewise, supersets of JavaScript, such as TypeScript, made it possible to have the code strongly typed.
With both of these features enabled, writing JavaScript code became very similar to writing C# code. The same IDE can be used for both. Of course, the JavaScript that actually runs in the front end of your app is neither modular nor strongly typed. However, neither it is the JavaScript you have to manually write. Your modular and strongly typed code will get transpiled into pure JavaScript, just like your C# code is compiled into executable binaries.
Another good news for those developers who never used JavaScript is that it’s no longer the only go-to language in the browser. All evergreen browsers these days support a technology called WebAssembly which allows to run compiled code in browsers. The code itself can be written in a variety of languages, such as C, C++, Rust, and C#.
Wrapping up
So, as you can see, being a full-stack software developer is far from being impossible. A certain amount of learning is required, but probably not as much as some junior developers think.
“Full stack” part primarily refers to what your capabilities are and not what you do as a job on a regular basis. Keeping up with new technologies is important, but you will only need to focus on the ones relevant to your chosen domain.
One advantage of being a full-stack developer is that you will have more choices in terms of choosing your project. Therefore, if you are someone who likes programming, but gets bored easily, becoming a full-stack developer is a wise career choice.