Are you a do-it-yourselfer who likes to solve problems and is interested in all aspects of web development? If so, pursuing a career as a full-stack developer is rewarding and can open a range of fulfilling job opportunities.
According to the 2020 Stack Overflow Developer Survey, 55% of working technologists consider themselves full-stack developers, while 37.1% call themselves front-end developers and 55.2% prefer the title back-end developer.
I hesitate to call myself a full-stack developer, partly because the term is thrown around so loosely that it seems to have lost a lot of meaning during the last few years. But after 10 years of working in web development and software engineering, I think I’m about the closest thing to “full stack” I could be, and I love it. Building something from the ground up – every piece of the puzzle – can be the most rewarding feeling in the world.
Not sure exactly what’s involved in full-stack web development? Let’s explore what a full-stack developer does, what skills and experience you need, and what a career path as a full-stack developer can look like.
Full-stack developers build software, including websites, mobile apps, web apps and desktop apps. Most software can be broken down into two parts: front end and back end. The front end is the user interface, the part of the application the audience sees and interacts with. The back end consists of the databases and code that retrieves and manipulates data.
All software engineers, web developers or mobile developers can be seen as full-stack developers. Meanwhile, database administrators, web designers and systems administrators are examples of specialized roles that focus on only one piece of the technology stack.
Mikhail Kozorovitskiy, consulting engineer at open-source software company Rancher Labs, says all developers should work toward being full stack.
“Understanding all the other components of a system are crucial to being a good cog in that machine,” Kozorovitskiy says. “A good system depends on every piece working well, not only in isolation but also how they work together.”
At the core of most applications is a database, a store of information. If your application stores information – users, posts, events or any data at all – a database is the most efficient way. These databases may be relational, in which different groups of data are connected by one or more shared keys. Or they can be document databases, sometimes called no-SQL databases, in which there is no implicit connection between groups of data. Some common relational databases include MySQL, Microsoft SQL Server, PostgreSQL and SQLite. The most popular document database is MongoDB.
To start learning database management with relational databases, you’ll need to know SQL. SQL, or structured query language, is a programming language that relational databases use to retrieve information. SQL is written as almost-English statements that give commands similar to, “Get all users whose addresses are in New York City.”
There are many great free and online resources for learning SQL, such as W3Schools and Khan Academy. I learned SQL mostly through W3Schools, Google and a lot of trial and error.
From there, you’ll need to learn to organize databases and the ways relationships work within relational databases. Understanding what makes good database architecture is essential to building full-stack applications that are robust and ready for the future.
“Very often, people who know just one (database system) will make choices that are not optimal, and provide a lot of issues down the line,” Kozorovitskiy says. “So I think it’s important to understand the difference between all the systems.”
Generally, the back end of an application interacts with the databases to store and manage data in a way the application can use. While SQL is used to retrieve rows and columns from tables, it would be tiring to write those SQL commands every time.
Cody Clark, a director at the software agency Alloy, says the back end should handle the logic so the front end just has to show it.
“This service back-end layer is like the hub,” Clark says. “Everything comes through that. It’s going to be responsible for connecting to the database and then delivering data, formatted … delivered to the front end to display it to the end user.”
You’ll often need to combine, filter or otherwise manipulate information as it comes from the database. The code that handles retrieving and manipulating data from the database is known as an application programming interface, or API. While some APIs may only be accessible by the other parts of the application, others are web-facing and accessible by any other application with proper credentials.
An example of a web-facing, or RESTful API, is Twitter’s API, which allows any software with proper, registered credentials to post to a Twitter account from its own user interface, not Twitter’s.
Other back-end services can run on their own without user input. For example, think of a time you’ve scheduled something to happen at a later date, such as sending a delayed email or scheduling the release of a YouTube video. A scheduling process was created in that instance, and when the time came, that back-end service handled sending or posting.
For the most part, back-end services can be written in any server-side programming language, often with a web framework, which makes writing back-end services much simpler. Examples of these language/framework pairings include:
- C# and .NET
- Python and Django
- PHP and Laravel
- Ruby and Rails
These web frameworks provide boilerplate code for tasks like connecting to a database, making changes and creating web-facing REST APIs. For mobile and desktop applications, any of these languages apply, though you probably wouldn’t use a web framework along with them.
Knowing how to architect high-quality databases and how to interact with them and control data flow with high-quality back-end code is essential for becoming a full-stack developer. There are many resources available for learning your preferred programming language and various frameworks. Some of the best can be found through Udemy and Codecademy.
The next piece of becoming a full-stack developer, the second half of the “stack,” is the front end. The front end is the part of the application that end users interact with and see.
Hypertext markup language is a way to describe the sections and parts of the user interface. It declares what a section or piece of text signifies, not how it looks. Cascading style sheets explain what the document should look like and where the elements should go, as well as colors, fonts, borders and more.
“The user interface designer or developer is really in control of what the user feels about your solution,” Clark says. “That doesn’t mean to say that if you have an awesome UI but the database or service layer is bad, you’ll have a great experience. But those things all go hand in hand.”
Together, HTML and CSS are the cornerstones of web front end development and some of the mobile front end. So it’s important to understand them at their core if you want to be a full-stack developer.
In my opinion, the best resources for learning HTML and CSS are W3Schools’ collection of tutorials and the book ”HTML + CSS” by Jon Duckett. Both provide a deep-dive into HTML and CSS, along with practical, actionable steps to follow.
Server-Side Front End
There are two ways that the front end can be delivered: server-side and client-side. It’s not an either-or situation. In web development, front end combines these elements.
In general, the server-side front end refers to HTML and CSS that is generated on the server and sent to the page as-is. This is the most common, time-tested way a front end can be delivered. A web server simply receives a request, finds the requested resources and sends them back.
More often today, a server receives the request, then the back end processes some information and puts that information into a template. The resulting data-filled template is returned to the user as HTML and CSS. This is server-side rendered front end. Most back-end frameworks also support server-side rendering, and some of the most popular ones include:
- Laravel (PHP)
- Django (Python)
- WordPress (PHP)
- Rails (Ruby)
Client-Side Front End
In a mobile app or desktop app, the front end or user interface is always handled client-side. Servers and back-end services generally aren’t serving up front-end code. The code is loaded directly from a local hard drive.
Depending on your environment, you can use many languages and frameworks for writing user interfaces. Popular ones include SwiftUI for iOS, macOS and other Apple environments, and Ionic, Xamarin, React Native and Flutter, which run on iOS and Android.
In terms of desktop applications, the front-end languages and frameworks vary depending on the operating system.
Client-side front ends have become the norm during the last few years, but they are beginning to recede a bit. Still, the undisputed kings of client-side front-end frameworks are React, Angular and Vue. There are many others, but these are by far the most-loved.
User experience, or UX, is a broad term, but if you want to consider yourself full stack, you need to think in terms of providing a delightful experience for the people using your application. This includes everything from accessibility – making sure users with disabilities can use your application effectively – to making sure your user interface is intuitive and easy to understand.
“It’s not just the UX. It’s the speed of the APIs or the services … the speed of the queries, the design of the database … each of those things are built into the end-user experience,” Clark says. “If your database is slow or your queries aren’t performant, your front end could be the best-looking thing in the world, but if the user has (to wait at) a loading screen, they’re not going to have a pleasurable experience.”
Continuing to study UX and UI best practices will make you a more competent full-stack developer, and it will help you instinctively build in a way that is user-focused – meaning better applications, built faster.
If you’re in a rush to get started, great! Start today. But it’s important to know full-stack development is a lifelong pursuit. Depending on your abilities, willingness to learn and the time you spend practicing, you can go from having no knowledge to an entry-level tech job in as little as a year.
However, becoming full stack has less to do with skills and is more about applying what you know. This comes with experience, and experience takes time.
If you want to get a jump on learning and even shortcut some fluff, a bootcamp can help. Still, it can’t make up for the experience of applying all of your skills and learning best practices in all disciplines.
So, is becoming a full-stack developer a good career choice? That depends on your interests and how you work. If you are motivated and love to learn, you might be well-suited for a career as a full-stack developer. You aren’t likely to start as a full-stack developer right out of the gate, though. Instead, plan on working your way up through the ranks as you build your skills and gain experience. You’ll find that pursuing your goal to become a full-stack developer is an enjoyable process.
According to Kozorovitskiy, a full-stack development career comes down to problem-solving.
“To me, problem-solving is the root … of everything – logical problem-solving, specifically –being able to take an issue, dividing it into the subcomponents … and then solve each problem one at a time,” he says.