What are Full Stack Developers

The Full Stack Developer: Skills, Roles and Expectations

What are Full Stack Developers?

The full stack developer role is now among the most popular developer roles with over half of all developers now classifying themselves as a full stack developer.

Why is this position so popular? What exactly does it entail to become a full stack developer – what full stack developer skills are required exactly?  These questions will be answered in this article.

Top 5 developer positions

Table of Contents

Defining the full stack developer and full stack development

As a full stack developer, you work with a range of technologies in order to contribute to the entire solution of a particular product or service you are assigned with.

Full stack developers can be contrasted with software engineers that solely work with one programming language or technology; this is more common to see with more generalised low level languages like Java or C++ whereby an entire system relies on that language alone for its core logic, requiring more expertise and overall attention to a particular technology.

Full stack development is different; full stack developers are commonly equipped with higher level programming languages allowing the developer to become proficient in a range of technologies that make up the entire software stack of the project they are working on.

A full stack developer role is defined by the software development company

We refer to the software stack (or “tech stack”) as the range of technologies that a company has adopted for its implementation.

For a website, the software stack comprises front end (in the browser) technologies as well as back end (server side) technologies that serve API requests, carry out database management, etc.

We can further expand this example by considering other elements in the stack that may exist, like containerisation (such as Docker), scaling solutions (such as Kubernetes), etc. These technologies combined comprise the full stack developer’s responsibilities.

The software stack is not common across projects and can vary depending on the project’s specific needs, but it is this software stack that determines which technologies the full stack developer should be proficient with.

This may suggest that full stack development demands considerable expertise in an unrealistic amount of technologies, but in reality there are only a few common components that make up most full stack roles, and these components are usually drilled down to the most popular or efficient solution available.

It is therefore possible for a full stack developer to become well-versed in each technology they are using.

Generally speaking the developer need not be an expert in all technologies in the stack, but the level of proficiency varies depending on the requirements of the project.

Full stack development benefits

Full stack development benefits

There are undoubtedly benefits to being a full stack developer, including:

  • Better job prospects with the ability to contribute to the entire project, and have a well-rounded understanding of how the complete implementation works.
  • Better overall career prospects with more possibilities to move to better suited roles.
  • More incentive to endeavour into newer technologies that may be adopted in a stack, and ability to develop an intuition of how software is evolving.
  • A salary at the upper bracket of the developer market (~$108k in the US at the time of writing).

Read up on which programming languages to learn from our recently published article

A full stack position is very much suited to the passionate programmer who loves obtaining new knowledge. Indeed, Being a full stack engineer will give such people a paid opportunity to exercise and increase their knowledge while contributing to real-world projects amongst a group of highly skilled team members.

If you are a freelancer or hobbyist working on a personal project, it is likely that you already have full stack developer skills that could be minimally polished for a full time position.

Full Stack Developer Skills

Full Stack Developer Skills

Let’s now dive into various software layers that comprise the skillset of a full stack developer.

These layers can be categorised into interface (front end), business logic (back end) and storage management (database & file storage), and there are a range of technologies that can be used together to fulfil these components.

The following section will break down these components that either comprise the front end of an application, or back end where the core business logic is defined and run; commonly on a server or centralised point at which clients communicate with.

Front End Technologies

Front End Technologies

Front end (or client side) technologies involve those programming languages and frameworks that comprise the user interface and end-user experience; a role typically reserved for a front end developer. These technologies have a creative emphasis and are typically higher level languages and frameworks that abstract away complexity for full stack developers to undertake such roles.

Front end products these days typically come in the form of a web app, mobile app or desktop app, with each of these solutions requiring slightly different technologies.

Popular front end technologies

  • Boilerplate markup standards including HTML, CSS and SVG animation (notably Lottie). CSS ties into both HTML and SVG markup whereby CSS styles, animates and configures transitions. Tools like styled components have further extracted CSS functionality.
  • Data structures, the most common today being JSON, followed by XML.
  • JavaScript is the most widely used front end programming language (and most commonly used programming language period).
  • Building on the fundamentals of JavaScript, libraries such as React JS, Vue JS, Angular JS, and others are now commonly adopted for web development.
  • React Native further abstracts JavaScript for mobile app development suitable for iOS and Android apps.
