Recently, one of our long-term clients asked me to review a job posting they were struggling to fill. The client wanted a senior software application engineer. But not just any senior software application engineer. A “true full-stack developer” experienced in back-end development, front-end development, and architecting cloud environments and web infrastructure.
Before the client asked my thoughts on this potential hire’s compensation package or how to find them, he led with the most important question: “Are we looking for a unicorn?” Unfortunately for our client, I answered yes.
The Problem with Unicorns
For developers, the word “unicorn” refers to someone with such a diverse range of skills that they’re incredibly rare. For example, an expert programmer who is also an ace visual designer. While such a person may be out there somewhere, they will be so hard to hire that they might as well be imaginary.
Here’s how a successful unicorn hunt would go. First, you have to find them and make sure that the skills they mentioned on their LinkedIn profile are more than just words. Second, you’d need to hire them away from wherever they were currently working. Unicorns are rare, so companies will work hard to keep them. Third, you need to be willing to pay the high salaries these experts can demand. The result is a long time spent on a hiring process to acquire one person at a very high price. This is assuming he or she is exactly what you need, will fit in with your team, and won’t be headhunted away at a critical time in your project.
In our client’s case, it’s not that it’s impossible to hire someone who knows back-end development, front-end development, and cloud environments. It’s just practically impossible to hire someone who is good at all these things. The challenge is that historically in our industry, these roles have been very segmented.
A Short History of Web Development
How did this segmentation happen? The answer requires a little walk through web development history.
The front-end of a website is comprised of HTML, CSS, and JavaScript. All three have matured over the decades. But JavaScript in particular has seen a recent explosion of libraries and frameworks built on top of it. These technologies have introduced back-end programming concepts to the language that cause the work between front- and back-end development to overlap.
For example, languages like TypeScript have introduced class-based object-oriented programming fundamentals to JavaScript. This makes JavaScript feel more like a back-end language. Frameworks like AngularJS, Backbone.js, etc. have introduced MVC and similar patterns into JavaScript. And technologies like Node.js have introduced server-side JavaScript.
The result is a traditional front-end developer now having skills and knowledge relevant to back-end programming. And conversely, a strong back-end developer will find some familiar concepts in current JavaScript libraries and frameworks. These multi-disciplinary programmers often refer to themselves as full-stack developers.
Why Finding a Good Full-Stack Developer Is Hard
So if these two divergent worlds are now more similar, then why is it difficult to find a “full stack” developer? There are two reasons. First, development is a constantly evolving and expanding field that makes dual mastery really tough. Secondly, that the “stack” now includes more than just front- and back-end programming.
Deceptive Duality
Despite the newfound overlap between back- and front-end programming, both sides of the spectrum are constantly evolving. In short, just because someone can do both doesn’t mean that they will be good at both. It also doesn’t mean that they will be able to stay current in both. With the recent explosion of JavaScript related languages, libraries, and frameworks, there is more to learn than ever. Keeping up with that while also staying current in back-end languages, libraries, and frameworks can be time-consuming and difficult.
Too Many Hats to Wear
The “stack” is more than just front- and back-end programming. Hosting infrastructure and cloud architecture is a different area altogether. A true full-stack developer also needs to know another set of programming in order to architect a cloud environment to host new applications. Essentially, a network hosting engineer. This means writing scripts to set up servers, ensuring the code is secure, and handling other aspects of deployment for every update. And don’t forget about QA. The full stack developer also needs to be able to design and run their own automated tests to ensure their code works well in the designated environment.
In short, I told our client their job posting needed major revisions. Sure, they were likely to find applicants who consider themselves “full stack” developers. But their skills would severely lack in the hosting/infrastructure/cloud architecture department. Our client would also find people who say they have a background in both front and back end technologies, only to discover that they’re significantly more skilled in one because they’ve done it longer than the other.
Why a Good Team Is Better than Hunting for Unicorns
You can probably guess what I advised our client to do next—split this role into two separate positions. The first would be someone who knows back-end and front-end programming. They would also ideally know something about testing automation. The second would be someone who knows the hosting/infrastructure/cloud side.
This client’s big goal should be to foster a DevOps culture where these two people are working together, instead of hoping for one person to do everything. By relying on a smart team who knows how to share workloads and collaborate, our client would be able to tackle all the tasks they wanted this unicorn to do. They’d enjoy more flexibility in how they respond to changing project needs.
Building a team also means you can hire and nurture true experts who are working on mastering the skills you need. Letting your programmers focus on the latest tools, frameworks, and techniques in their chosen field means they won’t dilute their skills by having to divide their attention across programming disciplines. This also protects your programmers from getting burnt out from extra pressure to perform completely different tasks on a project.
If you’d like our input on how to find the right team for a development project, or if you’re looking for a partner to ramp up development resources, feel free to contact us anytime.