Understanding the Difference Between Broad and Narrow Software Engineering Skillsets

All software engineers possess a unique set of skills they’ve gathered throughout their careers. Their skillset can be categorized as “deep and narrow” if they’ve honed one or two skills to mastery while neglecting others. Conversely, a “broad and shallow” skillset signifies someone who possesses a basic understanding of various skills without specializing in any particular area.

The majority of software engineers fall somewhere in between these two extremes, having a mix of strong, average, and underdeveloped skills. This article delves into the spectrum of skill breadth and depth, advocating for the benefits of broadening one’s skillset for most programmers.

Software Engineer Skills: Graphic representation of a skillset

It’s crucial to acknowledge that the concepts of breadth and depth are relative. For instance, expertise in web development can be considered “deep and narrow.” However, specializing further in client-side web development or even more specifically in JavaScript narrows the skillset considerably, even though all these can be classified as specialized skills to some extent.

While not very common, it’s worth noting the existence of “deep and broad” and “shallow and narrow” skillsets. The former refers to individuals highly sought after due to their expertise in multiple domains, while the latter represents those who are yet to delve meaningfully into any skill. Due to their rarity, these extremes won’t be discussed in detail.

Categorizing Software Engineer Skillsets

Deep and Narrow Skillsets

Possessing a deep skillset implies mastery in at least one specific area.

Consider SQL as an example. A deep understanding would encompass comprehensive knowledge of relational database theory, familiarity with the strengths and weaknesses of various database systems like MySQL, PostgreSQL, Oracle, and SQLite, expertise in query optimization, and understanding when and how to denormalize a database. Professionals with such specialized knowledge are highly sought after and for good reason. They can immediately contribute effectively and deliver exceptional results.

However, if the project’s scope expands or undergoes significant changes, such specialists might be replaced or require support from programmers with complementary skills. Even without major modifications, their narrow expertise might limit their ability to recommend architectural changes, potentially overlooking more suitable options like NoSQL databases or even foregoing a database altogether.

Broad and Shallow Skillsets

Conversely, generalists without domain expertise require some time to adapt to new projects before reaching peak productivity.

For example, imagine a generalist tasked with a Python project despite lacking prior experience with the language. However, their general knowledge about Python (dynamically typed, interpreted, multi-paradigm) combined with their experience in other programming languages would facilitate a smoother transition.

While their initial code might not be Pythonic (lacking the efficient use of tuples, comprehensions, or generators), they would know where to begin and make consistent progress. Their well-structured code modules would allow for easy improvement later. Moreover, their broad technological perspective could offer valuable insights that specialists might overlook.

As the project evolves, these generalists become assets rather than liabilities to their teams.

Skillsets in Real-world Scenarios

Analogically, narrow skillsets resemble towering mountains, while broad skillsets resemble vast plateaus. Using this imagery, typical skillsets likely consist of a couple of prominent peaks, a few hills, and vast stretches of plains.

Graphic representation of mountains, hills, and plains

An average programmer might excel in SQL and Python, demonstrate proficiency in web programming and algorithms, yet feel apprehensive about other areas like core dumps, setting up OAuth servers, or developing native apps. Such programmers should continue leveraging their strengths while actively identifying and addressing their knowledge gaps.

This strategic approach is likely to serve them best throughout their careers.

The Importance of Skill Diversification for Programmers

Many projects necessitate a diverse range of skills combined in unexpected ways. While broadly skilled engineers can contribute effectively to most projects, specialists might find their highly specific skillsets aligning with fewer job requirements. While not necessarily detrimental in the short term as one job suffices for financial stability, there are long-term implications to consider.

Overspecialization can be risky. Placing all your eggs in one basket might seem viable if you possess exceptional foresight, but such an ability is rare and unrelated to technical expertise. Consider the demand for Windows programming skills in the current landscape. A decade ago, could many have accurately predicted the trajectories of Android, Flash, Nokia, or Blackberry?

Furthermore, leading tech companies highly value diverse skillsets. Facebook, for instance, allows new hires six weeks to explore different teams before assigning them. Google encourages internal transfers and offers various rotational programs. Even for freelancers, keeping options open is advantageous. Aspiring to work for such companies necessitates a certain level of versatility and a broader skillset.

Assuming you’re convinced about the benefits of skill diversification, how can you achieve it?

Strategies for Diversifying and Enhancing Technical Skills

You can choose to trade money for skills:

  • Accept a lower rate while transitioning to a new field. A temporary 25% pay cut is reasonable if your productivity is temporarily reduced by a similar margin. You’ll be able to negotiate a higher rate once you gain more experience.
  • Build your portfolio by undertaking unpaid demo projects using the desired skills while applying for jobs that require them. Even if you realize you’re not ready for the transition, the learning experience itself is valuable.

Alternatively, you can trade time for skills:

  • Contribute to open-source projects. You gain valuable feedback and validation, give back to the community, and potentially attract the attention of potential employers or colleagues.
  • Work on personal projects purely for enjoyment, inspiration, and a break from routine work. For instance, I recreated the classic Snake game while learning React.

While actively seeking learning opportunities is essential, it’s crucial to find a balance. For my Toptal interview project, I used Node.js and Backbone, technologies I had limited experience with. Although enjoyable, the required learning pace wasn’t sustainable in the long run.

The ideal approach involves alternating between extended periods of stability, focusing on consistent output and income, and shorter intervals dedicated to challenging yourself with new technologies. The frequency of these learning phases depends on factors like your existing skillset, market demand, and personal goals.

Benefits of Broad Skillsets for Employers

While deep skills remain essential in specific situations, such as:

  • Projects with limited trust or short-term commitments between employers and employees.
  • Projects with high risks involving privacy or security breaches.
  • Projects requiring niche expertise.
  • Projects with strict and non-negotiable deadlines.

Many projects don’t fall under these categories, making well-rounded engineers a valuable asset. Numerous technical skills like testing, code documentation, and all soft skills (like communication) are transferable across projects. Even in projects without complete overhauls, adaptability is crucial. If one aspect of the project stalls, generalists can seamlessly transition to other high-priority tasks.

Graphic representation of an employer choosing a developer with a broad and shallow skillset over one with a deep and narrow skillset

Given the significance of broad skillsets, encouraging developers to diversify and educating employers fixated on “years of experience” about the value of versatile knowledge is essential.

Ultimately, a track record of satisfied clients, alongside hard and soft skills, serves as the true testament to an engineer’s adaptability and ability to excel in unfamiliar domains. It also encourages freelancers to acquire new skills strategically and only venture into new areas when ready.

Achieving the Right Balance

Undervaluing broad skillsets can lead to underemployment of skilled developers and understaffing or budget overruns in projects. Insisting on a perfect skillset match is akin to mandating on-site work, limiting the pool of qualified candidates for rewarding projects.

This isn’t to disregard the importance of domain expertise, which will always be valuable and sought after. However, recognizing the often-overlooked significance of broad skillsets is crucial.

Licensed under CC BY-NC-SA 4.0