Communication: how to be a better software developer

Building software can be difficult. I’ll let that earth-shattering statement sink in a bit. If you enjoy and care about your work you’ll have a natural urge to learn more and become more proficient as a programmer. And, actually, that’s quite easy: the internet is a gigantic warehouse of knowledge and features countless tutorials, blogs, presentations and interactive learning tools relating specifically to coding. The bottom line is this. If you know what you want to learn a quick Google search will almost always give you what you need to get started, and the rest is up to you and the amount of effort you apply.

The bigger issue

However, particular communities of software developers have become aware of a far bigger issue than that of pure coding skill. It’s an issue that’s often neglected, difficult to quantify, somewhat intangible but equally, if not more, important to the success of teams, projects and individuals in software. It’s the issue of relating to people or, in a word, communication. If you possess the ability to work well with others, to be able to lead and to follow when required and to communicate your ideas clearly and empathetically, then you possess something that is far more valuable than programming knowledge or experience.

My reasoning behind this is simple. Programming knowledge is easy to acquire and readily available, and programming experience is simply acquired over time. The ability to relate to people is something that will only improve if you are very deliberate, and the process will require a great deal of self-sacrifice and potentially a personality overhaul. Although you can find plenty of resources on improving your inter-personal skills, these skills often aren’t associated directly with the programming ecosystem. I want to address that, and to show you that they are crucial to being a good developer.

I’ve always held good communication and social skills at high importance. To add to that, I’ve recently been reading the classic book, How to win friends and influence people”. This post is inspired and heavily informed by that book, and features a number of direct quotes. I would recommend anyone to read it, as this post is a poor summary of only a handful of the principles given in the book.

Here are 5 principles that I’ve started to apply in my life in general, but particularly when working with others in my job as a software developer:

  1. Choose encouragement over criticism
  2. Exercise humility
  3. Put yourself in other people’s shoes
  4. Become habitually positive
  5. Listen

I want to go through all these points one-by-one but, before I do, I’d like to first address a question that some of you may be asking.

What’s the benefit?

It’s a fair question to ask: what are the practical benefits of improving my communication skills? It’s easy to see the positive impact of working on your skills as a programmer, but not so easy to imagine any immediate effect when working on your inter-personal skills.

Every working software developer needs to interact with people. We think of programming primarily as the interaction between a person and a machine, which is true. But the resulting software is entirely decided by people. These people include you, other developers on the team, managers, product owners, users and customers. Josh Susser, one of the panelists on the Ruby Rogues, says that “programming is a people job”, and in saying that he’s highlighting the fact that good communication skills are essential to getting the job done well.

You may have ingenious ideas for the success of the software you’re working on, but the truth is that good ideas aren’t enough in themselves. You need to be able to communicate your idea in a way that will help them to see your viewpoint and inspire them.

You can either see people as a nuisance, getting in the way of your ninja coding skills, or see them for the value that they have in holding different perspectives and viewpoints from your own.

If you want to be noticed in your work, to have increased influence and to be promoted — and let’s be honest with ourselves, that’s an important factor — then learn how to interact well with people and affect your environment in a positive way. There’s a partly justified stereotype that many programmers are socially awkward, insular and uninterested in anything that doesn’t have a silicon-based processor. So, a sure way to get to noticed is to confound this stereotype.


I believe that anyone can improve the way they relate to others, and that it’s not a realm that belongs exclusively to the extroverts. I, for one, am primarily introverted, but haven’t found that to be a factor in my ability to understand and relate to others. Here’s a (non-exhaustive) list of a few principles that I hope you’ll find helpful when working with people.

All quotes are from How To Win Friends And Influence People.

1. Choose encouragement over criticism

Receiving a kind word gives us an emotional boost. It also gives us the impetus to repeat the behaviour that lead to the encouragement. I know a few people who are serial encouragers, and I find that I want to be round them all the time; their positivity is magnetic. On the other hand, criticism, although it may be a more natural response, is an absolute demotivater.

Criticism is futile because it puts a person on the defensive and usually makes him strive to justify himself. Criticism is dangerous, because it wounds a person’s precious pride, hurts his sense of importance, and arouses resentment.

In the context of software development, something we do at Green Gorilla Apps on a daily basis is review each others’ code via pull requests. As a reviewer, you make the choice either to tear down or build up the other person. If you only ever comment on the negative, it makes pull requests a daunting and dreaded task. It costs you nothing to comment on the good elements, but the value to the person who wrote the code is potentially huge.

I’m not saying that feedback isn’t important. In fact, it’s essential to a well functioning team. But there are ways of delivering it that inspire as opposed to demotivating the receiver, which are worth a whole other blog post. The crucial thing to remember is to bring more positive than negative feedback.

I’ve not met a single programmer who doesn’t have some level of insecurity about their coding skill, which is what makes code reviews a potentially hostile environment. If you become known more for your encouragement than your criticism, then others will be more open to receiving feedback and learning from you.

Let’s cease thinking of our accomplishments, our wants. Let’s try to figure out the other person’s good points. Then forget flattery. Give honest, sincere appreciation. Be ‘hearty in your approbation and lavish in your praise,’ and people will cherish your words and treasure them and repeat them over a lifetime — repeat them years after you have forgotten them.

2. Exercise humility

