As software processes and the programming skills of developers improve, domain knowledge becomes more and more a differentiator to successful software development organizations. In days past, the Unix wizard, who enlightened new programmers with lore and knowledge of the C language, was often regarded as the most valuable development team member. If your development organization already has skilled programmers in place and has implemented a complete set of software development processes, the most valuable programmer is likely to be the one with the greatest domain knowledge on the application being developed. Consider how domain knowledge is used throughout the software life cycle:
During requirements definition, the software engineer with domain knowledge will already understand the problem you are trying to solve and thus will be more likely to capture requirements correctly on the first attempt.
When interacting with users, the software engineer with domain knowledge will already understand the terms and domain-specific vocabulary used. This will make it easier to translate user needs into correct requirements.
During software design, the software architect with domain knowledge will be better able to decompose software requirements into specific application modules, objects, and operations. This is especially true if an object-oriented design methodology is used. In object-oriented design, software architects often try to map real world objects onto their software equivalents. This is often very difficult to do if you do not properly understand the problem domain.
During software testing, a software engineer with domain knowledge will have a better idea how the application will be really used and thus can often devise better test cases that more closely match real life use.
Of course if you believe that domain knowledge truly is beneficial to a software development team, the next question to answer is how can developers have much domain knowledge when they have been off writing code for years ? Here are some ideas:
Some developers that have been working in a specific application area for many years actually have as much domain knowledge as most of the end users. The software development manager should recognize this and use domain knowledge as a criteria when assigning developers to projects.
Consider using job rotations as a way for software developers to gain domain knowledge. For instance, if your group develops financial software, have a developer go off and work on a project for your corporate controller for six weeks to gain experience.
If you don't have domain knowledge within your development team, look for ways to get end users involved in your development team, perhaps on a job rotation basis. Even without any software development experience, I have seen end users make excellent suggestions during design reviews, simply based on their domain knowledge.
The most successful software organizations have institutionalized acquiring domain knowledge into their development processes. They do this as part of their everyday recruiting, training, and retention efforts. Whenever possible, get end users involved in the software development processes. Recognize the value of domain knowledge in your development organization and you to will be on your way to more successful software development.