Soft Skills for Software Development
We tend to equate writing software with technical skills. It certainly does involve some technical skills, but really writing great software is all about human skills, often called soft skills. It’s all about how you interact with other people. Typically you are working in a group and even if you are working by yourself, your end users are other human beings. It’s important to spend time working on these skills and have a framework for building them up.
A couple posts and articles I read lately have me thinking about this even more than I normally do. Jim Kring made a post about trying to bring more kindness into engineering. It got a really big response. One of the responses pointed to an article by Andrea Goulet on empathy driven development. It’s definitely worth a read.
I’ve realized that most of the challenges I run into are non-technical. A lot of times problems are caused by organizational politics, group dynamics, communication breakdowns, etc. I feel like I am fairly social for an engineer. However, engineering school really beat the people skills out of me, so I often find it quite challenging navigating these situations.
I like to read, so I’ve spent a bunch of time the past couple years reading various books on leadership, philosophy, communication, empathy, and other “soft” or non-technical skills. I thought it would be a good way to help me navigate difficult situations and to stand out from the other engineers.
A Logical Progression
One thing I have learned is that when it comes to these “soft” skills there are several different levels of knowledge. Every time I learn something new, I seem to progress through these stages. I don’t realize the full value of what I’ve learned until I progress to the last stage.
Theoretical Knowledge
In general step one always involves discovering some new idea or concept. Usually this comes from reading a book or a discussion with someone. I read a book on some new topic and then I gain some head knowledge. I now know this concept exists and I can describe it. This stage is all about putting words and definitions to things and categorizing them in my brain. It’s not a practical thing. It is strictly intellectual.
Recognizing traits in others
Once I have an intellectual grasp of something I start to see things playing out in other people. As an example take empathy. In talking to Fab and others, I’ve learned a lot about empathy and what it means to be empathetic. Suddenly I start to see other people’s interactions very differently. Its easy to pick when someone is being empathetic or shows a lack of empathy. Because I have the theoretical knowledge I now have the words to talk about it and describe it and wrap my head around.
Introspection
The real learning happens and I really know I have mastered a subject when I can notice these traits (or their lack) in myself. First I watch these traits and ideas play out in other people’s interactions.Then I start to replay those scenarios in my head. I start to see some similarities. In this interaction John really didn’t show much empathy, but that situation is really similar to my interaction with Susan the other day. I wasn’t being very empathetic then either. We can only really unleash the power of these soft skills when we can recognize them in ourselves and then work on putting them to better use.