It is easy to think that being a good software developer requires only technical skills. After all, software developers spend a majority of their time designing software and writing code. It is clear that technical skills are important.
But if you want to write software for living, you have to be able to work with other people. This includes your team members, other colleagues, and your customers. To make matters more interesting, everyone of those people have different expectations of you.
When I started to study software engineering, I didn’t realize this. I guess this is a somewhat common mistake but the problem is that it can seriously damage your reputation (and career). When I got my first programming job, I realized that human skills are essential useful for every software developer.
So, what are human skills? One definition of the term human skills states that
Human skills is the ability to work effectively with other people both individually and in group to achieve specified objectives.
Let’s find out why having good human skills is important.
1. Human Skills Help You to Understand Your Customer
The customer and software developers live in different worlds. They do have a common goal though. They both want to solve the customer’s problem.
The problem is that many of the customer’s problems aren’t necessarily visible to software developers. For example, the customer might be pressured by his bosses and other stakeholders. This can have an effect to his communication.
Software developers don’t necessarily understand this. Instead, they complain about the customer by saying something like this:
Our customer is complaining about our slow progress. He doesn’t understand that we are working as hard as we can. Getting things done just takes some time.
It of course is possible that the customer is an unreasonable asshole. However, I think that it is more probable that the customer is under enormous stress and that causes him to act this way.
If you understand that the actions of your customers are guided by reasons which aren’t visible (and shouldn’t be) visible to you, you can react to his actions in a productive way.
The fact is that bitching about your customer is useless. It doesn’t help you to understand his situation or to avoid conflict with him. In fact, often this kind of behavior will increase the tension between you and your customer.
This is a recipe for a disaster.
2. Human Skills Help You to Express Your Ideas
When you are working in a team, you have to understand two things:
- Everyone has a “hidden” agenda which guides their actions.
- The things that motivate you don’t necessarily motivate your team members.
What this means is that in order to spread your ideas, you have to first figure out how your team members think and what motivates them.
- If you figure out what guides the actions of your team members, you can express your idea in way that it makes sense to your team members.
- If you understand what motivates your team members, you can express your idea in way that it feels fascinating and motivating.
Every time when I hear someone complaining that their team members aren’t interested in trying new things, I get a feeling that this person is expressing his ideas in a wrong way. It is a sad thing because if he would have done his homework, the odds are that at least some of his ideas would be used right now.
3. Human Skills Help You to Create Better APIs
When I started writing software for living, software developers made a lot fun of user interface designers. We used to think that they existed only because of one reason: to torment software developers with their ridiculous ideas. I was (of course) wrong.
Nowadays I think that user experience design is one of the most important things of a software project. After all, we write software for humans to use. It makes sense to ensure that our software provides great user experience.
So, what this has got to with APIs?
A lot actually. API development is often considered as a technical task. Although the implementation of the API is a technical task, API design is not. Understanding the needs of a user isn’t enough because it possible to implement an unusable API which fulfills its requirements. Thus, user experience design is an essential part of API development!
How is this related to human skills?
Wikipedia defines the term user experience as follows:
User experience (UX) involves a person’s behaviors, attitudes, and emotions about using a particular product, system or service. User experience includes the practical, experiential, affective, meaningful and valuable aspects of human-computer interaction and product ownership. Additionally, it includes a person’s perceptions of system aspects such as utility, ease of use and efficiency. User experience may be considered subjective in nature to the degree that it is about individual perception and thought with respect to the system. User experience is dynamic as it is constantly modified over time due to changing usage circumstances and changes to individual systems as well as the wider usage context in which they can be found.
In other words, if you want to create an API which provides a great user experience, you have to
- Implement an API which provides all required functions.
- Understand how developers want to use your API.
Having good human skills will help you to achieve the second goal.
You Don’t Have to Be an Expert (But It Helps)
Software development is not an activity which is practiced in isolation. It is team work where software developers have to interact with customers, team members, and colleagues. You don’t have to be an extrovert to be a good software developer but you have to able to understand other people and communicate with them.
Also, you don’t have to be an expert of human behavior but the more you more know about it, the more you will benefit from it.
This guide will introduce you to the world of Software Architecture!
This 162 page guide will cover topics within the field of software architecture including: software architecture as a solution balancing the concerns of different stakeholders, quality assurance, methods to describe and evaluate architectures, the influence of architecture on reuse, and the life cycle of a system and its architecture. This guide concludes with a comparison between the professions of software architect and software engineer.