As a web developer, one of my favorite parts of my job is participating in code reviews. It's fascinating to discover how other developers solve problems, and I think this is most evident when reading their code. Conversely, code reviews are a great opportunity to teach younger developers about best practices. Either way, I always seem to have some sort of learning experience whenever I'm reviewing another developer's code.
Besides the technical aspect of code reviews, I'm also deeply interested in the human interaction that takes place during them. These interactions sometimes take you far away from the technical realm and much closer to the interpersonal one. And of course, observing how both technical and interpersonal thinking intertwine serves to show that there's so much more to being a developer than just writing code.
Disagreements over how a problem was solved, or a developer who is overly protective of their code, can be a game changer for the quality of your codebase. The output of most of your team's code reviews will probably be going into the master branch at some point, after all! To best safeguard the quality of your codebase, you need to consider more than just the skills utilized within your trusty code editor – you need to think about soft skills, too.
When your codebase depends on your social skills
Code reviews are the clearest example of how social skills influence software development. Critiquing code with other developers who have different perspectives and experience levels is tricky. This is especially so if these developers are opinionated and have specific beliefs about how to handle codebase quality.
Amidst all of these differences, convincing an author to integrate criticism and rewrite their code accordingly can be extremely difficult. Therefore, you need a certain foundation of soft skills to thrive in this type of environment.
Soft skills come into play in code reviews in many different ways:
- Communicating technical ideas in writing
- Using an appropriate tone (i.e. not antagonizing people)
- Coping with criticism
- Conflict negotiation
The theme behind these skills is getting your ideas across effectively in both a technical sense and an interpersonal sense. You want to share your opinions about their code while also not coming off as a jerk and damaging the cohesion of your team. Since communicating with people is never an exact science, there are plenty of specific situations that you'll have to adapt these soft skills to.
If a developer is feeling like this in a code review, you'll have to change how you communicate in order to get the best outcome
Think about the following two conflict scenarios:
- The author is overly defensive
- There's a looming deadline and the author just submitted a hack
In the first scenario, you have to think about how to communicate with the developer differently that shifts the focus back to the code. This will enable you to direct attention to the technical thought process while avoiding a potential ego battle. A good first strategy for this is discuss the technical problem while also relating to them. For example, you could mention that you've also had trouble in the past while working with that particular part of the codebase. From there, you could share potential solutions.
In the second scenario, both the developer's state of mind and the costs of submitting the hack have to be considered. Is this person tired and stressed at the end of a project? Is this something that can be fixed later when everyone is in a better mood? You could also consider making a compromise – like offering to help write a better solution that the developer can then submit at a more appropriate time. With both of these scenarios, better outcomes can only come from thoughtfully considering the other developer's state of mind along with their code.
Beyond Tech Speak
Collaborating with other software developers can be difficult, and communicating with non-technical coworkers presents its own set of unique challenges, too. This is because people outside of your development team will have more distant perspectives and priorities. While it may be fun to talk shop with other developers, your non-technical stakeholders may not be as interested in whatever specific technical implementation you were just playing with when it comes to features they expect to be built.
Don't try to explain this to your stakeholders
To communicate well with non-technical coworkers, try to always consider the priorities of the person you're speaking with. You'll notice that across the board, people in different roles will mostly care about whatever they're directly responsible for. Designers, managers, product owners, stakeholders, and other roles each have their own specific domains of knowledge that you can tap into by honing in on them during your discussions with them. In this way, you can both learn more about your coworker's roles and understand what their priorities are. This will help later when you have to juggle compromises between them and your technical goals for the software you're building.
When differences of priority come up, either involving you or between other coworkers, note them. Each conflict will most likely be due to a mismatch in priorities between people in different roles. For example, an overly zealous PO may try to increase the work done in a sprint to impress other upstream. To counter this, a watchful Scrum Master may play defense for the team and attempt to prevent overwhelming developers with extra scope. Observe how these types of conflicts are resolved – in some cases, you may notice the strategies that we discussed for code reviews earlier!
These resolutions will always involve some sort of compromise between one or both parties. To get your needs met in these conflicts as a developer, you need to know as much as possible about your coworkers and what their needs are. In this way, you'll be prepared with the knowledge to properly unify your own priorities with theirs when a compromise has to be made.
And of course, once you're done settling an agreement with your non-technical coworkers, you can go back to Slacking with your developer friends about that swanky new module you were just checking out :)
Three communication concepts every developer needs to know
Considering both technical and non-technical communication, there are numerous soft skills that you need to grasp as a software developer. However, I think there are three broad soft skills that every developer should start with when beginning to extend their impact beyond just their codebase.
To become a more well-rounded software developer, you should be able to:
- Understand and thrive in your own team environment
- Communicate with technical and non-technical language
- Empathize with users of your software
Working effectively with your team should be your first goal
Before learning the nuances of interacting with folks in other roles, I believe that you should first focus on working effectively within your own team. Knowing the technical (and non-technical) strengths and weaknesses of your fellow developers is your first step. Who do you go to for coding help? Who gets the most work done? Getting to know each member of your team is a fun exercise, anyways. These are the people you work with everyday, so it's worthwhile to learn about their unique perspectives.
Here are a few more questions to start with when considering your team dynamics:
- What is everyone's personality like? Introverted? Extroverted?
- What is everyone's work style?
- Who prefers to lead? To follow? And in which situations?
Knowing your team members well will enable you to extend your influence as a developer. With this knowledge, you'll be able to foster an environment that will help create a tight-knit team. Balancing each others strengths and weaknesses, you'll collaborate more effectively and make your collective technical priorities be heard. While this can (and should) be done from the management level as well, there's nothing wrong with supporting this kind of effort from a grassroots level.
While honing your technical communication skills and knowing your team should be your first priority, the next step is knowing when to adjust your language to other audiences. As discussed earlier, coworkers that don't write code have different priorities than you do. Getting to know them will expand your knowledge of other roles and help you later if a conflict comes up.
And just like your non-technical coworkers, your users won't necessarily care primarily about your tech stack – unless they're tech nerds like us, too :). Learning about how and why your software is used will broaden your horizons as a developer and expose you to a different way of thinking about what you build. Even if you aren't a budding UX designer, having this perspective will keep you well-rounded.
Other Soft Skills for Developers
Beyond the abilities already discussed, there are many other examples of soft skills that you should consider as a software developer.
Here's a list of just a few more:
- Delivering features reliably
- Working effectively with QA
- Conducting technical research (via Google-fu)
- Pacing yourself as a developer
- Navigating a technical career
- Knowing when and how to ask technical questions
- Dealing with impostor syndrome
- Teaching other software developers
- Writing user stories
- Physical fitness for developers – sitting posture, heart health, eye health, hand health, etc.
Some of these examples, such as physical fitness, move a bit beyond interpersonal skills. But they all serve to form your holistic experience as a software developer. When focusing on these soft skills along with your coding ability, you'll become a more well-rounded developer that can work effectively with code and humans. This is what I want Cordial Coder to be all about – helping software developers become capable in non-technical settings to supplement their technical skills. With knowledge of both of these worlds as a developer, you'll evolve into a more valuable problem solver that can build solutions with code and through interacting with other people.
Consider all of the tools you can use to make yourself a more effective software developer - beyond just coding
In the arena of soft skills for developers, there's so much to learn and think about. As I continue my work as a developer, I want to continue to explore every facet of soft skills and how they affect a software developer's career. I'm personally fascinated by the many ways developers can accentuate their craft by unifying their coding ability with soft skills, and I'm deeply excited to dive into these topics as I continue to share what I learn with readers. Thanks for joining me!