Server side Technologies

Server side Technologies

Server side, or backend application development is more complex than that of the front end, as backend development entails a wider range of tasks ranging from API orchestration and deployment, server configuration, data management, and so on.

The server acts as a centralised point for the client side to communicate with, akin to the brain of the application.

Backend development tasks such as automating and scaling an application can result in this layer being the most complex for the full stack developer, but such solutions are necessary for a large-scale application.

Commonly used server side technologies

  • PHP and accompanying frameworks such as WordPress and Laravel that today still dominate back end web development. Read more about the current state of PHP and how it competes with JavaScript here: PHP vs JavaScript: Development Trends in 2021.
  • The Node.js runtime environment is gaining momentum as a server scripting language, being run directly on the back end server. In terms of operating system support, it supports all major operating systems and Linux distributions.
  • Python offers the Django framework for serving front end applications, that full stack developers coming from Python will likely be comfortable using.
  • Server configuration packages such as Nginx or Apache to route requests to the appropriate server process.
  • General Linux commands that are consistent throughout the major distributions for critical systems engineering tasks.
  • Containerisation, scalability and automation with Docker, Kubernetes and Ansible respectively. Knowledge in such solutions is used in a more robust development project.

Server side technologies are notably more wide-ranging, and add complexity for full stack developers.

It is worth stressing that full stack developers are not expected to learn all of the above mentioned popular technologies for the back end-what is used will depend on the organisation and project needs.

Adopting Node.js with a front end library like ReactJS is currently a very popular and effectively-managed stack. Both technologies rely on the same package manager (NPMJS) that dramatically makes development a more streamlined process.

Database Management

Database Management

Another component that resides in the cloud (and therefore back end) will be the database(s) of choice that are chosen for the software stack. The two major types of databases are relational databases and non-relational databases, the former being table-based and the latter being document based.

The full stack developer should have an understanding of these differences and be able to work with the database in question. In terms of choices, there are very popular databases both in the paid space and open source space.

Popular database applications

  • Microsoft’s SQL Server and Oracle’s database are cloud-hosted databases geared towards companies and larger enterprises.
  • In the open source space, MySQL, PostgreSQL, and MariaDB are common choices for web development, all adhering to the SQL specification. Each database inherently has their own strengths that the full stack developer will need to familiarise themselves with.
  • In the non-relational (or NoSQL) database space, MongoDB is the standout favourite for the full stack developer. Designed for structured or unstructured data, document based systems are more suited for big data analytics, mobile apps and large applications in general.
Git SourceTree

Source Control, Git SourceTree

Source control (also referred to as version control) is now a common feature of contemporary app development and is another component the full stack developer should be fluent with.

The Git protocol, along with GitHub as the platform that hosts your codebase, is the most widely adopted solution for managing a project’s code among a team of people. Source control aids time management skills and promotes team communication among each engineer involved in the software product.

Must-have Git skills

  • The ability to version your codebase and track all changes made via what are termed “commits”. This in turn leads to non-destructive updates to your code.
  • Git supports “branching”, or having your own copy of the codebase without changing the main (or master) branch of the codebase. If a particular branch successfully implements a desired feature (or fix, etc), then the changes made to that branch can be “merged” onto the master branch. This is done by submitting “pull requests, or PR.
  • GitHub acts as the platform to host your projects and history data, with Git tightly integrated into it.

The terminology used here along with Git’s full feature-set needs to be understood by the full stack developer.

Package Managers

Package Managers

The dominance of package managers like NPM and PyPi (for the JS and Python ecosystems respectively) make dependency management a key skill for the full stack developer. This means having the knowledge to:

  • Comfortably use the Command Line Interfaces (CLIs) of the package manager your project depends on.
  • Identify reliable packages required for the project.
  • Update, or “bump” packages to more recent versions, and to amend your codebase when breaking changes occur on major releases of packages.

