The New Definition of Full-Stack Engineer
Tags: webdev, softwareengineering, beginners, programming
Published: 2023-06-12 07:56:52

A full stack engineer is now someone who not only understands how to build web applications from the ground up (including frontend, backend, DevSecOps and cloud), but also has a deep understanding of each layer. This means that they are able to work across all parts of the stack and understand how each layer interacts with the others.

This shift in definition is due to the fact that web applications have become more complex over time, with different frameworks and libraries being used for different purposes. As such, it is no longer possible for one engineer to be an expert by just knowing front-end and back-end — instead, they need to have a deep understanding of all the layers in order to be able to build a complete application.

What this means for engineers is that they need to continuously upskill in order to keep up with the latest changes in technology much faster than ever before. With the introduction of Open-AI, there is further uncertainty of how this will impact Software Development. Engineers need to be able to adapt quickly to new frameworks, libraries, and new styles of working as they are released.

## Abstraction further introducing complexities
At SRECON 2022, people were discussing the idea of a mechanic building a robot to maintain a car, taking them out of the equation. This worked well for a few years, but then the car started to break down and the robot wasn’t able to fix it. This left the mechanic with the perplexing question of whether to fix the car, upgrade the robot, or both. What if the robot had been sent from a factory, or was remotely controlled from a dashboard somewhere else? As technology becomes more abstract, it will become increasingly difficult to trace and fix code issues. We have gone from physical servers to virtual servers, containerisation, cloud, and infrastructure as code, with each layer of abstraction making it harder to diagnose issues.

## Hone your Craft: Creating Your Own Site from Scratch
As a full-stack engineer in 2023, creating your own end-to-end website is a crucial step to becoming a well-rounded developer. While web-building platforms offer a simplified way to deploy sites, they often remove the understanding of how things work behind the scenes. This post will highlight the key lessons you can learn by setting up a simple end-to-end website.

## Frontend: There’s no place like 127.0.0.1
Starting a localhost website can be done with a simple command using npx, making it straightforward to run a site on your machine. Docker also simplifies the process by allowing engineers to run multiple containers locally with a single command. However, making things too easy can result in missing out on important lessons. When making your site accessible online, you can’t just run it via localhost on port 8080, or just expect your API calls to work as is when you had your backend running due certain restrictions like CORS. Another, important lesson is creating a production build, as deploying files and JS libraries to the online environment requires optimization for online consumption, which is a more complex process than just installing unlimited JS libraries on your local machine, imagine expecting your users to download MBs of your JS libraries just to see your home page.

## Backend: Building a Robust System
Building a robust backend is crucial to the success of your end-to-end website. While it’s easy to start a localhost and run it on your machine with just one command, deploying it online presents a whole new set of challenges. The key lessons to be learned on the backend include setting up connectivity with the frontend, hosting both the frontend and backend on a server, and ensuring security by not exposing sensitive data.

Connecting the frontend to the backend is a crucial step in building a seamless user experience. Understanding the network and how the frontend calls the backend service is a valuable learning experience. It is also important to ensure that the backend is secure, especially if it contains sensitive data. This can be achieved by being conscious about what is exposed in the backend and implementing proper security measures.

## Infrastructure: Understanding the Basics
One of the core steps in building your own website is to understand the basics of infrastructure. This includes procuring your own domain name, setting up SSL with a DNS, networking, and implementing a Continuous Integration/Continuous Deployment (CiCD) process.

Have you ever considered purchasing a domain name from a DNS provider and setting it up in your cloud provider so that anyone who looks up that name will be redirected to your site? Setting up the CName and Aliases can be a challenge, especially if you’re not familiar with the process. The trade-off of using a platform like is that you’ll either have to use a subdomain (e.g. [https://yourwebsite.other-website-builder.com](https://yourwebsite.other-website-builder.com/)) or be dependent on the domain owner.

In addition to the basics of DNS routing, deploying to a server in the cloud is also crucial in building a website. By deploying to a cloud server, you are able to ensure high availability and scalability of your website, making it accessible to a wider audience at the same time learning core concepts of cloud development. Current cloud service providers provides a plethora of tools and services to help you deploy your website effectively, but without understanding the fundamentals it will hard to understand how each service relates to one another or what to service to even use. Based on how you built your application there a number of technical learnings you will pick up just by trying to deploy it. e.g: Are you deploying a tar file on a server and extracting it there or are you pulling a docker container? Are you hosting it behind a web server that reverse proxies it to another? Do you need to cache certain files or create a load balancer so it’s easily accessible across the globe? Again, key learnings that can easily be abstracted by using any website builder available online.

Once you have a decent application deployed online and you want to make changes, you’ll soon realize that deploying changes manually is not sustainable. This will force you to figure out how to set up your deployment pipeline, which could be easy or difficult depending on your tech stack choices. Nevertheless, the journey between different tooling will open your eyes to a plethora of options.

## Conclusion
Setting up a full end-to-end website from scratch without assistance of sites online provides a hands-on learning experience in infrastructure, frontend, and backend development. By understanding the basics of each aspect and implementing them correctly, you can be more confident on how each layer works regardless of how much abstractions are introduced later on.

Let us leave the added complexeties of Machine Learning’s effect on Software Development for another day.

See my serverless personal site: https://www.melchortatlonghari.com/