Expert-Generalist in the Software Development Industry
Published: 2021-03-23 16:23:56

Jack of all trades, master of none. But what if you could build a bridge between the two extremes and be proficient in more trades than one?

If you’re someone who loves learning different things, you’re probably familiar with this well-intentioned advice: “Focus on just one field. Jack of all trades, master of none.” This phrase implicitly says if you study in multiple areas, you’ll only learn at a surface level and never will be master in anything.

Definitely, it is quite hard to achieve mastery in every field that you are interested in, but it's totally possible being an expert-generalist.

Orit Gadiesh, chairman of Bain & Co, who coined the term, describes the expert-generalist as:

“Someone who has the ability and curiosity to master and collect expertise in many different disciplines, industries, skills, capabilities, countries, and topics.”

The concept is commonly represented by this model of the "T-shaped individual":


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ui83yh1yid1wxik8xcps.png)

Don’t confuse this with the proverbial "jack-of-all-trades, master of none." Expert-generalists study widely in many different fields, understands deeper principles that connect those fields and then apply the principles to their core speciality. What distinguishes the expert-generalist from the specialist is their courage and openness to change and the habit of learning.

As you can notice the term Expert-generalists spans over a wide range of different fields, however in this post I would like to limit the discussion to the software development field

In the software development field, we also receive the advice of being a specialist rather than a generalist; people argue that if you want to be really good at something, you have to specialize. Instead of trying to learn and do everything in a mediocre way, you pick a language and a small subset of problems (e.g. server-side development) and you become really good at it and by being an expert in your area, you have a better chance to differentiate yourself.

Generalists, on the other hand, argue that there are a lot of different types of problems with diverse solutions and a good programmer needs to have a generalist view and toolset to be able to work on any part of the problem. By not limiting yourself to a small area, you keep your mind and options open, keep challenging yourself with diverse problems and get better at problem-solving, which is the essence of programming.

We can notice that there are benefits in both options and you can succeed either being a specialist or generalist; however, this post is trying to present the expert-generalist concept and this new type of professional.

When I’m talking about being a generalist in software development, I’m not talking only about different languages, I’m talking about everything that makes this industry, such as DevOps, networking, cloud computing, web design, distributed system, decentralized application, database, design patterns, programming principles, code management, scalability, security, big data, and machine learning. Many fields of study connected to a master in the core speciality: software development.

Learning across multiple fields provides an information advantage (and therefore an innovation advantage) and being able to put all the pieces of the puzzle together is very important if you have a strategic role in a company. There are plenty of successful leaders in the world who are skilled at management. But without being an expert-generalist, they will not be able to propose innovation and optimize efficiency, and those leaders must then rely on many specialists to improve their processes.

The main reason expert-generalists are rare is because there are no shortcuts. There’s no university degree for this. You don’t become one without having worked for at least one decade and studied a lot. We have infinite access to content at our fingertips and it makes our lives easy in the sense that we can start learning something new with almost no cost and at any time of the day. For software developers, it is even easier because everything we need is a computer and an internet connection.

To try to fill the lack of experience with what you are learning, you can participate in open source projects, write articles, or teach others; everything is valid as a way of consolidating what you have learned. Because you will probably not work with everything you have learned at the same time, you will not have all the answers on top of your head and you may feel outdated after some time, but don’t worry: make sure you understand the fundamental principles and you will be able to catch up easily all the details when you need those.

It's very important for those developers who are expert-generalists to take the responsibility as problem-solving, innovation agents and efficiency improvers, as too many organizations don’t understand their value. But the expert-generalists are those always looking at the whole process and trying to make it better because they are not looking only at their narrow field. People with these characteristics develop the habit of learning about a wide range of topics and do not restrict themselves to the tech industry, which fosters the knowledge to offer diverse and creative solutions.

### Free Advanced Java Course
I am the author of the [Advanced Java for adults course](https://www.udemy.com/course/advanced-java-for-adults), this course contains advanced and not conventional lessons. In this course, you will learn to think differently from those who have a limited view of software development. I will provoke you to reflect on decisions that you take in your day to day job, which might not be the best ones. This course is for middle to senior developers and we will not teach Java language features but how to lead complex Java projects. 

This course's lectures are based on a Trading system, an opensource project hosted on my [Github](https://github.com/apssouza22/trading-system).