How to Master Your Software Engineering Journey, Part 2
Take an in-depth look into the importance of communication and collaboration, as well as traits of a generalist, specialist, and as a bonus, versatilist.
Join the DZone community and get the full member experience.Join For Free
Software engineering is one of the most talked-about and sought-after career paths in the current world.
During my journey as a software engineer, I have worked with some wonderful people, the latest technologies, and great projects. As I reflect on my humble beginnings and the gradual progression to my current role as an engineering manager, I wish I knew some key aspects of the craft of software engineering back then.
This article is the second part of a 2-part series where we will explore some of these traits.
You can find Part 1 at How to Master Your Software Engineering Journey, Part 1. This article contains an in-depth look into the importance of communication and collaboration, as well as traits of a generalist, specialist, and as a bonus, versatilist.
1. Communicate and Collaborate
I love the following quote which seems apt for this key trait.
None of us is as smart as all of us. — Ken Blanchard
Software engineering is an art and definitely demands creativity. Oftentimes, due to the nature of work in this field, engineers tend to be cut off or cornered from a more collaborative spirit. It might simply mean they are having heads-down time or really need to focus on solving a particular challenge in a quiet, isolated manner.
While the above certainly makes sense and I agree with the approach, the problem manifests when that becomes a work style and mindset. When one continues to be a lone wolf and power through work on their own, they will be twice more resistant to seek help/ask their teammates to unblock them. Pride can easily get in the way when you want to showcase your top-notch skills as an engineer.
Being hesitant to collaborate also leads to a communication gap. The team has less visibility in your work as time passes and may struggle to work with you and intervene when to assist. Communication helps foster team building, speaking the same language, and being able to articulate any complex technical work in a non-technical fashion.
2. Mastering a Niche vs Smart Generalist
Honestly, this has been one of the most challenging topics in my software engineering career, and I am certain for many others as well. There is really no right or wrong approach, and the ultimate direction will matter a lot based on your preference, interests, and operational style.
I will attempt to highlight the key characteristics of each side below. Also, there is an added bonus at the end where I want to share a blended approach which I personally prefer (more on that later).
Generalists: Also referred to as “Jack of all trades, Master of None”
Specialists: Also referred to as being “T-shaped” i.e. growing vertically in a specific niche
Overall, generalists can benefit from having a broader viewport, more skills at their disposal and skills that are easily transferable while moving jobs. On the other hand, they could end up scratching the surface of many skills, but mastering none due to lack of depth and vice-versa for specialists.
An area I want to highlight in the generalist vs specialist debate is in terms of career development and growth. A key distinction that I believe is associated with each persona is as follows:
Generalists: They do not have a Career Ladder, per se, in which to grow vertically. They instead have a Career Rock-Climbing Wall which gives them the opportunity to change course and move up, down, left, right depending on their will, accelerated growth mindset and comfort.
Specialists: They have a definitive Career Ladder for the most part. The path may seem narrower, with pinpoint focus and locked down, but there is always a solid next stage in sight.
As promised, I wanted to share an interesting tidbit by Gartner. Beyond being a generalist vs specialist, there is a 3rd category which is being adaptable based on the situation, called versatilists!
The Era of Versatilist
As you can see, versatilists can scale as well as operate on-demand and as-needed. This is exactly the “wearing many hats” notion that is becoming popular in the field of software engineering.
Whether it is jumping on a PROD issue one day to brainstorming the next product development iteration with the design team the next day, the true difference between a programmer vs developer vs a software engineer relies on this core skill.
I can personally attest that being a versatilist myself gives me a strong sense of connection to the entire SDLC, company mission, and enhances my communication and collaboration within and outside my team. While it is immensely valuable, there is a potential downside of this seeming as if you are “spreading too thin” (there is a separate article as well I wrote regarding this here).
Thanks for reading! Feel free to connect with me at: LinkedIn — Anand Safi. I would love to hear your thoughts on this and other tech topics!
Published at DZone with permission of Anand Safi. See the original article here.
Opinions expressed by DZone contributors are their own.