Even though we all have insecurities about our programming skill, paradoxically, we seem to have equal measures of pride and ego. It can be hard to receive feedback and often our instinct is to put up defences, regardless of whether the feedback is right. If you really want to improve as a programmer you need to be open to criticism. Even if your first instinct is to think that the criticism is wrong, use it as an opportunity to search yourself truthfully. If you think your code is perfect, you’re wrong: there’s no such thing. Take the advice on board, consider it carefully and, if you still don’t agree (and can explain why), discuss it with the person who gave the feedback.

The pull request example is useful here too, but this time from the perspective of the submitter. It’s a bizarrely exposing thing, showing your code to others. Knee-jerk reactions to negative feedback make for a hostile environment, which can be particularly discouraging for more junior developers. I say this from experience: try and fully understand the other person’s viewpoint when they provide feedback, as I’ve been in a couple of embarrassing situations where I’ve argued over something, convinced that I’m right, only to realise that I’ve totally missed something that the other person saw immediately.

Also, learn to receive feedback from developers who are more junior than you. Automatically discounting others based on their ability is incredibly discouraging to them, and leaves you open to some humiliating moments.

When we are right, let’s try to win people gently and tactfully to our way of thinking, and when we are wrong — and that will be surprisingly often, if we are honest with ourselves — let’s admit our mistakes quickly and with enthusiasm. Not only will that technique produce astonishing results; but, believe it or not, it is a lot more fun, under the circumstances, than trying to defend yourself.

3. Put yourself in other people’s shoes

When we work with others, we inevitably run into disagreements. Different life experiences lead to different perspectives and therefore different opinions. One way to “win” disagreements is to argue your side aggressively until everyone else backs down. As it happens, this is also a good way to lose friends.

An alternative to this is to try and see things from their perspective. Why are they so passionate about this subject? What’s lead them to their conclusions? Ask them questions to get the full picture; this often helps to dissolve arguments. You might think that you have all the answers, but trying to understand the other person’s viewpoint could show you that you’re in the wrong. It will also show them that you care about their opinion, which will make a peaceful resolution much more likely.

Disagreements relating to software are common, because there are often many ways to build a feature or fix a bug, and developers will swear by or against certain approaches that may have worked or failed in the past. Instead of holding your ideas to be sacred, be open to the fact that you don’t hold all the answers.

Instead of condemning people, let’s try to understand them. Let’s try to figure out why they do what they do. That’s a lot more profitable and intriguing than criticism; and it breeds sympathy, tolerance and kindness. ‘To know all is to forgive all.’ As Dr. Johnson said: ‘God himself, sir, does not propose to judge man until the end of his days.’ Why should you and I?

4. Become habitually positive

Some of my favourite people to be around are those who make an effort to be optimistic and, conversely, the people who I struggle to be around are those are a constantly pessimistic. Negativity is draining and contagious, whereas positivity is uplifting and encouraging. Having said that, a useful kind of optimism doesn’t involve blindly saying “everything’s going to be great” in the face of challenges, but it’s the ability to push through without giving up hope, and bringing others along with you.

I’ve found that being positive is a choice, rather than the result of your circumstances. When your production server crashes just before your demo to a panel of investors, that obviously sucks. The optimistic response would be to turn panic in to positive action and get straight to work on fixing the server, whereas a negative response (e.g. “WHY DID THIS HAVE TO HAPPEN NOW!?”) is paralysing. A positive outlook is an essential quality of a leader, and applying it in your work life is bound to change the way that people relate to you.

Everybody in the world is seeking happiness — and there is one sure way to find it. That is by controlling your thoughts. Happiness doesn’t depend on outward conditions. It depends on inner conditions. It isn’t what you have or who you are or where you are or what you are doing that makes you happy or unhappy. It is what you think about it.

5. Listen

We’ve all been in this situation: we’re talking to a group of people when someone jumps in over the top of us. We have a choice of either carrying on talking regardless, probably adding to the confusion, or back down and feeling like we’ve been walked all over. One of the most frustrating feelings is that people don’t listen to you. Therefore, one way to make someone feel valued and important is simply to listen to them.

It might be that a colleague has an idea for how to approach a new feature, a suggestion of using a different technology, or that they simply want to complain about something. Listen to them and don’t interrupt. Only when they’ve finished (and that could be a long time) should you weigh in, and even then only if it’s necessary. Sometimes people don’t need your advice, they just need to talk.

It can be difficult to resist the temptation to butt in if you’re in a group situation, like a project planning meeting, and everyone else thinks it’s fine to talk over each other. However, if you wait until there’s a natural pause to talk, and there will be at some point, not only will it be respectful of others but it will also make you come across as considered and a careful thinker.

Everybody in the world is seeking happiness — and there is one sure way to find it. That is by controlling your thoughts. Happiness doesn’t depend on outward conditions. It depends on inner conditions. It isn’t what you have or who you are or where you are or what you are doing that makes you happy or unhappy. It is what you think about it.
So if you aspire to be a good conversationalist, be an attentive listener. To be interesting, be interested. Ask questions that other persons will enjoy answering. Encourage them to talk about themselves and their accomplishments.

These are just a few of the things that I’ve highlighted in myself that I want to change. I believe we’d all be a lot happier if we put the same amount of effort into building our character as we did with learning technology. I also think that it would improve our ability to learn, as we’d be more open, honest and receptive to valid feedback.

Thanks for reading! I always welcome feedback — it would be a ridiculous irony if I didn’t. To keep updated on my thoughts on technology, I blog randomly at joncairns.com and tweet regularly under the nonsensical handle joonty.


Published in Techspiration + Ideas + Making It Happen.