Rethinking the Full-Stack Developer: Challenges, Realities, and Alternative Perspectives

As an experienced software developer, I’ve observed a prevalent term in many job postings within our industry: the insistence on hiring “full-stack” developers. Nonetheless, I harbor concerns about the validity and practicality of this term. In this article, I aim to delve into the reasons behind my reservations and present alternative perspectives for consideration.

If you share the same sentiments, continue reading. If you are an employer posting positions for a “Full-Stack Developer,” please proceed as this article is specifically tailored for you.

If you are or will be looking for your next dream job, I hope you will pick up a copy of my Rock Your Career: Surviving the Technical Interview book available on Amazon.com!

The Meaning

Let’s delve into the meaning of this word. As Wikipedia lacks a specific definition, here’s how ChatGPT defines it:

A full-stack developer is a versatile professional who possesses a broad range of skills and expertise to handle both front-end and back-end development tasks in software or web applications. They are proficient in multiple programming languages, frameworks, and databases, allowing them to work on various layers of the technology stack. A full-stack developer can design user interfaces, create interactive features, implement server-side logic, manage databases, and ensure the smooth integration of different components. Their ability to work on both ends of the development spectrum enables them to take projects from conception to completion, handling all aspects of the software or web application development process.

ChatGPT

While this description provides a general understanding of a full-stack developer, I have a significant concern about the perception associated with the term “full-stack.” Often, individuals interpret “full-stack” as indicating expertise across all technology stacks. Consequently, many employers expect comprehensive proficiency in various technologies. Modifying the title to “Proficient Full-Stack Developer” might address some concerns, although I still find the term somewhat lacking.

I recently came across a job posting on LinkedIn from MGM, a movie company, and I would appreciate your opinion on it. The listed responsibilities specify that the ideal candidate should have at least 5 years of experience and hold a bachelor’s degree, with a master’s degree being preferred.

FULLSTACK-1

Having worked in this industry extensively, I can confirm performing all these tasks in the past. However, even now, I wouldn’t consider myself “proficient” in all of them, which I will elaborate on shortly. It’s crucial to note that the job posting specifically requires a high level of expertise in areas like analysis and design, app development encompassing testing, scalability, and both web and mobile platforms, as well as database management and integration. Another challenging aspect, as I write this article, is the implementation of stringent security controls.

The expectations outlined in the job posting seem demanding for a candidate with only 5 years of experience. Furthermore, the posting specifies that applicants must have prior experience with these technologies.

FULLSTACK-2

But wait, there’s more…

FULLSTACK-3

Additionally, the job posting emphasizes the significance of experience in the media and entertainment industry. It would be intriguing to converse with the individual who successfully obtained this position, as it is uncommon to find software engineers meeting all these requirements within just 5 years of experience.

Back in “My Day”

Some of you might argue that this type of developer does exist, but let’s see what you say after the following sections. In the past, even 20 years ago, I might have agreed with you, as I was one of those developers myself! During the late ’90s and early 2000s, being a full-stack developer was feasible. I typically worked at small companies or start-ups where there were only a few to a handful of developers, and we were able to deliver solutions that encompassed the entire stack. We had to handle it all, and I had the opportunity to be part of some highly successful product launches. In fact, I even became a patented inventor at one of those companies!

Working in very small companies will propel your career faster!

While programming has made significant advancements since I first began, I must admit that it was comparatively easier in my early days. The available user experience stacks mainly revolved around Windows (I started with version 3.1), macOS (which wasn’t extensively used for business software then and still isn’t), and the nascent web, which very few people were aware of. When I began building websites in 1994, there were hardly any tools to assist me, so I had to rely on Windows Notepad for coding. Backend databases primarily included SQL Server and Oracle. Web services hadn’t even been introduced, which meant we had to employ alternate mechanisms to transfer data between servers and clients or between servers. Security was also relatively simpler. In the Windows domain, we primarily relied on Active Directory or created custom security measures.

Considering this context, it was conceivable to have expertise across all these layers (stacks), and I presume that most seasoned developers from earlier times possessed such multidisciplinary knowledge. However, with the rapid evolution and specialization of technologies, achieving the same level of expertise in all areas is much more challenging in today’s complex software landscape.

Today’s World is Much, Much Different

Now, let’s compare the era when I began programming to the present day, particularly from 2020 and beyond. Due to my experience, I perceive that developing applications has become significantly more complex and challenging. When I started, we only had three prominent user experience stacks to work with. However, today’s landscape offers an abundance of choices, especially when utilizing Visual Studio.Top of Form

Computers

