This is a guest post for Skills You Need.
Want to contribute? Find out how.
6 Non-Technical Skills Every Software Developer Needs
Software developers are ruling the world. Alright, it may not be that dramatic, but the fact remains that software development has become one of the most impactful fields.
Pretty much every product or service that we use on a daily basis (apart from obvious exceptions) has a team of software developers behind it. It is also exciting work where ideas are turned to reality and where one can really make a difference.
From the standpoint of making a living, software development is equally as interesting, with the demand substantially outstripping supply. A drop in demand is definitely not in the foreseeable future, either.
While technical skills are essential for any software developer who wishes to make it in the field, non-technical skills can be just as important. Many people will disagree but, in certain situations, these non-technical skills may even become more important than the core technical skills.
So, which non-technical skills are we talking about, exactly?
Problem Solving Skills
When you talk to veteran software developers, they often sum up all software development in one word (or two, depending on how you spell it) - problem-solving.
Namely, when you strip it down to the very basics, developing software is pure problem-solving.
On the macro level, every piece of software is a solution to a problem that people have, even when they do not know they have it. On the micro level, developing software is all about doing innumerable little things which may have different names, but which are just problems that require elegant, simple solutions.
Unfortunately, not all people who work in software development understand this and many of them do not work on their problem-solving skills, as a result.
They misunderstand the problem and end up creating additional ones. They stick to old practices because they had worked in the past despite the fact the nature of the problem is totally different. They waste days and weeks on something that could have taken a few hours if they approached it the right way.
The examples are endless.
It doesn’t have to be that way. Problem-solving is a skill that can be learned and honed actively and anyone who wants to do software development should dedicate time to it.
Software development changes at an insanely rapid rate, especially if you compare it to some other fields. Technologies and frameworks come and go, new platforms and devices are introduced and traditional ones are scrapped.
Often, this happens in the middle of developing a particular piece of software.
What this means is that no software developer can learn everything there is about their industry and consider it done. In other words, any self-respecting software developer will need to dedicate a significant amount of time to learning about the latest developments in the field.
This is where one’s learning skills will really make a difference.
Let’s imagine two software developers who are absolutely the same in every single way - education, experience, current coding skills, etc. The only difference is that Developer A has great learning skills and Developer B has less-than-stellar learning skills.
A new framework for developing apps is developed, absolutely superior to anything that came before it (this does not happen in real life, by the way) and, suddenly, everyone is working in it.
It takes Developer A two months to master the new framework while Developer B is struggling with it six months later.
All of a sudden, our two previously identical software developers are worlds apart. The only reason - Developer A had superior learning skills.
In the real world, it doesn’t come down to a single framework. Software development entails learning and adopting new practices all the time. This is why it is absolutely essential for software developers to work on their learning skills.
Very few software developers work alone on projects. Sure, some projects may start off as one-person operations, but in the vast majority of cases, the product team will grow in number before soon.
For the most part, software developers work in teams.
In modern software development, especially if we are talking Agile software development (we’ll get to this later), the capability of the team to collaborate well is often the crucial factor in whether the software is finished on time, to the required specifications, and within budget.
Good team collaboration makes sure that people are working on what they should be working on, that everyone feels comfortable about asking for help (and gets it), that issues are noticed and addressed early, that no one feels overworked, and so on.
Not everyone is born as a true team player and many people struggle to truly adopt the teamwork mentality. The good thing is that this is another skill that can be learned, and it is something all software developers should investigate.
Software development is a field in which it is possible to get ahead relatively quickly. It doesn’t take decades for someone to become a senior software developer and be put in a position where they will lead a team.
In fact, it is common practice (at least in good software development companies/teams) for developers to mentor people with less experience, even when they are not too experienced themselves.
This means that people need to develop their leadership skills earlier in software development than in most other industries. The need for this is further exacerbated by the fact that the software development reality is often quite hectic and good leadership can really make a difference.
It should be pointed out, however, that leadership in software development tends to differ from leadership in some other industries (once again, especially in Agile software development). In software development, leadership is less authoritative and prescriptive than in other fields, with people in “leadership” roles often being mostly supportive and mentoring figures.
That being said, some classical leadership skills will always be welcome.
Since its “standardization” in 2001, Agile software development has come a long way and, today, the majority of software development projects are done using one of the many Agile frameworks/methods/approaches, or a combination of few.
Agile software development emphasizes frequent releases of working software, reduction in documentation, self-organization of teams, increased collaboration, improved customer communication, and a number of other ideas and practices aimed at delivering better software.
The majority of companies will not pass on a fine software developer just because they do not have the knowledge of or experience in Agile. Certain basics can be adopted relatively quickly and easily, with the rest of the acclimation happening over time.
That being said, honing one’s Agile skills can definitely make a software developer better suited to the modern world of software development. Moreover, Agile values and ideas can help a developer become better at what they do, regardless of their current work situation.
The good news is there is no shortage of resources when it comes to Agile software development. For one, there are a number of Agile and Scrum blogs where one can find a treasure of theoretical and practical knowledge. For developers who like a more hands-on approach, modern free Scrum tools can be a great way to learn practically. There are also courses and organizations that provide formal certifications.
Good Old-fashioned Empathy
When talking about software development, empathy may not seem like a particularly important skill to have. However, once you really start thinking about it, you realize that it can make the difference between a decent software developer and a really great one.
For one, a software developer needs to be able to put themselves in the shoes of their (future) users. Without this, a piece of software that has been developed to perfection can easily fail simply because no one needs it, or, at least, no one needs it in that form.
Unfortunately, even developers who don’t feel like they are too proud or short-sighted are often bested by their subconscious biases and beliefs on what the people want.
In addition to this, software developers need to have empathy for people who will work on their software in the future. Sometimes a developer will have to choose between the two:
- Completing a new feature (that meets the most basic requirements) in thirty minutes and creating an utter nightmare for people who will build on it or maintain it in the future (also making themselves the target of innumerable future curses and Voodoo dolls in the process).
- Spending an entire day on the feature in question, writing clean, maintainable code that will put a smile on someone’s face two years down the line.
While in both these cases the feature will be functional, anyone in the software development industry will tell you that the second choice is the only ethical one.
It is all about thinking about other people too.
Despite what many people think, it takes more than just being able to code fast to become a great software developer. It involves plenty of skills and investing time and effort into developing these skills makes a lot of sense.
About the Author
Jug Babic is a marketer at VivifyScrum, the company behind the eponymous Agile project management software.