In software development one is presented with two options: specialise in one particular technology, language, etcetera; or generalise and be a Jack of trades. Which one is the best option? Is there a better option? This is one of those questions whose answer is not in black and white. There are lots of gray areas.
TLDR; Choose the shade of gray that suits you best.
Case For The Specialist
Specialists in a particular area have many advantages. The word says it all really – you are very good at what you do and you are in the top 10% (just thumb sucking) in that area. This means you are likely to get called upon when an organisation needs answers to a problem for which you have expert knowledge. When working in a team you are the go to guy in that area. Pretty cool, right? Usually organisations are willing to pay you very well because you offer a service that others can not. This also opens up opportunities to become a consultant and have everyone run to you for help when they get stuck.
The other side of the coin also needs to be looked at. We all know that technology is changing at the speed of light nowadays. If you specialise in one technology and you wake up tomorrow and find that it’s deprecated then your career is in peril. No one wants to be the top dog today and tomorrow become the opposite (is it bottom dog? ) so you need to be careful and keep an eye on the direction technology is moving.
Case For The Generalist
On the other side of the spectrum is the generalist. This is the guy who knows everything or has a vague idea of how things work. This person seldom has in-depth knowledge in a particular area like the specialist but they can get things done. The advantage of being a generalist is that you are not as vulnerable to the ever changing technology.
In addition, employers seem to look for people who have a wide range of skills which might help you when you’re looking for a job. I’m not sure if organisations will pay you as much as the specialist though. This might depend on how well you know what you know.
Where Do I Stand
From the beginning of my software development career I decided to not take the specialist route. Instead I decided to know the basic fundamentals of software development as much as I could regardless of the technology. This gave me the ability to get things done in multiple technologies and programming languages. Do I have a preferred area? Yes, I am very comfortable working in the backend. However, since I know (and continue to learn) the fundamentals I can do relatively well wherever I’m called upon to contribute. I can learn and adapt very quickly.
As someone who loves to know every aspect of a system I’m working on, being a generalist gives me an opportunity to do so. I love having my hand in almost every part of the system I’m working on. This for me gives me more satisfaction than specialising in one particular area of the system.
Do I want to be the go to guy? Not necessarily. That’s the drawback with not being a specialist. I try to know as much as I can in the area I’m tasked to contribute and eventually I will be able to answer most of the questions therein. As time goes one I will become the go to person if you want to know how the entire system is put together.
Lastly, generalising helps when you work on side projects – something I enjoy a lot. Here is the tech stack for one of my projects:
- Mobile app built using Flutter (self-taught)
- Python backend (self-taught)
- Web front-end using Tailwind CSS (not a fan of HTML and CSS but I had to get it done)
If I had specialised on one particular technology or programming language (I did C# and Java in school) then I would need to find someone to help with the project which might have had financial implications. A specialist in Flutter might frown upon my Flutter app because I might have missed something but it works just fine. So is the Python backend and
Pick Your Side
Like I said there is no black and white answer in this debate so you need to find the best shade of gray for you. Whatever option you pick I advise that you build a solid software development fundamentals. You need this where to choose to specialise or generalise.