A mental model useful for:
- An engineering leader reasoning about their team and strengths / weaknesses / gaps
- An individual contributor trying to position themselves in the job market or work on skills.
The vertical dimension is the one most are familiar with: Browser, mobile or desktop applications in the Front-End, service code running in different deployment contexts on the Back-End, and Persistence aka database(s). And then in sufficiently complex systems, layers of the above with persistence either interspersed (edge caches) or distributed (local storage in the browser, an in-mem cache on the web server, etc).
The horizontal dimension is the Software Development Life Cycle (SDLC) stretched longitudinally. Run it left to right, like a timeline. Starting with learning and planning (usually in collaboration with a Product Manager) and design (visual, UX and/or technical) and running all the way through running, wiring together, maintaining and even all the way to sunsetting and tearing down.
Running this exercise on any group shows something that should be obvious, but isn't: the Full Full Stack Engineer who can operate in most if not all quadrants of the two dimensional spectrum and be very proficient in at least one of them is rare and has become an extremely valuable commodity.
50% in one vertical hemisphere is awesome as well: The front-end specialist who can sketch and design and understands every bit of how browser apps are tested, deployed, secured and observed; the back-end specialist who can anticipate future needs, run migrations, reason about whether code should be run in a container or serverless and the associated abstractions, support full-stack stack traces, secured within the network topology etc.
100% vertical but no width has gotten tough, at least in Software As A Team Sport context. You have to hide the engineer who can't collaborate with the PM and just wants to throw their code over the fence to a DevOps team who worries about the fiddly bits of actually running this stuff.
If I was starting out my career in tech today, I'd pick either front-end or back-end, learn the basic tech, and then dig in on the heart of the SDLC... design through deployments through operating. In 3-5 years you can either learn the other half of the stack, or go the Devops route.
For building an engineering team today, I would (and do) look to value the horizontal axis (SDLC coverage) over the vertical (full tech stack capability) and try to get it in at least half to two thirds of my team.