For personal and business purposes, the Microsoft .NET ecosystem provides a wide array of options. Within this framework, developers have access to various technologies such as Xamarin, Windows Forms, Windows Presentation Foundation (WPF), WPF Browser App, Windows Services, Universal Windows Platform (UWP), and the multi-platform native UI known as Microsoft Maui. These tools offer developers a diverse set of choices to cater to different application needs and target multiple platforms.

Mobile

When I initially entered the field, mobile devices were a rarity. Only a privileged few, predominantly the affluent, possessed cell phones primarily used for calls. However, the landscape has undergone a remarkable transformation since then, offering a myriad of mobile platforms such as Android, iOS, Tizen, Windows, and more. Within the .NET ecosystem alone, numerous options beckon exploration. These include multi-platform development with Xamarin, tvOS app development, Android app development, Android Wear app development, iOS app development, watchOS app development, TV Service Extensions, Raspberry Pi project integration, Native-Activity application (Android), Basic Application (Android with Ant or Gradle), Blank App (iPad), and many others. Furthermore, Windows proves instrumental in crafting applications for diverse devices in warehouse settings, such as scanners. The proliferation of platforms and technologies has significantly expanded the horizons for developers in the contemporary era.

Web

The internet has gained unprecedented popularity to the extent that a major disruption could bring the entire world to a standstill. In the expansive .NET ecosystem, developers have a diverse array of options to harness its capabilities. These options include the ASP.Core Web Application, which integrates frameworks such as Angular, React.js, and Redux. Additionally, developers can choose from solutions like Blazor App and ASP.NET Web Application to construct web-based applications. On the client side, a plethora of web projects await exploration, including Django, Jade, Vue.js, Flask, Bottle, Node.js, and more.

When delving into the server-side realm of web development, the .NET ecosystem presents several robust solutions. These encompass Web Services, Windows Communication Foundation (WCF), Web API, gRPC Service, and the Syndication Service Library. These technologies empower developers to craft efficient and scalable server-side components that drive web applications and services.

Cloud

In the early days of server development, our hosting options were limited to maintaining servers in-house or relying on Internet Service Providers (ISPs). However, the advent of the “cloud” has brought about a revolution in how we conceive and implement solutions. Its impact has been so profound that it has reshaped architectural and coding practices throughout the industry. While there are numerous cloud services available, I will focus on those accessible through Visual Studio, recognizing that Azure alone provides an extensive array of functionalities.

Within Visual Studio, developers can tap into a broad spectrum of cloud services, including those featured in other stacks, along with specific Azure offerings. These encompass Azure Functions for developing microservices, Worker Service, Service Fabric Application, Azure Cloud Service, Azure Resource Group, Azure WebJob, Storm Application, Container Application for Kubernetes, Azure Stream Analytics Edge Application, Azure Stream Analytics Custom Deserializer, Azure Stream Analytics UDF Project, Azure Stream Analytics Application, GraphQL, and many more. In fact, the capabilities of Azure are so expansive that attempting to list everything it can do would necessitate an entire book!

Still A Full-Stack Developer?

Given the points discussed, do you still classify yourself as a full-stack developer? If you were to apply for the MGM job mentioned earlier, do you believe you could confidently address questions related to the skills and requirements outlined in the job posting, drawing from your 5+ years of experience? I have some reservations, and if you remain confident, let’s proceed with a live mock interview to assess your skills.

I know individuals whom I regard as more intelligent than myself, and even they struggled to pass initial interviews at top companies like Google, Amazon Web Services, and Microsoft. I personally faced this challenge, having interviewed at Microsoft three times, the most recent being in 2019 for the .NET Runtime team. Notably, even dotNetDave couldn’t pass the first interview!

It’s crucial to bear in mind that during interviews, anything listed on your resume is fair game for questions. If it’s there, be prepared to discuss even the most mundane skills. Conversely, many job postings include requirements that may not necessarily reflect the company’s true expectations. Most of these requirements seem to be searching for what I term a “God Programmer” – an unrealistic expectation.

My Worldly Advice

Before I delve into my advice, allow me to recount a noteworthy interview experience I had.

Interview at E-Commerce Website

I interviewed for a San Diego-based e-commerce website company. The initial interview with the Chief Technology Officer (CTO) went exceptionally well. We connected effortlessly, and the interview exceeded the expected duration. Leaving, I felt confident about securing the lead developer position—an opportunity aligned with my interests and skills.

