The word communication gets thrown around a lot in the software development space but what does it really mean? Why is it even important to start with?
Turns out that software development heavily relies on communication. The quality of communication on a software project is directly correlated to the success of the project. The reason for this is pretty straightforward. Software development is a journey of discovery in a specific knowledge domain.
Software exists to solve problems that are specific to a given domain and the nature of developing software typically goes along the lines of having skilled developers who have little to no knowledge of the domain and domain experts who typically do not have software development skills. It is almost always the case that it’s easier for developers to understand the important aspects of the domain they are solving for than it is for the domain experts to learn software development.
The knowledge needs to flow from the heads of the domain experts, those closest to the problem, to the heads of the developers, and expressed as code that evolves to solve the problems. Look at it this way, imagine the domain experts are also great software developers. The chances of successfully building software that will solve the problems would go up drastically.
Here are some assumptions to help you understand the importance of communication in software development:
- Software developers on a teams are good enough to write code that solves problems.
- Domain experts know their business very well and know exactly what the problems are.
For the software developers to build a software solution that’ll work as the domain experts expect, the team needs to embark on a journey of discovery and this is the core reason why communication is so important on software development projects.
To ensure there is high quality communication on a software project, take the following into consideration:
Make communication easier by using the same language: the domain experts have terms they use in their industry. They have ways of describing things and scenarios. So do the software developers. To make communication effective, the software developers need to deeply understand the language of the domain, only then will they begin to see ways in which their software development skills can solve the problems.
Get everyone in the room: flatten the hierarchy of communication by aiming to get the domain experts, business analysts, software architects, and software developers in the same space. The goal is to create an environment where information flows from where it is (minds of domain experts) to where it needs to be (expressed as code) with as little “hops” as possible. Everyone benefits from this.
Close the loop: feedback is the vital thing that closes the loop of communication. All parties involved in the process of software development need and benefit from feedback. Feedback drives evolution and guides the discovery journey.
Further Reading
- I have a related article about communication, specifically on how to achieve shared understanding.
- A number of chapters in the Domain-Driven Design book focus on communication.