Skip to main content

This is perhaps one of the most continually asked questions by all the entry level software engineers.

In this article, we will try to debunk one of the age-old debates of whether you should become a specialist or a generalist. Should you become a “full-stack developer,” or should you specialize in one or two areas of software development and “go deep?” or should you specialize in Java or should you also specialize in UI technologies?

To be honest the real answer is both. Let’s find out why.

The Power of Specialization

Before we get into the topic, let’s start by exploring just how important and beneficial specialization is. Let’s suppose that you were on trial for a crime (I hope this never happens). Yes, a crime you did not commit. But you still need to prove you are not guilty. What do you do?

Do you hire a lawyer who is good at labor law, civil law, real estate law and criminal law? Or do you hire a lawyer who specializes in criminal law, specifically defending people who are convicted of robbery? I don’t know about you, but if the rest of my life is on the line, I’m going to choose the specialist every time.

Many people say they would prefer being a generalist, but when it comes down to it, they pick a specialist every time.

That’s not to say there isn’t any value in having a broad base of knowledge, or being a generalist to some degree, but it is extremely valuable to be a specialist of some kind—or at least to market yourself that way.

The lawyer that you hired might be very good in multiple areas of law and have knowledge in several fields. But he advertises himself as a murder or criminal lawyer because he understands the power of specialization.

Another simple example, if you had to build a customized wooden chair and you had to choose between a contractor who knows carpentry, plumbing, painting versus a person specializing in carpentry. I would choose the person specializing in carpentry.

Don’t you think the carpenter could probably handle other jobs? Of course, they can, but they preferred to specialize because it may be more profitable than other jobs.

Have a broad base in order to specialize!

One thing that many software developers should take note of is, all specialists are also generalists, but no generalists are specialists. What does that mean?

In order to acquire the skills of a specialist, a great deal of general knowledge is required, and it is accumulated along the way.

It is tough being a good specialist without building a broad general knowledge about your field.

One of my friends’ wife is studying to become an oral surgeon. She had to first go through dental school and become a dentist. Now, she’s not going to be doing general dentistry very often, but to her, filling a cavity or doing some general dentistry work is cake. She’s probably better than most generalist dentists, simply because she had to learn all that and more to become an oral surgeon.

It’s all about the T Factor

What do you really want to strive for is T-shaped factor or T-Shaped knowledge? It means you have deep knowledge on one skill or technology and a broad base of knowledge in your field or area.

As a software developer, you should strive to be well-versed in front-end, back-end, databases, best practices, algorithms, data structures, system design, architectures, etc. But pick at least one area where you are going to go in-depth. You need to pick some specialization that will set you apart from the masses and increase your value.

You have to be versatile and adaptable to learn quickly if asked to work on the skills which you knew very little of.

You can’t be a generalist today

It’s not really possible. The field of software development and technology is so vast, it is hard to cope with the pace. Hence, you can’t know everything present out there. Yes, you can have a broad knowledge base. Even if you are a “full stack” Javascript developer, you are going to have to pick a stack or two i.e., either MERN or MEAN stack. You can’t know them all and be super effective. It’s not just computer science and programming where we have so many options to choose from. Every profession is moving towards more value on specialization.

Lawyers, Financial Analysts, Accountants, and just about every kind of engineer must specialize to be effective and unique, because knowledge domains are growing.

But what if I specialize in the wrong area?

Then specialize in something else. When I started my career back in 2012, I specialized in Java Swings which was used to create desktop applications. During the same period, desktop applications were no longer preferred, the era of web applications had already started and grew in popularity. Did I switch my career and become a Lawyer? No. Since I already knew Java, I planned to specialize in the Java based framework i.e., Spring framework which is a one stop solution for developing enterprise back applications.

A lot of software developers are afraid of picking the wrong thing to specialize in and end up not specializing in anything. They remain stagnant in their careers for years, paralyzed by fear, always considering the “what ifs.” Don’t do that; just pick something and go with it. Something is better than nothing, hence you can always change directions later if you need to. You’ll notice that once you learn how to go deep into one specialization, the next one is much easier.

So, what should you do?

Regardless of where you are in your career, pick some kind of specialization to pursue.  Whatever you choose, try to build your personal brand around it, and decide to go deep. But should we choose a specialty based on our interests or on what we’re doing for our current employer? Well, this is a tough one.

If you plan to specialize on something different from what you are currently working on every day, it will be difficult to build the expertise you need and go into the depth required to specialize. It’s certainly possible though.

Perhaps start off learning your desired specialization and building a reputation around it in the mornings before work and/or in the evenings.

Don’t be just a Java developer: be a Java developer specializing in a Spring framework and know some UI stack. Try out as small as possible and get into more details as you go. You can always branch out and expand later. Learn how to write good code. Try to avoid learning a bunch of different programming languages and frameworks that you may never use.

By following this approach, your progress and success will trend upwards.

Author
Ravikiran Kada

Ravikiran Kada is a Lead Software Engineer at GS Lab | GAVS, has around 10 years of software development experience primarily working on technologies such as Java and Spring Boot. Most of the experience has been in the Banking domain covering areas such as Insurance, Retail banking, Research, Lending etc.

Ravikiran enjoys playing cricket at club level and is a sports enthusiast enjoying several other sports.