What can API testing teach us about effective communication?
Salesforce released what many believe to be the first modern API (Application Programming Interface) back in 2000. The advent of the API fundamentally changed the way developers are able to share resources and now defines the way different software systems interact. The key value that APIs provide is acting as an intermediary between different software systems, allowing them to communicate and share data with each other. Given the fact that the core value of an API resides in its ability to facilitate good communication between systems, what can we learn from an API structure or API testing that could help us learn to communicate with each other more effectively?
Effective communication is hard to get right
Effective communication is a crucial aspect of any business or personal relationship. It involves the ability to clearly convey information and ideas, as well as the ability to listen and understand the perspective of others. By communicating effectively, individuals and organizations build trust faster, resolve conflicts easier, and increase the ability to achieve shared goals. If we were to settle on the attributes of effective communication, we could say it includes clear, concise, and direct messaging. Uses nonverbal cues appropriately, practices active listening, and is open to feedback. Expressing the value of these attributes shows itself in better teamwork, improved productivity, and from a business perspective shows up in increased revenue. So why is effective communication so hard to get right? And what does this have to do with API testing?
The struggle is real
Humans struggle to communicate for a variety of reasons. We have different communication styles and preferences. We have personality differences that can create barriers. Our communication can be affected by emotions and biases which can cloud our ability to clearly convey or understand one another. We simply may not have learned the skills or have the knowledge on how to communicate effectively. Maybe, we haven’t seen effective communication techniques modeled. Adding to the complexity, there are cultural, language, and social differences that can be the cause of misunderstandings or misinterpretations. Computer systems needed frameworks in which to communicate effectively and human beings designed and implemented these frameworks. So why can’t we learn from our own design? I think we can.
API Testing as a model
Human beings are not computers. This observation is obvious but we solve a lot of humanity's problems by defining structures that allow for effective solutions. Software systems are the same. We build structures that allow logical systems to produce an intended result. Even though human beings are logical and emotional, we can still build structures or frameworks that help us to communicate effectively. Let’s look at API testing from a high level as an example.
API testing is a type of software testing that focuses on testing APIs to ensure they meet expectations for functionality, reliability, performance, and security. It is a part of a testing framework that verifies the communication paths and interactions between different systems are working as expected. What if we could use the design structure of API testing as a model to help us improve human communication? What would that look like?
To do this, let’s think about effective communication as a model, and this model functions much like an API where you have a message, a sender, and a receiver. Instead of the sender and receiver being computer systems that are passing messages between them, let’s think about the sender and receiver being humans and the messages as how they are communicating. The sender encodes a message (verbal, nonverbal, written, etc.) that includes knowledge, thoughts, ideas, and feelings and the receiver is expected to decode that message (understand) as the sender intended. This seems simple in theory, but if we layer in all of the complexities and challenges of communicating effectively that we talked about above, there are a lot of things that can work against the receiver decoding the message properly. So, let’s think about effective communication from the perspective of making sure the receiver (who you are talking to) decodes your message (what you said) as you intended. We have a model for this with API testing.
Let’s use a simple example to visualize this model. A system has sent a message to a receiving system. From a testing perspective, we would want to check or validate if the receiving system actually received the message properly and if it was decoded or understood the way the message was intended. One way to do that is for the receiving system to validate with the sending system if it understood the message properly. With API testing, this would look like testing the request and response messages. Let’s apply this in human terms. Let’s say I am the sender and I told you (sent a message) that “My favorite color is blue” (it actually is). One way You as the receiver can make sure you decoded (understood) the message properly would be to ask me, “I heard you say that your favorite color is blue, is that correct?” This would mean we are using a similar verification process to establish whether there is a shared understanding. Sounds simple enough, but humans are much more than logical beings. We have emotions too and our emotions are just as much a part of how we communicate as the words we use. So, what are the skills that need to be in place for human beings to follow this model of verification?
It's about shared understanding
A failing API test works to expose issues that cause the communication between systems to break down. A good API test should be structured to verify the message between these systems is clear and consistent, has well-defined inputs and outputs, and what happens when the message fails. We can apply a similar approach to how we communicate as human beings. The foundation of this approach is very similar to our API test, which begins with active listening. Each system in our API test example must be actively listening for messages. The receiver is listening for new messages, the sender is listening for verification messages. This listening certainly gets more complex for humans because we communicate with logic and emotions, so active listening for us includes verbal and nonverbal communication. Active listening is a skill in itself and I encourage you to find good resources on this topic and build those skills. We cover this subject extensively in our training program, CREATING WITH A CONSULTING MINDSET, but for our purposes here, these active listening skills are the foundation of the effective communication we are after. Second to listening, we need to make it a practice to be clear and concise, this means our communication (messages) are logical, consistent, and hopefully easy to understand. We need to try and remove unnecessary detail so that the purpose of our messages maintains its intended meaning. Finally, we need to encourage the receiver (who we are talking to) to verify if they understand. Invite them to verify your intent by saying things like “Does this make sense?” or “Do you have questions about what I said?” You should also be looking for nonverbal cues from the receiver to prompt your openness to verify your message. As the receiver of a message, you can verify the intent of the message you received by asking questions like, “Here is what I heard you say…”, and/or adding nonverbal cues to this verification, “I heard you say “X”, but it also seems you are frustrated as well. Can you help me understand why?” Give the other person the safe space to verify or correct the message that you received.
We certainly can think about API testing as a model to help us build our own skills to communicate more effectively. At the end of the day, effective communication is caring about shared understanding so that conversations and relationships strengthen. By the way, what was my favorite color? :)