I've been working in the world of software development and technology for about 5 years now. Previous to this my background was in environmental engineering. I was able to make the transition into software development both through some education as well as my background using Geographic Information Systems. That was my foot in the door. Both practical knowledge and a desire to learn more about a pretty specific niche in software. My current role is a GIS Web Developer. Do I work with more than GIS and the web? Yes, absolutely. Do I know my way around the front-end and the back-end of the applications that I work with? Yes, so in some ways, you could also say that I am a full-stack developer. Does this mean that I consider myself a jack of all and master of none? No, I would say that I am proficient enough to work across the technology stack, but am more comfortable in certain areas than I am in others. Job title aside, in many ways I feel more comfortable working in back-end the environment and large datasets. But my title would say otherwise 😉
I actually landed the job as a web developer, because yes, I have experience with web technology, but I have a range of specialized knowledge in Geographic Information Systems. I understand the difference between a projection and a coordinate system. I have worked extensively with systems built on top of ESRI's ArcGIS for Server and ArcGIS Spatial Database Engine. This was enough to not only to receive an offer, but also a competitive salary. I find that there are not a lot of other developers with this specific niche, this makes me more valuable to someone or a company seeking this specific niche to fill.
I am not saying that if you are reading this to go out and specialize in Geographic Information Systems. What I am saying is that you should find a specialty or niche in your area. It may be as simple as becoming the Dotnet Core REST API person, or it may be that you are really into integrated systems development, or you may be into blockchain. The point is to find that one thing that can set you apart from others and focus on that, and learn what you need in the meanwhile to accomplish learning your main focus or niche. What I think most companies are looking for when they put together a job description is not that you can do absolutely everything in that job description. They are looking for someone that can solve a particular set of problems. That is how you sell yourself. You may disagree with me in that you are selling yourself but think about the fact that you are exchanging your most valuable resource (time) for money. So you may as well maximize your investment of time into dollars.
Find something you are passionate about, but also marketable. Find a specific problem or set of problems and start to focus on those things that will help you solve those specific problems. Maybe it's securing web applications, or maybe it's all about migrating applications over to serverless technology on AWS? Or maybe it's about React/Redux and SPA's, I don't really know, but don't become a generalist. It may be okay to be a generalist for a bit, but you should find a niche and grow in that. I can command a much higher salary at this point in my career simply because I am able to solve some very specific problems as it relates to GIS and solve them quickly, without having to do a bunch of research into the matter.
Another way to think about this situation is with respect to t-shaped skills. You can have a breadth of knowledge, but a specialty in a specific area, just as I outlined above. Understand that your work whether on the front-end or back-end impacts other areas of the development stack.
I think that this skill applies to much more than just software development and can be applied to all areas of your life, and here are a few ways to get there.
- Always be learning, be tenacious and unrelenting in your pursuit for understanding.
- Be open to new opportunities for growth, even if you think you are underqualified.
- Find what motivates you or intrigues you and focus on that.
It may sound somewhat counterintuitive at first but think about it. What specific sets of problems can you solve with programming or technology? That is where you can earn the most for your time and energy. Being a generalist will get you generally into the role you might be truly passionate about. Doesn't sound like much fun to me. Find what you are passionate about and dive in. I've read in the past, that if you spent .5 hours a day reading on one particular subject, within 2 years you are a subject matter expert. Or in other words, it adds up in a way that you most likely don't grasp at the moment, but in a short period of time will start to matter more than what you are probably thinking.