9 essential non-technical skills for developers

You can develop.

You can develop.

Anybody can develop.

There is very little in the way of your learning how to develop.

I just wanted to get that out of the way before I start, because this post is about what I consider the top essential skills that any developer should have or put the effort into learning.  Some of the skills discussed are those that come naturally, whilst others can be learned and developed with practise.  I’m certainly not saying you can only be a developer if you tick all of the boxes discussed here, but I think they are a big help, and I also believe that in most cases they are skills that can be fed and watered and nurtured over time.

I’m discussing non-technical skills here, so I won’t be talking about specific languages, tools or concepts, although I may do that in a future post.

Let’s get started, shall we?


I’m not saying you should have a phd in mathematics, or that you should understand calculus, but a decent understanding of the basic mathematical concepts is, I think, an important skill to have if you are a developer.  Using variables efficiently requires a decent grasp of algebra, especially if you intend to calculate values to use in your applications.  If you’re wanting to develop games, you will likely need a good understanding of geometry and basic physics concepts, too, or you’ll find it hard (and frustrating) work.

No good with maths?  Make your way to Khan Academy and learn (more on this later).  It’s easier than you think, and very rewarding (and will make your programming life much, much easier, trust me).

Problem solving skills

If you’re wanting to be a developer, you probably already have these.  After all, what else is development if not solving problems?  The great thing about this skill is that, the more you do it, the better you get at it.  Answers can sometimes take a long while to come, but when they do, the additional knowledge you get from them tends to stick.

Communication and social skills

I don’t think there’s really any job you can do without having good communication skills, and developing is no exception.  Being able to explain to people what you are doing is fundamental in developing applications, especially if your clients are of a non-technical nature.  If you’re going it alone as a freelance developer, good communication is vital for you to get business and develop good working relationships that might get you more.  Documenting your efforts well also requires good written communication so that others can understand how things work, or why you made particular decisions in your development process.

A thirst for knowledge

I firmly believe that you can’t really stand still as a developer.  With new trends and technologies appearing all of the time, it’s important to have an enquiring mind and to keep yourself ahead of the crowd.  With the internet at your disposal, you can learn more or less anything, it’s just a case of looking in the right places.  In fields such as development, nobody ever knows everything (some people seem to, or pretend to).  Keeping on track and never allowing yourself to stagnate is, in my opinion, super important.


Developing software requires good (if not, great) organisational skills.  Opening up an IDE and randomly vomiting code into it might get you the results you want to start with, but it can become a nightmare to maintain that code as it increases in size, especially if when you start getting bugs.  A good developer knows how to organise their work to make it not only easier to maintain, but also to pass on to others.  Planning a software project well makes it much easier to develop, too, especially if you’re working with true object-oriented development or in teams.

Organisation and planning are also important for you to get an idea of how long projects might take.  Telling a client your work will only take two weeks is fine, if you’ve planned it right.  If not, and the project takes two months, that client won’t be knocking on your door any time soon.


I believe patience is a skill that can be learned and nurtured.  Some are better at it than others, and some are more patient in certain circumstances than they are in others, but I believe that, given the practice you can get better at it.  Patience is really important for developers for a number of reasons.

First of all, learning new techniques and technologies takes patience, and we’ve already discussed how important your thirst for knowledge is, haven’t we?

Second, you will need patience when developing applications, especially if you encounter a bug (or multiple bugs) and can’t quite yet figure out how to fix it/them.  Reading line after line of code, or following the path of your code through a debugger requires a keen eye and, yes, sometimes lots and lots of patience.  Remember, computers only do what they are told, so if you’re not getting the results you want, it’s you that did something wrong, not the computer (most of the time).  Don’t throw your machine through the nearest window if you’re not getting the results you need. Go outside, breathe and relax…learn to be patient and things will seem so much easier, I promise.


Whilst there are tools and techniques to help improve memory, in general I think people either have good ones, or they don’t.  That doesn’t mean a bad memory is a barrier to good software development, but having a decent one can help.  Being able to keep a number of things in your head at the same time can be really useful when developing solutions, especially if you are moving values around between variables in your application.  Having said that, there’s only so much you can keep in your head at any one time, so being able to organise yourself is once again, very important.  Pen and paper are extremely useful tools, too.  Write things down that your head doesn’t want to store so that you can refer to them quickly when needed.

The ability to handle criticism, and to be self-critical

One thing you’ll hear a lot as a developer is criticism.  Your application takes too long to load, the font you use is terrible to read, and the form you built doesn’t seem logical.  Don’t take it to heart.  One skill that is important is being able to handle criticism well.  Most of the time it will be constructive, but often it won’t be.  Being able to listen and see things from your users’ perspective can help you a lot. Why don’t they like the font?  How could it be better?  Speak to people and you might find they are actually right!  Usage of software and styling can be subjective, so learn to handle feedback well and have a reasoned response if you feel the user is wrong.  Don’t get grumpy or defensive, it’ll get you nowhere.

Self-criticism is also essential.  You aren’t perfect.  No, you really aren’t..  Writing a piece of software, leaving it alone for a few days or weeks and then coming back to it will often highlight areas that don’t work as well as you thought when you first wrote it.  Self-criticism makes the difference between a good developer and a ‘just ok’ developer, and makes the difference between an adequate product and an outstanding one.  With every re-visit of anything you make or develop, you should see something you could have done better.  Learn this trait and use it regularly.

And last of all (but possibly one of the most important)…

Being a nice person

Being a nice person is just good, ok?  If you regularly lurk on forums waiting for questions from noobs only to shoot them down in flames for not knowing as much as you, you’re not a nice person.  You were new to this stuff once too, remember?  If you can’t be helpful, don’t bother.  It doesn’t help and can be a real confidence killer for those just starting out.

Can you think of any more?  Comments are welcome, as always.

Leave a Reply

Your email address will not be published. Required fields are marked *