How to become a full-stack developer
You’ve started your career as a pure front-end or back-end developer and after several years you want to make the jump to full-stack development. But making that step seems daunting as it requires you to learn a completely new language, a completely new ecosystem of libraries and frameworks and even completely new code paradigms (e.g. functional programming) or concepts (e.g. data binding).
Where to even start? And what would make me a valuable full-stack dev?
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.
How to gradually make the transition
While the technologies will be different when you come from either the back-end or the front-end, 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 skillset, 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
Great, now you’re a full-stack developer! So once you feel comfortable building REST APIs in Node, try to make the transition to another backend 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.
- 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
Playing to your strengths
At some point you’ll start to feel effective in both back-end and front-end development. You’re not an expert, but you can build something full-stack in a reasonable amount of time. This is when you should start focussing more on what actually makes you valuable as a full-stack developer, being the integration between front-end and back-end. Versatility is one strength, but an expert in front-end or back-end development can easily replace you. Replacing someone who excels in the integration part, that’s much harder.
Just as an example, you probably don’t know:
- many devs who know how to properly hook up authentication & authorization in a front-end app with for example an OAuth/OpenID Connect flow. And not just the front-end work to get it done, but 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 pro’s and con’s, going further then 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 backend’s core
- many front-end devs who know how to protect a front-end app’s webserver 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 advice 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 fallback on a specialist (certainly when making security decisions!).