Mastering the Entire Stack
I had an enjoyable meeting with a peer of web dev wizardry the other week. He was illustrating a development framework for web apps that he created, talking me through the many layers of the architecture. While enjoying the discourse there was one small thing that he said that I thought profound: “no one’s a master of the entire [web technology] stack”. He said it so matter-of-factly, no big deal, just a transition sentence to frame an illustration of the beauty of one smart abstraction or another in his framework.
No one is a master of the entire web tech stack.
(For those of you not familiar with such nerd speak, the “stack” we’re referring to is the several varied technologies, each layered upon the previous, which collectively comprise and power web applications. Server runs upon operating system, database runs on a server, business logic uses database, and so on.)
No one is a master of the entire web stack. Conventional wisdom. Self evident. But of course.
I disagree. My musings in the last few months have led me to curiosity about my staunch opposition to conventional wisdom that [non-trivial] application development requires a large team, large budget, and long time lines: am I full of it? Is there something I’m missing? Where’s the loophole?
Mastering the entire stack might be that loophole.
(A quick technical caveat for the nerdy purists in the house: I don’t pretend that I’ve mastered the literal entire stack, for example I know only a little about the L in LAMP stack1. But since you do things nearly identically on the so-called WAMP stack (swap in Windows for the operating system), I don’t think my craft suffers for it. This suggests there are some shortcuts one can take while effectively maintaining mastery over the technologies that make a difference when creating web applications. Similarly, one can get by with only crude [or even zero] knowledge of, say, hardware level logic gates and assembly language, which are also part of the rigorously defined entire stack.)
This I think may be my loophole. In a world where designations like “database admin”, “front end developer”, and “back end developer” comprise commonplace job titles, it’s obvious that most teams and individuals in my trade are sold on segmentation of skills along slices of the technology stack as the best way to do it. Specialization and depth over broad, general skill sets. Makes sense, our civilization has been going in that direction for centuries.
But does it need to be? It’s certainly not ideal: communication overhead and inflexibility makes it easy for me to best most teams on price, time and quality, I have enough client horror stories to assure me of that. So then is your average developer stuck in a niche, unable to branch out their mastery because it’s too much to handle? Am I just a genius? I don’t think so.
I think above all it’s a matter of just trying. Overcome that little voice in your head that says “who am I to design a schema without the fancy title of Database Administrator?” and just do it3. Play with a nice JS framework and make some cool AJAX stuff happen on the client side of things, most of the hard stuff is done for you anyway. Learn a few CSS tricks and experiment with making things pretty instead of stark utilitarian. I bet the average pigeon-holed developer could explore in other parts of the stack and be at least baseline proficient in all of it with just a few weeks of dabbling on the side. It’s those Renaissance-type developers that you really want.
- For the non-nerds hanging along, LAMP stack refers to Linux operating system, Apache web server, MySQL database, PHP server-side language. ↩
- Add in ability to represent strong in the boardroom talking business needs behind the software, and they’re damn near impossible to find. Ahem. ↩
- I dealt with this very concern when I built my first web application to manage my department at MonsterCommerce. It wasn’t that scary, I learned what I needed to as I went and cleaned up any rookie sloppiness as I got better. ↩
This is Programmer for Hire, a series of essays and explorations on the art of being a great programmer doing on-demand custom software development.