Introduction
Most of us when asked about what we do at work answer along the lines- ‘I write/code software, design systems, test etc.’. We tend to overlook the fact that these activities rarely are carried out alone. They are mostly effects of collaboration, involve discussion, negotiations and a healthy dose of debate. I will go through a number of skills which could improve your experience and outcomes as a software developers and suggest what we can do to improve them.
Listening
Listening is one of these skills that most of us take for granted. After all, how hard can it be to listen to someone? It turns out that there is more than one type of listening we can practice. People have different classifications but the one I find useful in the context of software development is:
- Listening to learn: we focus on the information and trying to learn/memorise it
- Critical listening: we evaluate and analyse the information
- Empathetic listening: understanding the other person’s feelings and emotions
Beyond that it is important to realise that we can listen on three different levels- focusing on ourselves, focusing on the other person and focusing on the environment.
It still may not be obvious why this is important to know that, but here is the catch: whenever you listen, you tend to assume one of these modes and what you get out of the message may vastly differ. It can be very helpful to start paying attention to how you listen. Are you always locked in the learning mode? Do you always try to critique rather to understand the other point? These are the kind of questions you can ask yourself.
It does not take much effort to see how useful this can be to a software developer. Are you really understanding your customer when discussing potential features? Can you understand why particular decision is popular with the team when you are against it? Listening can help uncover information that is already there, but we have troubles discovering it. I genuinely recommend to anyone to read more on the topic of listening as it is very interesting and rewarding.
Conversations (the crucial ones)
While listening is important you often can’t do much without actually talking! I am not writing here about the general chit chat or even arguing merits of the latest Star Wars instalment. There are conversations that can dramatically change our quality of life (or our product). These are the Crucial Conversations (as described in highly recommended: Crucial Conversations Tools for Talking When Stakes Are High.
Think how many times you had to argue about specific technical decisions, differences of opinions with regards to product features, or even resolve team conflicts. These conversations can get quite emotional and not easy to handle when the situation is presented as the win-lose scenario.
Of course I am not going to be able to convey as much information as the book that I highly recommend, but I will try to give you an idea. If you are having one of these high stakes conversations, focus on what you really want. What you will often find is that you and the person you are talking to, at some level want the same thing. Maybe you disagree about specific technical decision, but you both want to have maintainable software. Deeply understanding what the goals are for everyone involved is crucial (no pun intended).
Once you are convinced that you have some common understanding- make sure that there are no unspoken truths and assumptions that you both may hold and be unaware of. There is a quote in that book that I often make fun of:
The pool of shared meaning is the birthplace of synergy
Despite sounding awfully profound it is also very true. It is really important to establish this shared understanding in order to find the best solution for everyone. It is also important to avoid imagining the other person as a villain (or seeing yourself as a victim). These two mental shortcuts are usually false and do not help with solving problems. I won’t go into much more details on how to handle conversations, since this would be a large blog post in itself, but I hope that you are now convinced- learning how to have a conversation is important!
Mentoring
As you become more experienced software developer you are often put in a position where you can teach others. To start mentoring it is not necessary to be in a leadership position. One of the most effective ways to learn new things that I found is:
Study -> Play -> Study -> Teach
Where you first study the subject, then you try it out, study again and then try teaching other what you learned. When teaching you not only reinforce the message and make sure that you understood it well, but also get your message checked by others. If someone challenges you, it may lead you to either correcting a wrong assumption or prompt you to understand the subject deeper.
This is the benefit for you, but there is also benefit for others when you are mentoring. If you want to be part of an amazing development team, you can do your part in making it amazing. When someone comes to you asking for help, help them! This is one of the greatest benefit of working in a company like Scott Logic- the mindset of helping and teaching makes any team greater than the sum of its parts.
Mentoring is also a part of being a good leader. Leading software development teams has its own share of challenges and joys, and I will tackle it in a future blog post. Mentoring people and offering help can also help you progress your career if becoming a lead developer is where you want to head.
Selling
Most people when thinking about selling imagine sales meetings and conversations where the goal is to get some money for a product being offered. This is the most basic understanding of what selling is, albeit a very incomplete one.
Since I am already recommending books in this blog post, I will recommend you one more- To Sell is Human by Daniel Pink. This book opened my eyes on the fact hat we are all in fact selling for a large part of our day! When we are presenting technology that we want to use for the project- we are selling; when we try to convince product owner which feature to implement- we are selling; when we are in a sales meeting… ok, this is an obvious one.
The point I am trying to make here is that the same techniques used in a sales meeting (convincing someone to spend their time or money on something) can and should be used in other situations. And what are the techniques that I am talking about here? I will want to focus on the one that I believe is crucial (for others, there is always the book): Attunement. This is the ability to see things from your ‘customers’ perspective. Understanding how they feel, what are their feels and what are their needs. You can see a bit of a common theme here, as this connects to the art of Conversations as well. With a good understanding of someone problems, clarity of message and genuine value to offer, it is difficult to go wrong!
When you try to get someone to invest their time or money into something, you need to make sure that you understand what they need. If you can imagine yourself in their exact position, would you see the offer as a good one? This points towards one more idea: Clarity. The other person may not have a full view of what you are offering. Often as software developers we are in a position where we know more than our customers (at least about the technology!) so this clarity of message is especially important. Once the customer has clarity and clear value being offered, the path to yes is usually a short one.
Summary
There are many more Soft Skills that can greatly help you in your development life: leadership, motivating people, marketing, empathy, creativity, speaking, etc. The reason behind this blog post is to start you on the journey of self improvement that goes beyond the purely technical. If you are already doing that I hope that you still found some value in the reminder and I am curious of your opinion in the comments.