Jack Of All Trades, Master Of None

Brice Nkengsa
3 min readMar 2, 2017

--

“Jack of all trades, master of none” is a figure of speech used in reference to a person who is competent in many skills but expert in no particular one. In the software development world filled with a multitude of technologies and programming languages, developers often find themselves working with a wide range of tools. “I get to work with many technologies, yet I don’t feel like I’m excelling at any of them” is a recurring theme in some of the conversations I’ve had with many developers. This lacking sense of skill mastery can be disheartening to many.

Some developers fear becoming jacks of all trades because they crave that sense of craftsmanship, the pride in becoming an expert at something. I’d like to address that fear and explore ways to look at it through a different lens.

Technologies are just tools

Programming languages, frameworks, libraries, etc, are simply tools for getting the job done. Mastering Ruby or Python in itself is pointless, unless you’re a hardcore nerd 🤓. For the rest of us who like to build software that people actually use, it is what we do with these languages that truly matters. Our use of technology to solve a business problem, picking the right tool for the job, evaluating all trade-offs is the true power of the software development discipline. Just as carpenters use power tools, tape measures, and hammers to create beautiful wood pieces, software developers use the technologies in their arsenal to create delightful experiences for their users.

Be adaptable

Six years ago, there was no AngularJS. Three years ago, React.js was non-existent. Technologies are constantly evolving, which means software developers need to be adaptable. In such circumstances, one’s ability to learn new technologies quickly is paramount. Developers should be able to pick up new technologies quickly in order to solve the problem at hand.

Master problem solving

My belief is developers should master the art of problem solving. Their ability to break down a business problem, collaborate with people (product managers, designers, testers), and arrive at a solution (not necessarily software program) that meets customer’s needs should be impeccable. Rather than focusing on the programming language, I’d focus on mastering some of the following — systems design, software architecture, performance optimization, UI/UX awareness, design patterns, etc. These are all important considerations when building great software. The underlying technologies that are used are less important. As a matter of fact, the design considerations should drive our technology choices.

While I empathize with the appeal of mastering the next hot and shiny technology, it is important to remember that technologies are simply suites of tools that we software craftsmen should adapt to, depending on the masterpiece we aim to create. Excelling in problem solving, and our ability to provide solutions to our customers, is most paramount. Ultimately, software craftsmanship is all about the people, not the tech stack.

Thanks to Mohini Ufeli (a.k.a Muscle-Mo) for helping edit this article.

--

--

Brice Nkengsa

Co-Founder @Andela. Software Engineer, Entrepreneur & Investor.