Package managers make the above processes relatively straightforward for full stack developers, but this is nevertheless a critical component amongst full stack developer skills.

GitHub repositories also act as packages in and of themselves whereby developers clone the repository and integrate it within their applications.

API Interfaces

API Interfaces

Knowledge of HTTP, REST, WebSocket and GraphQL protocols are all relevant skills for modern application development:

  • HTTP (Hypertext Transfer Protocol) and REST (Representational state transfer) work together by defining the transfer protocol and endpoints for the receiving data.  A client interacts with the server side via HTTP requests. HTTP requests serve responses whether in raw data or HTML, whereas the REST component refers to the style of API that is designed with an intent on a modular, stateless set of operations.
  • The WebSocket protocol maintains a live connection between the server and client and can distribute messages between clients in “real time”.
  • GraphQL is a more interesting protocol that is well suited for modern application design standards, particularly with a cutting edge tech stack.

JSON is another critical skill for the full stack web developer to have, being the data structure commonly used by APIs today. HTML markup, system functions and even the operating system depend on JSON for transferring data to and from processes.

Common Software Development Stacks

Common Software Development Stacks

With the above components in mind, let’s now document some common software stacks used today in contemporary software development. Developers can identify which stack is best suited for them relative to their skills.

MERN: MongoDB, Express, ReactJS, Node.js

The MERN stack is a pure JavaScript stack relying on a React.js frontend and Node.js backend. The extremely popular Express framework is used to serve RESTful API requests from the app. This is very common for modern apps today, both native and web-based.

MEAN: MongoDB, Express, Angular JS and Node.js

MEAN simply replaces the front end technology from React with Angular JS. In fact, the front end can be replaced with any JavaScript framework to maintain the unification of JavaScript.

Likewise, MongoDB can be replaced with an SQL database for example, or have both MongoDB and an SQL counterpart running concurrently, depending on the application’s needs. For example, a third party analytics platform may adopt MongoDB, whereas your app may rely on an SQL database structure.

LAMP: Linux, Apache, MySQL, PHP

The LAMP stack is a dominant stack for PHP based websites – WordPress and Laravel dominating this share of the market – LAMP primarily focuses on backend development and is used for blogs, storefronts, and is arguably a legacy stack in the time before JavaScript migrated to the server via Node.js.

Again, protocols can be swapped to optimise the stack here. Nginx is a fast and efficient server that can replace Apache. Likewise, a Python framework such as Django could replace the PHP component, although LNMD (Linux, Nginx, MySQL, Django) does not make such a nice acronym as LAMP!

Django is very high level and comes with good database support. With Python being amongst the most popular development languages, Django is a strong contender for the backend component for full stack developers. Saying this, Java, Kotlin or other programming languages can also be used on the server.

Software Development Stacks of the Future

Stacks evolve over time, and therefore development skills should also evolve as a result.

With the boom of AI and blockchain based applications, backend code in particular is becoming more complex, thereby requiring yet more knowledge for full stack developers.

The evolving WebAssembly standard will have an impact in the medium term for the web-based application stack, as will more efficient technologies such as the Rust programming language.

These more specialised layers should be taken into consideration depending on the full stack developer’s interests.

Software Development Stacks of the Future

Summary

What it takes to become a full stack developer should now be well understood by the reader, whether that is as a full stack web developer or among general full stack engineers entailing more specialised full stack developer skills. The term “full stack developer” does not represent a fixed set of requirements, but rather depends on a particular stack a project is suited for.

Saying this, there are a set of commonly used technologies that have been documented in this article; these act as a foundational skill set of software developers aiming to become a full stack engineer..

Specialised tech stacks with more cutting-edge technologies are gradually becoming more sought-after with the advent of AI, blockchain, and the growing range of smart devices that are integrated into apps.

This makes for a challenging but rewarding task in an endeavour to become a capable full stack developer.

Ross Bulat