I recently switched jobs, and according to the job description I’m now a full-stack developer. That means I’m able to write software running both on server and client. But truth to be told, a model SaaS application stack goes way deeper than that, so sometimes I feel describing myself as full-stack sounds — at least a little bit — presumptuous.
Don’t get me wrong. A good full-stack software developer, like any professional, should feel pride in their craft. They need, after all, to be skilled in programming in multiple environments with different characteristics.
Frontend application software: This is what’s running on your user’s machine, whether it’s a browser, a smartphone, or a console managing an industrial plant. It should run without lag and glitches and keep its state consistent across the board. And like any piece of software, the code and architecture should be well crafted to keep it from degenerating into an unmanageable bowl of spaghetti.
Backend application software: This is what’s running on your company’s machines. It’s structured as a monolith or a swarm of microservices. It’s talking to databases and other services, which sometimes work as intended, and sometimes don’t. And it’s probably consuming some CPU cycles and memory, but that’s no concern as long as you provision yourself a beefy enough server, right?
But there’s so much more to running a SaaS stack than just the application. Here’s a shout-out to some of the other professionals keeping that stack running!
Infrastructure software: This is stuff like databases, queues, caches, object storage, etc. A full-stack developer should probably be aware of what to use them for (storing and moving around data) and how to use them (designing and accessing database schemas efficiently). But they should be supported by expert database administrators who know how to manage healthy and scalable database clusters, fine-tune OS and hardware for maximum performance, etc.
System software / kernel development: I believe I speak for most of the developers when I say that I’m struggling even to understand the internals of a Linux distribution. I’ve got nothing but awe for people who are actually able to write it. Developing and testing system software takes a special kind of discipline because a new release is being deployed to millions of computers, with serious bugs having far-reaching consequences.
Server management: Your application might be running on Kubernetes cluster(s) or (virtual or bare-metal) servers. Someone needs to ensure that there is enough healthy up-to-date computing capacity at your disposal. For many SaaS companies, that person likely works in “the cloud”.
Physical infrastructure: In the end, the software is running on computers in a data center. Those computers obey the laws of thermodynamics by inputting electricity and outputting heat. They transmit gigabytes of data per second both within a data center network and across the Internet. When a CPU or a router or a power supply breaks, the show must go on while someone replaces it. The very bottom of an application stack is typically well hidden from a developer, partly because of the requirements for physical security.
Hardware design: It never ceases to amaze me how the human species learned to make quadrillions of electrons work in unison to produce fast and precise computation. It has taken an unbelievable amount of academic and industrial research to assemble nanometer-scale transistors and integrated circuits with immense precision.
And the list goes on: I haven’t even talked about DevOps, security, and a myriad of other vital functions needed to run a SaaS stack. All technology aside, your software is running in a world with financial, regulatory, cultural, and many other factors. Dealing with all that is something way beyond my paygrade.