Depth and breadth in software engineering

When evaluating our knowledge and skill as software engineers, we can also think in terms of breadth and depth.

Breadth of knowledge means that we understand a broad range of interconnected concepts. For example, we might have knowledge of a few different languages, frameworks, libraries, patterns, protocols, etc, covering web front end, web back end, continuous delivery, and software development methodologies. We may not have significant depth of knowledge in each area, but we have enough knowledge that we can see how all of these areas connect.

Breadth of skill means that we can apply our breadth of knowledge to build software systems that include (for example) front end single page apps or server rendered pages, back end REST APIs backed by SQL databases, asynchronous message processing queues, and deployment pipelines. Breadth of skill implies both broad knowledge, and much practice applying that knowledge to real technical problems.

Depth of knowledge means that we have a significant range of both high-level and low-level knowledge within a narrow area. For example, shallow knowledge of React might include basic understanding of components and hooks, allowing us to build some simple applications. Deep knowledge of React might include an understanding of many more aspects of component lifecycle, several types of hooks, different ways to use context, complex state management, and patterns to solve many types of common SPA (single page application) problems, idioms and philosophy, etc. Deep knowledge of React might also mean understanding key differences between React, Vue, Svelte, and vanilla Web Components.

Depth of skill means that we can write and maintain complex code, plan and execute complex software projects, debug complex problems, and make informed decisions about trade-offs. Depth of skill implies both deep knowledge, and much practice applying that knowledge to real technical problems.

There is, of course, a practical limit to how much breadth and depth we can build. And it takes time and hard work to build either of these. But, this breadth and depth of both skill and knowledge is what separates highly valuable engineers from average engineers. This combination of ‘breadth, plus depth in one or more areas’ is commonly referred to as a ‘T-shaped engineer’, and a web search will yield some interesting reading

One way to build both depth and breadth is to practice learning from a perspective of both necessity and curiosity

See also:

  • [[Knowledge and skill in software engineering]]
  • [[Necessity and curiosity in learning software engineering]]
  • [[Four modes of learning in software engineering]]
  • [[Break Out of Tutorial Hell and Overcome Impostor Syndrome]]