The Classic New Role of Full-Stack Developers
Most of the IT industry workforce can describe what a software development role fundamentally involves. However, few understand what responsibilities are required in a Full-Stack Developer role, and even fewer know exactly what being a Full-Stack Developer entails.
A Software Developer may be simply known as the person who writes the code that materializes a program or piece of software. The final output is usually either a standalone program or a piece of a bigger solution. There are various products that rely on a Software Developer: desktop/mobile applications, video games, video/photo editing software, 2D/3D animation software, web pages, automation software, and many more.
During my first years working as a Developer, the sentiment from most of my mentors and senior teammates was that the UX/UI aspects of software development was a nightmare that they did not want to have to deal with. They emphatically avoided it, and instead dove into addressing architecture modeling, design patterns, databases, or anything that involved solely raw code. Their comfort zone lied in the type of gibberish that non-developers can’t make sense of.
These types are commonly regarded as Back-End Developers.
More often than not, they claim that the “face” of the software (aka “the front-end”: a term that encompasses the styling, spacing, colors, font types, sections, menus layouts and everything else) had better be left to Juniors or, even better, to the creative members of the team, dryly referred to as designers.
Front-End Development also implies structuring optimal logic, proper architecture, and neat design for which skilled coding is absolutely necessary.
After a few years of exploring the challenges that come with Front-End Software Development, I understand the resistance from Back-End Developers, and would even say they were somewhat spot on. It was not because the task was dull or simple, but it would have involved a good deal of effort and sometimes create a headache.
Because of this, I have come to realize that most Developers have been allowed to present their taste for certain tasks as a custom definition of their job description. But, those days are probably numbered.
There’s now a general acceptance that Software Development is not just writing code – it is the process of analyzing requests, writing/scripting code that can be compiled/interpreted, and ultimately delivered to satisfy the original client need. This means that responsibilities within the development team must not only include writing code but go beyond that mere task.
For instance: once the code is ready, it’s expected to be deployed. The code owner should know how to do it, document the associated needs, and perform the action if needed or train those in charge of getting the deployment done.
Another example: since the solution needs to satisfy the client expectation, development work is closely related to Quality Assurance – even if testing is not performed by the programmer. This means involving programmers in the initial discussions around requirements, coming up with test scenarios, and even assisting the team in producing test data once the product is in its final phases.
The list of areas of involvement goes on and on: the creation of intuitive, well–conceived user interfaces (even if the developer is not formally a designer), building a DB model (even if the developer is not the formal DBA), setting the web server to run the developed web application (even if the developer is not the formal server admin) – these duties, for very good reasons, fall within the Developer’s responsibilities.
In modern Development teams – especially those following Agile methodologies – a team’s success is measured by its ability to deliver working software.
Since Developers tend to have the strongest technical background, it’s natural that these myriad tasks within the team overflow into their informal (and maybe even formal) responsibilities.
Given the background I’ve outlined on the synergy between Front and Back- End Development, let’s discuss the definition of what a makes a great Full-Stack Developer.
At a minimum, a Full-Stack Developer is a software specialist capable of performing Back-End AND Front-End Development. (Some recruiters may have built the preconception that they prefer Front-End Developers, but that is another post entirely). The basic job description might be enough to set a minimum set of requirements for that role, but it’s not an accurate reflection of what is expected of Full-Stack developers nowadays.
Given that Front-End and Back-End are two layers of an overall software application, a Full-Stack developer must go beyond just “being familiar” with each of them. Full-Stack Devs need to not only have strong technical knowledge in both layers, but also everything within, between, and beyond those layers that would make a product successful.
Remember the golden era of the Dotcom Boom? In order to become a successful website, it wasn’t enough to just have the site up and running and with relatively few errors. The site was expected to be eye-catching, stylish, attractive, user-friendly, and speedy. Back-end specialists oversaw storing/updating/retrieving data to be displayed within the site, and front-end experts managed the layout of page components using styling (CSS), images, attractive font types, the right color palette, and giving life to the page setting the components behavior (JS scripts).
That was simple task division, and both sides were doing software development to produce an excellent web page application. This is the key: even two decades ago, only when those divided roles merged successfully, was a final product created that stood out from all others.
With the principles that were brought about by Agile programming, companies now expect more well-rounded developers.
This is what the industry is looking for when they go to market for Full-Stack Developers. It isn’t enough to be familiar with both Back-End and Front-End. They would need to be able to blend those two disciplines together. Excellent Full-Stack Developers are familiar with everything that takes place during the development process and are ready to grab any orphan tasks in the backlog: coding, designing, testing, automating tests, boosting database design, setting up a server, performing a deployment – you get the idea.
What makes them desirable now may be the same element that always has made them appealing: versatility and a ridiculously sharp can-do attitude. Full-Stack Developers give you confidence that they can complete a whole project on their own, if given a bit of time, food, and enough hours to sleep.
This circumstance is to some degree replicated for all roles within IT (take the example of Quality Assurance specialists – they no longer are just expected to review requirements and produce test plans– they suggest and implement test automation approaches and assist in requirements gathering). However, one may argue that the case of diversifying for Full-Stack Developers is the most prominent one.
This status quo (which probably only took hold over the past decade) does not necessarily mean that extraordinary Full-Stack Developers will get hired. What the trend brings is the added value of those willing to learn new tasks – even more than the increasing demand for new technical knowledge that has always been the standard in IT. Refusal to take on certain tasks just because they are slightly off the mark from one’s area of specialty ceased being received with reverence – and soon will probably cause backlash if the focused experts from two decades ago are not willing to go outside of their comfort zone.
This may also be good news for those who don’t believe they are ready to consider themselves Full-Stack Developers right now. A thick slice of our calendars will need to be devoted to learning and training while we are part of this industry. Developers willing to expand their capabilities will sooner or later become Full-Stack. While no one achieves industry standards in a blink of an eye, flexibility, perspiration, and willingness to cooperate enables anyone to become a valued partner that will deliver solid products and lead their teams to success.