To my surprise, the next day, the CTO’s assistant informed me about a second interview. While multiple interview rounds are common for managerial positions, this one had an unusual twist: I was tasked with building an e-commerce website from scratch in just four hours! This demand seemed highly unconventional, especially for a senior software engineer and Microsoft MVP like me. I questioned whether such a task could be realistically achieved within the given timeframe. Although unsure if my reaction was justified, I couldn’t shake the feeling that this demand exceeded reasonable expectations.

Coincidentally, that same night, during a user group meeting I ran, I shared this story with fellow developer friends. To my relief, they echoed my sentiments, expressing their reluctance to undertake such a challenge in an interview setting. The following day, I withdrew from the interview process. It was disheartening for two reasons: firstly, finding a manager with whom you have an excellent rapport is rare, and secondly, I was eager to resume my role in leading developers.

A Better Way

In my view, the term “professional developer” implies proficiency across various technology stacks. To excel in roles like lead developer or architect, a deep understanding of how different stacks intertwine is crucial. This capacity to grasp the broader context and design effective solutions plays a pivotal role in achieving success in this field.

However, due to the industry’s rapidly evolving nature, becoming a proficient full-stack developer has become increasingly demanding. Consequently, it is essential to consider alternative approaches for delineating developers’ areas of specialization. Here are a few illustrative examples:

  • Backend Developer: Responsible for curating the structure of server-side information, backend developers primarily work with data storage and provide APIs for frontend engineers and UX designers. This is my current role, despite having skills across all stacks.
  • Frontend Developer: Responsible for curating the structure of server-side information, backend developers primarily work with data storage and provide APIs for frontend engineers and UX designers. This is my current role, despite having skills across all stacks.
  • Middleware Developer: Connects one computer system to another, ensuring smooth data flow. Middleware engineers solve technical issues between systems and develop applications using middleware software to enhance business efficiency and insights.

Summary

I’d like to address the term “full-stack developer.” When encountering this term, it often implies knowledge across various technology stacks but not necessarily expertise in any specific one. Excelling in all technology stacks is challenging, and teams typically prefer individuals with specialized expertise, especially outside of startup environments. I advise against using the term “full-stack” to describe oneself or others.

However, I acknowledge that my perspective might be literal. I am open to the term “Full-Stack Architect,” but architects should inherently possess “full-stack” qualities, making it redundant to explicitly state.

A piece of advice I share with my students at the University of California San Diego is to focus on their preferred technology stack after mastering programming basics. Building a solid foundation before exploring other stacks is key. Trying to learn everything from the start can lead to frustration and potential career path changes, as I’ve witnessed firsthand.

In conclusion, reconsidering the use of the term “full-stack developer” is worth discussing. Share your thoughts on full-stack developers below, whether positive or negative.


In December 2020, C# Corner had a live show on this very subject. I hope you will check it out.

Pick up any books by David McCarter by going to Amazon.com: http://bit.ly/RockYourCodeBooks

One-Time
Monthly
Yearly

Make a one-time donation

Make a monthly donation

Make a yearly donation

Choose an amount

$5.00
$15.00
$100.00
$5.00
$15.00
$100.00
$5.00
$15.00
$100.00

Or enter a custom amount

$

Your contribution is appreciated.

Your contribution is appreciated.

Your contribution is appreciated.

DonateDonate monthlyDonate yearly

If you liked this article, please buy David a cup of Coffee by going here: https://www.buymeacoffee.com/dotnetdave

© The information in this article is copywritten and cannot be preproduced in any way without express permission from David McCarter.


Discover more from dotNetTips.com

Subscribe to get the latest posts sent to your email.

2 thoughts on “Rethinking the Full-Stack Developer: Challenges, Realities, and Alternative Perspectives

  1. Sounds to me like a mix of a few concepts…

    To me, a “full stack” developer is a person who can contribute code to any component of a particular problem domain / code base, regardless of its language, runtime, framework, platform, or logical role (DB, test, interface, Services tier, integration/middleware, deployment, analytics/reporting, et al). That’s not to say a full stack developer is proficient at everything coding, globally, but at least within that problem domain & associated codebase, they can contribute value as code.

    “Multi-role” is a different thing. That’s someone who might do engineering, architecture, user support, QA management, Project or even program management, Business Analyst, UX analysis/design, IT support, et al, not necessarily related to hands-on coding.

    I consider myself to be a hands-on full stack architect… and versatile (but not omni) role… (as long as there’s code involved; I have (or can quickly develop) valuable proficiency).

    If a company has a role for full stack + multi role, it sounds like they want one person to be their whole problem domain technical solution provider. Could either be really fun, or really terrible.

Leave a reply to Jim Wilcox, MVP Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.