Full Stack or Self-Sufficient?
Often you will see mention of full-stack developers, and almost as often you will see rejoinders: what level of proficiency in the different areas of the stack do you require to describe yourself as “full-stack”?
For individuals with a wide spread of knowledge, I wonder if a better framing is around self-sufficiency. As a self-sufficient developer I know a few things well, but I know enough about the other levels of the stack that I work in to get by. As importantly, I have enough of a conceptual framework to know what I don’t know and learn it if required.
To illustrate, the stack I deal with day to day contains roughly these elements1:
- Infrastructure - AWS, CDK
- Backend - Ruby, Rails, MySQL
- Frontend - JS, HTML, CSS
Of these, I know the Backend layer pretty well but I know enough of the other layers to get by - I can add or update elements following existing patterns, I can solve simple bugs etc. I wouldn’t describe myself as full-stack, but I would describe myself as self-sufficient.
What got me thinking about this was the book Walden by Henry David Thoreau, the 19th Century American transcendentalist. The book describes Thoreau’s experience living for two years as self-sufficiently as possible. He built a cabin in a remote part of the woods, grew or trapped his own food and generally took care of his needs - or in his own words:
I wanted to live deep and suck out all the marrow of life, to live so sturdily and Spartan-like as to put to rout all that was not life, to cut a broad swath and shave close, to drive life into a corner, and reduce it to its lowest terms, and, if it proved to be mean, why then to get the whole and genuine meanness of it, and publish its meanness to the world; or if it were sublime, to know it by experience, and be able to give a true account of it in my next excursion.2
For me, the important lesson was that he was able to live a simple life on the basis of his own skills and talents. I think this can be similarly applied to developers. Being self-sufficient is not necessarily about being able to build the most whiz-bang application entirely by yourself - collaboration is still crucial for complex systems - but about being able to have enough tools to progress, understand and unblock yourself as needed.
I wonder if something like networking (TCP/IP, HTTP, Websockets) forms another layer of the stack? ↩︎
Note to self, start writing commit messages like this: “I wanted to delve deep into the machine and stare at it’s beating mechanical heart and discover the sickness within. I return, triumphant, after excoriating it’s malaise and fixing the typo in the environment variable.” ↩︎