A common misconception about software development is that it’s all about programming. When a layman thinks about a software developer, the image that often pops into his head is one of a scruffy faced geek, wielding nothing more than a Mountain Dew and a keyboard, typing up hundreds and hundreds of lines of arcane code in a language incomprehensible to mere mortals. The software developer is imagined to be brilliant but socially inept, unable to grasp the complexities of human interaction or even fully relate to his fellow human beings. Fortunately for everyone involved, nothing could be farther from the truth.
A successful software developer is someone who understands people just as much as he understands technology. Why? This is so because, at the end of the day, the most important part of any software system is the user. To develop a successful software system, the system’s designer must understand what the user needs, what the user expects of the system, and — the most difficult part of all — must be adept at taking the user’s requirements, most often expressed in non-technical language, and translate these requirements into a cohesive software system that meets the user’s expectations.
This process is not easy and often involves a great deal of frustration for everyone involved. Excellent communication between client and developer is the key to resolving problems that arise from inadequate requirements definition. An implementation bug discovered during the last third of a project’s lifetime is not apocalyptic as long as it can be fixed in time for deployment. But a misunderstood requirement that was built into the system from the very beginning might require completely rewriting the module in which that requirement was implemented — or worse yet, a rewrite of the entire software system. Obviously, this is a horrible situation for both the software company and their clients and something that both parties want to avoid at all costs.
What is your company doing to develop communications skills for developers?
The bottom line is: if we can’t understand the user’s requirements, then we can’t build them the system they need.