We can often focus a lot on the technical aspects of software design, testing and automation as recipes to improve software quality, but in my experience technical improvement alone is often not going to help a team produce better quality software. Yes, things might be all automated which allows you to work faster or may even have better test coverage, but if you don’t address this core principle of software development – you are going to likely still have many quality issues along the way.
And that core principle I one of communication and the ability to ask the right questions. The majority of times when I have needed to resolve big quality issues in a team, the issue is not traced to big technical mistakes along the way (though these may be a symptom) but simply people issues. These people issues tend to surface themselves in the following areas:
Lack of understanding of what/how to build – First up is the lack of communication made to understand the system and what needs to get done. Too often the idea of what is need sits with too few people and there is a lack of discussion made that could address a variety of concerns or issues that will often land up to software being misdesigned, the testing being incorrect or perhaps most often deadlines being incorrect and therefore the product rushed.
Mismanagement of expectations – Tying into the above, it’s not just that teams make a poor design or estimation decisions on what to build. But that they subsequently fail to communicate expectations or deal with change effectively hen these misalignments occur. What poor expectation management often leads to is a lack of clarity in design and further rush/ stress on a team, which will often lead to a compromise on quality, especially in growing your technical debt.
Time wastage – Often one of the most frustrating elements of poor communication is that it will often lead to delays in consensus that will lead to both more and longer meetings being required to resolve them. Something which will likely only dent productivity and frustrate people further. While meetings are often essential to gaining clarity in a clearer understanding of things, these need to be managed effectively. One solution is to only communicate with the people you need to rather than wasting everyone’s time when resolving these things.
Not understanding your dependencies – Perhaps more relevant to larger companies with many teams, but often teams will work on functionality that affects others or be dependent on other teams work. Not communicating these changes effectively will lead to unexpected production or quality issues. Solid automation and monitoring should catch most of these, but if the maintenance is not kept up to date things will be missed, so it’s important that these things are communicated nonetheless.
Team cohesion – I guess it should go without saying that poor communication will lead to team members feeling frustrated with each other and their work. This lack of engagement will often result in people wanting to just get the job done, rather than taking pride in what they do and again lead to quality compromises along the way. Communicating effectively and being empathetic and caring towards the needs of your team members is essential and an important foundation for creating a successful team.
There are a lot of mistakes and inefficiencies that will often manifest themselves in technical or process issues, but the heart of the problem is a lack of general communication and people skills. There is no point investing effort in trying to rectify these other issues of we cannot first address the heart of the problem, which is often ourselves and the way we communicate with those around us.
You might be reading all this, realising that these issues exist in your team, but not always able to identify what needs to be done to resolve them. I’m not going to try and go through very communication technique here, as there is an abundance of them available online and the general basics of empathy, listening and tone all apply here. What is perhaps most important in a software development sphere though is the ability to ask questions to gain understanding, having the courage to speak up when you have concerns or questions, being vulnerable about potential mistakes and communicating changing expectations early. Focusing on these won’t solve everything, but will likely make a world of difference to your team's ability to produce great quality software.
There are many ways that we can communicate better, but ultimately the responsibility falls on us to look at how we communicate with others and then at our teams and be honest with ourselves – do we do a good enough job in communicating effectively. Yes, there could be a technical or process solution for some issues, but you would save so much more time if we just learnt to communicate more clearly. It’s important to note that I’m not saying that you shouldn’t solve these other problems, - just don’t address the symptom until you’ve fixed the cause.
Comments