Mina Naguib

Learn You Some Full Stack - Introduction


This is the first post in a series, of yet unknown length, which aims to explore “full stack”.

This concrete, and seemingly menial question, will be the driver behind this series:

How does Bob send Mary a message on the internet ?

Each post will be focusing on one particular topic, and we’ll likely meander quite a bit within it to explore related areas.

While this series will undoubtedly be technical, I will do my best to make it interesting to a wide range of technologists, whether they self-identify as back-end folks, front-end folks, hardware folks, networking folks, managerial folks, hacker folks, nice or mean folks. I am also hoping to force myself, through this series, to explore some topics beyond my current depths, and document that along the way.

“Full Stack” ?

The exact definition of “Full Stack” lies somewhere next to the exact definition of “Cloud Computing”. That is to say, there is no single definition. Within the domain, size, expertise, and requirements of each organization, their expectations of a “Full Stack” person will, for better or for worse, vary greatly.

For example, in an organization where the primary product is a small static web site, a “Full Stack” person there may be someone who has the technical abilities to single-handedly build and go-live with such a web site. The mix of technologies that person will need to be good at will be HTML, CSS, some JavaScript, some version control, and basic know-how of domain registration, some DNS, and some web hosting.

Conversely, in an organization where the primary product is a highly available high-volume dynamic web site, for example a social platform, a “Full Stack” person there may be someone who has all of the previous skills, plus a few more: Databases, distributed systems, deployments, telemetry and monitoring.

Yet another example, in an organization where the primary IT concerns are high-value semi-private systems, for example a bank/government/law firm, a “Full Stack” person may be someone who needs not know HTML nor CSS, but still needs to have the rest of the above, as well as other skills like deeper understanding of databases, designing access controls, solid understanding of encryption, disaster planning and security threat models.

And in yet another example, in an organization where the primary IT concern is high-volume high-speed financial transactions system, a “Full Stack” person will likely need all of the above skills, plus a solid understanding of networks, data transmission/encoding/encapsulation, hardware characteristics and dedicated circuits.

To further complicate things, even some of the building blocks mentioned above don’t have have a standardized meaning themselves. For example, when we say someone is a “front-end” specialist, it may still be quite ambiguous. In the case of the organization producing the small static web site, the skill set described above is what they need from their “front-end” person. While in the case of an organization with a much larger tech surface like a social media platform, the web application may only be a small part of the entire stack, and so therefore their notion of a “front-end” person might imply someone who is comfortable building the entire web application, possibly including it’s “back-end” parts like a database or a queue. Clearly both types of organizations can have a “front-end team”, but the tech skills required for performing both jobs within the two teams may be quite different.

In some organizations, the tech stack is so large that it would be impossible, even for the smartest top-notch engineers, to be truly “Full Stack” in the organization in a global capacity, having both ability and knowledge to truly impact all systems there. Past a certain size, it’s unfeasible for a human brain to hold all the information needed. Once organizations and their tech stacks get to that size, things are usually divided into manageable sizes and dedicated teams stewarding specific sets of systems. There may still be “Full Stack” people within each team, but their domain, and the stack they are fully experts at, is a smaller part of the larger domain.

On the flip size, in some smaller organizations and startups, the technology domain is usually so small (sometimes smaller than small - just a man with a dream), that a “Full Stack” may be exactly the profile that’s needed to actually build something useful and get it off the ground in a short amount of time. Small organizations typically have small budgets, and so if one or two full-stack engineers can bootstrap all the pieces needed for a working product, it can be better value than building a larger team of many specialists, each specializing in one piece.

Technology, especially internet technology, is still fairly fluid and rapidly changing. For now, we’ll settle on this equally fluid definition of “Full Stack”: Having the ability to build and affect change in the set of technologies needed for a project.

About the author

Mina Naguib has been writing software, designing and running production systems since 1997. His experience covers back-end messaging and provisioning, front-end web applications, and high-volume online advertising. He has been called, at least once in an entirely unsolicited fashion, a “Full Stack Developer”.

Learn You Some Full Stack Series:

How does Bob send Mary a message on the internet ?

blog comments powered by Disqus