What’s the best skill a software developer can possess? Is it a well rounded knowledge of relational databases like Oracle and SQL Server? Or how about javascript framework skills like AngularJS or ReactJS? Or maybe how to properly unit test your code?
No doubt, these are all valuable development skills that companies look for in professional software developers. And software developers need to make sure they keep these kinds of technical skills up to date.
That means investing in yourself by continually refreshing your technical skills. Reading technical books on your core skills. Attending local meetup groups that talk about the latest and greatest technical trends in the software development ecosystem.
And of course, coding like a madman!
Just like a professional runner needs to actually RUN to improve their running skills, coders code to sharpen their coding skills.
That said, I’ve learned that there’s a certain non technical skill that’s probably as important, if not MORE important than the technical skills a developer needs to possess.
It sort of came to me, as I’ve been spending the past few days working on an application support issue.
Unless you’re a software developer of a one person company, you’re inevitably going to need to interact and work with many other people in your organization, in order to successfully do your job well.
Coming back to the application support issue, I was asked by my manager to tackle a strange behavior with one of our home grown web applications.
The main web application worked fine, but certain HTML links to some static web pages would fail to load inside a user’s web browser.
An important aside is that I was not the original developer of said application. I basically inherited this application from a long line of previous developer, many who no longer work at my company.
It was going to be one of those “learn as you go” type technical support situations.
I actually felt fortunate that early in my IT career, I worked at an internal technical support help desk, manning the phones and handling internal employee technical issues.
Being successful in technical support requires many skills and attributes, but if I had to name something that continues to help me to this day, I’d say it’s the ability to COMMUNICATE.
More specifically, the ability to WRITE.
Working the help desk required a combination of technical knowhow but just as important, the ability to COMMUNICATE and BROADCAST technical knowledge to others, be it your customers you support or your fellow employees.
Possessing the technical knowledge to know how to solve a problem for a customer was useless, if you didn’t know how to clearly communicate that knowledge to the customer.
Over the course of my help desk career, I quickly learned the value of good writing skills.
Those writing skills are just as important for me today as a professional software developer as they were back then.
Yes, technical knowledge absolutely is required as a professional software developer.
I have to continue keeping my technical skills sharp by attending meetups on new technology trends. Keep my coding skills sharp by coding and continuously trying to improve the code I write.
But as I worked through the application bug I was assigned to work on, I realized just how much communication and writing I needed to perform to make progress on the issue.
In order to solve a problem, you have to clearly understand what the problem actually is.
This is a skill, in of itself. When a customer initially reports a problem, oftentimes there isn’t enough information to go on.
You often need to glean, pry and probe for this information from others. And the only chance you have to be able to successfully do this is to clearly communicate with the person or persons you need to extract this information from.
This will often entail back and forth communication with your customer, be it in the form of face to face meetings, over the phone, or through instant message or e-mail communications.
The better you’re able to communicate with others, the quicker you’ll be able to understand what the core issue is.
Understanding what exactly is the nature of the problem is only the first step.
The other half is of course HOW to fix the problem.
This will likely involve even more communication with others, trying to get to the bottom of the issue.
Here is where writing and communication skills become EXTREMELY important. Not only do you need to clearly describe what the nature of the problem is to others (who may not necessarily possess the technical knowledge to understand your issue at a technical level), you need to know how to communicate your thoughts at the correct contextual level to your target audience.
Are you communicating to management? Management usually doesn’t concern itself with things at the technical level that developers often need to work at to solve a problem. They like to see things from a “30,000 foot” level.
Are you communicating to your customers? You need to make sure your tone of communication conveys you’re not ignoring them and that you’re diligently trying to help them solve their problem.
If you’re communicating to others at a technical level, then you obviously need to make sure you are including the appropriate amount of “technical-ese” into your communication.
As I finally got to the stage of my problem where I understood the exact nature of the problem and how to go about fixing it, I was amazed at just how much written communication in the form of e-mail, instant message and wiki documentation I had to produce, to get to that point.
Sure, I needed the technical knowledge and know how to debug the issue, but if it wasn’t for my writing and communication skills, I would have never had a shot at getting to a solution.
Even in software development land, your A-B-Cs are at least as important as your hexadecimal 1-2-3s.