Go Deep, Then Go Broad

Where do you stand in the generalist vs specialist debate? Do you think it's more important to be an expert in a particular field, or is it better to be a jack of all trades?

I have the simplest answer to this question. Coincidentally, my answer is also one of my favorite early 2010s memes: why not both?

"That isn't really an answer, Maxi. It's just another question! (and a pretty convenient one.)"

Good observation, reader. I knew you wouldn't let me get away with that. I do have an actual answer though, and I promise to elaborate on it in just a minute. But before we get there, we need to talk about something else—pyramids.

The Pyramid of Knowledge

Imagine a pyramid. Or, if you prefer to work in two dimensions, imagine a triangle.

It needs to be a pretty big pyramid (or triangle) because it has to contain all of the knowledge in the universe about a particular domain. It could be a very broad domain—like engineering or accounting—or a very narrow one, like React development or Excel spreadsheet hacking. For today's discussion, we'll choose a domain somewhere in the middle: software development.

Untitled

The Pyramid of Software Development Knowledge

The top level of the pyramid contains all the stuff you know about software development. If you're a frontend engineer, at this level you'll find your knowledge of HTML, CSS, and JavaScript, as well as any other languages and frameworks you use on a regular basis. This might include React, Vue, Tailwind, Laravel, Git, or any other technology in your software engineering toolkit. Yes, you can put your Vim keybindings here as well.

The middle level has the stuff you know you don't know. All of the languages and frameworks that you sort of understand at a high level, but not completely, will go in here. This includes all the tools you might have heard of but never actually used.

In my own pyramid, the middle level includes technologies like Rust, SolidJS, and Qwik. I'd also put concepts such as load balancing, eventual consistency, and whatever "the edge" is in here. The criteria for placing something at this level is to have an understanding of what it is and what problems it solves, but without necessarily having to be an expert in it.

Finally, the bottom layer contains the stuff you don't know you don't know. This is where I'd personally put languages like Scala or Julia. Most knowledge about compilers, interpreters, and low-level programming also goes here in my case. And there's a bunch of other things I simply can't think of because, well, I just don't know about them. For example, what 99% of all AWS services do.

I learned about the pyramid of knowledge from the book Fundamentals of Software Architecture, which we'll discuss at the end of the newsletter. But… why are we talking about pyramids again?

The pyramid of knowledge is a great basis for our generalist vs specialist discussion. In particular, because we can use it to talk about technical depth and technical breadth.

Depth and Breadth

The top level of the pyramid represents your technical depth. This is the stuff you're good at. Your expertise. Your bread and butter. It's all the knowledge that you have that makes you a frontend engineer.

From the moment you begin your career, your focus is to increase your technical depth as much as possible, which you'll do via hands-on experience and training on advanced topics.