The term “full-stack engineer” is often thrown around in the software industry, particularly in web development. Let me break the news to you, a real full-stack engineer is a mythical unicorn. In this post, you will learn about how and why there are ~nine actual full-stack engineers in this world, and you are not one of them. Still, you can be very successful in your software engineering career, carry on reading to know how.
Table of contents #
- What is a full-stack engineer?
- How are there like nine full-stack engineers, really
- There are surely no junior full-stack engineers
- Backend is diversified in languages
- Frontend varies on the framework aspect
- Choose your specialization and make it your forte
- Become a T-Shaped product-minded engineer
- Conclusion
What is a full-stack engineer? #
A full-stack engineer is a software engineer who can work on both the frontend and backend of a web application. They are proficient in both frontend and backend technologies and can work on all aspects of a web application, from the user interface to the database. They are also known as full-stack developers or full-stack web developers. But really, they are mythical unicorns, let's understand how in the next section.
How are there like nine full-stack engineers, really #
As per this post about Shift left vs shift down by Richard Seroter. He is the Director of Developer Relations and Outbound Product Management at Google Cloud and has multiple courses on Plural Sight, some of them being about Devops, Java, and Serverless. So he surely knows what he is talking about. Let me pull a quote from that post:
There are like nine actual “full stack engineers” on planet Earth. Virtually nobody writes a frontend in React, sets up Kubernetes, configures a RabbitMQ instance, provisions space on the SAN, and lights up the top-of-rack switch.
When someone advertises for a real “full-stack” engineer they really mean is we have a budget for a person but that person should work as a team of 2-4 people.
So a full stack engineer supposedly can do at least both backend and frontend work equally well.
It is surely more than one person because a full-stack engineer should know the “full-stack” of the application which even oversimplified looks like the following visually:
Now with that image in your mind, let’s go deeper into why a real full-stack engineer only exists in fictional stories or superhero movies. So in the next part, you will know that, alas, a junior full-stack engineer can never exist.
There are surely no junior full-stack engineers #
First things first, let's dispel the myth of junior full-stack engineers. The concept of a junior full-stack engineer is similar to a novice pilot flying a jumbo jet, which is impossible. Full-stack engineering requires a deep understanding of both the front-end and back-end, which typically comes with years and years of experience.
Junior engineers, who are in the early stages of their careers, are still building their foundational skills and exploring different aspects of development.
It's crucial to understand that a strong foundation in a specific area is the first step before branching out into “so-called” full-stack development.
In the next section, you will learn more about the backend software work, one of these specific areas.
Backend is diversified in languages #
The backend side of web development is a multifaceted landscape. I have discussed backend development work in the past too. Backend development work will involve working with at least one backend language like PHP, NodeJs, Ruby, Python, Java, etc which can communicate with a database/datastore. As you can see, there are diverse programming languages and technologies involved.
Learning one takes time and to master one you will need to invest years of your life. To master all of these languages and their respective ecosystems is a close to impossible task. Not only does each language require time to learn, but keeping up with updates and best practices can be a lot more than a full-time job.
I did not even touch on the varieties of databases from relational (read SQL) to non-relational databases you might want to learn in the backend realm. Each language and database serves different purposes, and they come with their own sets of strengths and weaknesses.
Being a proficient backend engineer with a combination of a single programming language and one database will take you years. If you are thinking of learning more than one programming language and 2-3 databases and using them in production environments, you are looking at a decade or more of time investment.
Now you see how rigorous, difficult, and time-consuming being a great backend engineer is. In the next section, you will learn about how the frontend side is fragmented.
Frontend varies on the framework aspect #
Frontend development is equally varied, marked by a multitude of frameworks and libraries. Frontend development work encompasses the ability to change how things look and how users interact with the website or web/mobile application. It includes wrangling with HTML, CSS, and our favorite JavaScript. Frontend JavaScirpt is if I can use the word “fragmented” in frameworks.
Angular, React, Vue.js, Svelte, and many others are part of the landscape. React is the most popular one (check the other sheets too). Each of these frameworks has its unique syntax, structure, and set of conventions. Staying proficient in all of them is near impossible, especially given the rapid pace of change in the world of web development. And then a new JavaScirpt framework pops up every other week, and then you hear terms like JavaScript Fatigue. And then you end up asking why is frontend stack so complicated and hard. On top of that language and frameworks have popularity cycles, so because React is the most popular now does not mean in 5 years it will still be the most popular.
There has been a slow use of Web Assembly - Wasm. WebAssembly is an exciting development in the world of web technology. It's a binary instruction format that enables high-performance execution of code on web browsers. With WebAssembly, you can write code in languages like C, C++, and Rust and run it in web applications. But it is far from mainstream as of 2023. Thereby:
Being a great frontend engineer (from a technical point of view), requires years of learning JavaScript and understanding its ever-changing eco-system of build tools, bundlers etc. Then on top of it knowing at least one framework very well. All this equates to, again a decade or more of time investment.
So now that you are clear a full-stack engineer is an illusion created by companies who want to replace a team of 2-3 people with one person who is supposed to do all the work. Unless it is a company that has a revenue of less than 6 figures, it would be an impossible task to even attempt. So in the next section, you will learn about the practical path of being a software engineer with focus.
Choose your specialization and make it your forte #
Selecting a specialization and making it your forte is the strategic move in your tech career. You have to choose one path backend, frontend, or even data, cloud, ML – but only one thing.
You can surely be a great backend engineer who can do some frontend and vice versa.
Regardless of your chosen specialization be it backend, frontend or something else, a strong foundation in the basics is crucial. This is discussed in the junior software engineer post too. With a deep understanding of fundamental programming concepts, data structures, and algorithms, things like HTTP serve as your bedrock. These principles are the keys to solving complex problems and thinking critically as an engineer. Being proficient in the fundamentals allows you to adapt and excel in various contexts and technologies, making you a more valuable asset to your team and organization.
Even with 15 years of practical work experience in 3 continents and million-dollar companies, I would refrain from calling myself a “full-stack” engineer.
This does not mean that I will never touch frontend or backend or vice-versa. I will consider myself a solution provider and as per need, I will deliver end-to-end solutions.
Still, as my frontend skills are not as good as my backend skills, I will let the product manager know that if I do the frontend task it will take longer for me to do it than a frontend engineer whose forte is frontend work. That is where you need to understand the T-shaped engineer, discussed next.
Become a T-Shaped product-minded engineer #
A T-shaped engineer is someone who has broad knowledge across multiple disciplines but focuses on one the most. The concept of a T-shaped engineer is a pragmatic approach to handling the complexity of modern software development.
Rather than attempting to master every facet of the tech stack, a T-shaped engineer chooses to go deep in one specific area while maintaining a broader set of skills across the stack.
The vertical line of the 'T' represents your depth of knowledge in your chosen specialization, while the horizontal line signifies your understanding of other areas.
The advantage of being a T-shaped engineer is that you can become an expert in one domain while still being able to communicate and collaborate effectively across various aspects of a project. This allows you to specialize, become proficient, and make a significant impact in your area of choice while remaining versatile enough to adapt to different projects and teams. You can see an illustration of a T-shaped engineer from a tweet by Peter Vukovic below:
A T-Shaped product-minded engineer would be a great software engineer. Product-minded engineers are developers with a lots of interest in the product itself. They want to understand why decisions are made, and how people use the product, and love to be involved in making product decisions. Product-minded engineers are curious, proactive, and have strong communication skills. They are also able to see the big picture and understand the business goals.
To sum it up, specialize in one domain (be it backend or frontend or something else) but have a border knowledge of the technology landscape then have the business acumen and know about the who, why, and how of the product you are building.
Don’t try to become something impossible to exist and keep up with. Have realistic expectations and become a valuable team member and someone who adds a lot of value to the organization you work for.
Conclusion #
In conclusion, the myth of the full-stack engineer often leads to unrealistic expectations and unnecessary stress for aspiring tech professionals. A junior full-stack engineer is non-existent and it takes years and years (read decades) of experience to become a great Backend engineer. It takes a similar amount of time to become a proficient Frontend engineer and ongoing time investment to keep up to date with the ever-changing landscape of software engineering.
Thereby it is humanly not possible to be a real full-stack engineer. You are not one of the nine actual full-stack engineers that probably exist in this world.
On the contrary, it is possible to specialize in one area be it backend or frontend or any other, and become a super useful and valuable T-shaped product-minded engineer who adds immense value to the organization.