How to become a full-stack developer
Looking to make the jump to full-stack development? It might seem daunting as it requires you to learn a completely new language and a completely new ecosystem of libraries and frameworks. Sometimes even completely new code paradigms (e.g. functional programming) or concepts (e.g. data binding).
Where to even start? What are valuable full-stack developer skills? And how long does it take to become a full-stack developer?
I started out as a back-end developer (with an interest in front-end) and made the switch to a successful full-stack career. I did this by taking gradual steps and understanding the strengths of a full-stack developer position.
What is a full-stack developer?
The pure definition of full-stack means every layer of a software solution. But covering all layers of a software project can be challenging: user interfaces (front-end), APIs, back-end processing, databases, infrastructure, security, …
That’s a lot of knowledge to master. Therefore, full-stack developers are not experts in every single layer, but have a solid foundation of two or more layers and know how to build a solution with it.
More experienced full-stack developers involve themselves in many layers of a software project. This can make them a powerful asset in a software project. However, it’s also important to understand that they won’t have the same expertise as a specialist and therefore will more quickly reach their knowledge ceiling within a single layer.
Roadmap to full-stack development
Before transitioning to full-stack development, you should already have some knowledge about either back-end or front-end development. From there, the trick to making a successful transition is the same. Select a technology on the opposite end, which forms a good combo with your current skill set, so that you can make a gradual transition with one foot in your comfort zone and one foot in the unknown.
As a front-end developer
A good combo for a front-end developer is a REST API. Luckily, you can start with building such a REST API using a Node-based framework, so that you stay in the comfortable JavaScript ecosystem. The ExpressJS framework is a good start. You’ll learn how to design a proper REST API and you’ll come into contact with other back-end technologies, such as databases to query data from (SQL), authentication/authorization tools, and load balancers.
Great, now you’re a full-stack developer!
Once you feel comfortable building REST APIs in Node, try to invest in another back-end language/ecosystem such as Go or any JVM-based language (Java, Kotlin, Scala) and replace your Node-based REST API with one in the other language.
See, gradual steps. It will expose you to different concepts, technologies and code paradigms, which will make you an even more valuable full-stack developer.
Need suggestions?
- Go: already comes with the solid net/http package to build a simple REST API.
- Java/Scala: use the Play Framework
As a back-end developer
First, get your feet wet by learning the basics of html, CSS and JavaScript. Do not start using JavaScript frameworks just yet, so only use lightweight libraries were needed. Why this first? It covers the absolute basics and learning CSS early on will save you a lot of layout headaches later. Talking of layout headaches, make sure you learn CSS Grid and Flexbox, they’ll make your life so much easier.
- take a back-end-based server-side rendering framework, which will generate pages on the server-side based on html templates. It’s an easy entry into front-end development, as you don’t have to worry about complex JavaScript frameworks and you’re still working in a sort of back-end environment. Need suggestions? Java/Scala: use the Play Framework. Python: use Django. Go: use Beego
- setup your own website using a static site generator: this will give you some more experience with HTML, CSS and maybe even some JavaScript. Not sure which one to use? I’ve used Jekyll extensively and loved it, which is based on ruby (but don’t worry, you don’t need to know a lot of ruby). I’ve also heard good things about Hugo, which is Go-based.
So now you’re a full-stack developer!
The next step are single-page apps. They are much more complex in terms of structure, libraries, build tools, and integration. I suggest learning the ropes with an opinionated JavaScript framework (such as Angular). The benefit of such an opinionated framework is that it makes the most fundamental choices for you. Because believe me, you really don’t want to fiddle with setting up your own build pipeline (using Babel, Webpack, Grunt, …) yet, that’s a rabbit hole of its own.
Playing to your strengths
At some point, you’ll feel effective as a full-stack developer. Now is the time to focus more on the integration between layers. Versatility is one strength, but two front-end and back-end experts can easily replace you, while doing a better job on either end. Replacing someone who excels in the integration between layers, that’s much harder. It’s all about playing to your strengths.
Just as an example, you probably don’t know:
- many devs who know how to hook up proper authentication & authorization in a front-end app with, for example, an OAuth/OpenID Connect flow. Plus, also understand the configuration of the OAuth server.
- many front-end devs which have a wider range of knowledge on messaging protocols and knowing their pros and cons, going further than just regular HTTP: Websockets, MQTT, SSE, …
- many back-end or front-end devs who know how to debug an issue which starts in the UI and track it all the way through the back-end’s core
- many front-end devs who know how to protect a front-end app’s web server from common security vulnerabilities
- many devs who understand the implication of an API change and how it might impact the user experience
You are the glue between back-end and front-end specialists. Where they stop with debugging, you jump in. It’s your job to advise them on the design of the integration layer (messaging format and protocol, authentication/authorization, API design), and even pull most of the implementation work. But also, don’t overplay your hand. Know when you need to fall back on a specialist (certainly when making security decisions!).