
David Goggins
So you’re probably wondering who advances further in their professional lives – the specialist or generalist?
Should we strive to go deep and master a particular skill, or should we take a broader approach by acquiring a variety of skills?
Indeed, this is an age-old debate, and it turns out that becoming both a generalist and a specialist is optimal; especially in the context of software development.
The traditional approach used to be to stay clear of appearing too specialised on your resume. Employers were looking for people who “know it all”. Businesses had a smaller workforce of developers to cut back on cost; it was best to hire people with a broad range of skills to get the job done.
It was much more challenging to do any freelance or specialised work because most industries were not commoditised. There was no global market, and the competition was little.
The times have changed.
These days, goods and services are available and have become mostly indistinguishable, with the only difference being the price tag. There is a growing number of software developers offering the same service for a lower price. Employers are now looking for developers who can specialise in a particular framework they are working on. They are looking for people who can learn and adapt quickly.
With the rapidly changing nature of technology, it’s not even possible to be a generalist anymore. There are always new opportunities appearing on the horizon which businesses want to get a handle on. You can’t understand enough about everything that exists out there to call yourself a generalist anymore. Yet still, most job descriptions say they are looking for great developers who have it all. “Full-stack” and can be a jack-of-all-trades!
Is this even feasible anymore? I would argue that it’s not.
Generally, the amount you get paid depends on the amount of value you can provide. This can be broken down into three things:
- The level of skill you have and can provide.
- The demand in the market for that particular skill
- How easy it is to replace you for someone else
Considering the above, we can already see a problem with being a generalist. Having shallow knowledge in a broad range of things makes you easily replaceable because you do not demonstrate a high level of skill in any domain. It does not differentiate you from your competition.
Knowing the common things make you less valuable because these skills are easier to learn, and a more significant portion of the population has that knowledge. An example can be web-design. If you search web-design on Fiverr, you will get over ten thousand results. Machine learning will only get you 1000 results at most. Machine learning is a narrow and focused field which requires a longer time to master. The value you are providing, therefore, is significantly higher.
However, let’s not discount a generalist just yet. Having a broader understanding is crucial. It is challenging to be a specialist without also building a solid foundation first. What we should all strive for is a T-shaped level of expertise: The base is your broad understanding and knowledge of the industry, but then you have at least one area where you can go deep and acquire specialised knowledge in, extending away from the base.
the t-shaped knowledge model

So as a software developer, you should have a general knowledge of coding best practices, working with databases, underlying architecture, front-end, backend and algorithms. But then you should have one area where you can distinguish yourself from others and become an expert in. A perfect example of this is data science — one of the most lucrative fields.
A data scientist must utilise skills and technologies from several different areas (generalisation) to extract large quantities of data and then making sense of it to draw conclusions and make accurate predictions (specialisation). This is precisely the reason why these folks get paid so much. They must have a strong foundation in statistics and excellent knowledge in database querying, Python, data wrangling, and so on.
Can you see how generalising and specialising go hand in hand? You should strive to do both if you want to stand out from the competition and earn a chunky salary.
You want to become versatile and flexible, so you can bask in your mastery but also revert to your foundational knowledge when required. Most employers are looking for people like this, someone who is adaptable and can learn quickly. Aim to have a broad understanding and apply basic universal principles to the problems needed to be solved. You should keep your ears perked up and be ready to learn any new and emerging technology.
“There is always the danger of becoming too comfortable in your chosen speciality that you neglect learning new valuable skills. You can become hyper-specialised and form a strong identity around that. Eventually, you can become pigeon-holed since your options become more limited. Everything is always changing. What used to be a skill highly in demand is now considered ordinary and maybe even automated.”
A good example is Webflow, a web-based drag and drop tool for building responsive and high-quality websites. It eliminates the need for writing the code yourself because you can now drag and drop fully responsive HTML elements onto the canvas with very little effort. Expect more tools like that to come up in the future.
It’s important to not overwhelm yourself by trying to learn too much, cut back and focus on a particular technology for 3-6 months then move on to something else. The hardest thing to do a software developer is first to figure out your speciality and then figure out a way to best market yourself with that particular speciality.
The truth is, most people are looking for specialists to address their particular problems more quickly and efficiently. Let’s say that your boiler broke down one day and you had to get it fixed quickly. You have a choice of hiring a domestic all-around plumber or heating engineer specialist. Who would you choose?
If you’re like most people, you will choose a heating engineer. It’s true that the plumber could do the same job, but considering the risks involved and level of expertise required to get your expensive boiler back into a full-function mode, you’d be better off with a specialist who works with these things all the time.
People want to hire experts.
But if you wish to become an expert, you need to be a generalist first.
Of course, you could object by saying, “Am I not limiting my career options if I just only opt into this one speciality”? That’s true. Instead of 100 job offers, you may only get ten if you specialise. However, those ten job offers will provide significantly more capital if you happen to get the job. Because your level of expertise will be above average so you can charge more. Aim to be the bigger fish in a smaller pond. You can also have more than just one speciality which will increase your options. It will take some time though.
Most likely you are now thinking, which areas of software development should I specialise in? Regardless of where you stand in your career, start with at least one thing to specialise in. Make it your goal to build a personal brand around it and go deep.
It would help to choose something which is already related or similar to your current day to day job. For instance, let’s say that you work as an economist or financial analyst with a strong foundation in mathematics. In that case, learning Python wouldn’t be so difficult for you and then specialising in a field such as data science to perform web scraping and gathering of data.
Merely becoming a python developer is not ideal. You should pick a specific Python framework or technology and hammer on that. Try to go very small and detailed. You can always branch out and experiment later.
Keep your foundation in check by learning coding best practices and then integrating that into your project. It will improve the quality of the system and later adding other functionality or making changes in it becomes easier for you and your team.
Technology is evolving at a rapid rate and having the right foundation will make it easier for you to master new skills quickly. In the long run, it is better to spread yourself out and specialise in at least two-three things. Don’t try to learn a bunch of different programming languages and frameworks that you will likely never use.
Having said that, when starting at ground zero, you will probably take any job that comes your way. Very few beginner software developers start with the opportunity to select the industry or particular technology to work with.
conclusion
The topic of becoming a specialist vs generalist is highly debatable and the field of software development is quite broad and ever change to make easy distinctions and draw lines. In terms of getting hired, I believe that you should market yourself as a specialist. But to become a specialist you must generalise to have a strong foundation in the first place. This is why you should do both.
The person who is hiring is more likely to choose an expert because they can already imagine how that candidate will be useful from day one.
Ultimately it also boils down you your personality. If you enjoy sticking to the same project and mastering it then be a specialist. Perhaps you love trying out new things and jumping from project to project. Whichever route you take, the skills you develop will become useful regardless.
In larger companies with a large number of people, being a specialist is generally better whereas, in smaller companies where fewer people are doing different types of jobs, it would be better to be a generalist.