Communication is key

In our lives we generally suck at communication or in active sense communicating our hopes, dreams, wishes, and desires to other human beings. This is because it is difficult to get communication right. Not to mention how to do it right with software.

Social

You talk and speak and neither of those are communication. You can say words but that does not mean you communicate your idea or end result to the other party. The thing that makes it so tricky is two or more parties are involved each with their own central processing unit that has a language center that each has its own interpreter. That means the same message has different results. Take a simple sentence like : I am happy to write this article . People can read it and go well he sure is not happy to write that article or go he wrote this article not being happy first but the act of writing made him happy. Or maybe some other interpretation all together.

The thing is that the receiver dictates how the message is received and thus how the communication will continue.

In software this means pick a correct protocol and a correct message structure and potentially mime type. For protocol not really a lot of choice except UDP and TCP. Then message structure and mine type can be essential. The structure is not whether it is JSON or XML or something else. It is what is inside. How is it ordered. What does each property contain. Do both parties agree on it? That is essential in communication .

Language

The language used can also be a barrier. The Lingua Franca these days is English everywhere. Yet that still poses problems because not everyone is a native speaker and even if you are you still run into dialects or other subtle nuances that allow for miscommunication. I myself worked in a team with 9 different nationalities and that means 9 different cultures and 9 different people all trying to speak English and communicate their thoughts and ideas. Needless to say this caused some confusion and miscommunication was rampant throughout. We had to do even more communication and trying different ways of explaining the same concept because it had the best way of making sure everyone was talking and understanding the same thing. In this case it also helps to have the receiver echo back his understanding to you or the rest of the group to get a consensus.

In this case for software you have to choose how you want to communicate the structure. So will it be JSON, XML or ProtoBuff? This will dictate what will be send and how to process it. I think in general don't go with XML anymore because it is so verbose.

Context

The context matters greatly in communication. Are you communicating about Apple or the fruit? Are you trying to convince someone to go somewhere or just sharing information? The context dictates how the receivers will process the information. Filters will be applied. Information will be enhanced or enriched in certain cases even.

In software you want to make sure the context is agreed upon as well. Is it a REST API ? Or is there a state in the backend or will there be something else going on? How will you authenticate to become a known entity ? How will you authorize accessing information? How do you forward this information? What do you let the end user know about itself ? All these questions you can define from the start and sometimes as you go along as well.

In the end communication is hard and difficult and error prone but important to get right. Try in your conversations with people to make sure they definitely understand you. In software write down how you want to communicate aforehand and eliminate misconceptions.

#thoughts #devops