Skip to main content

Coding is Not Enough: The Importance of Investing in Domain Knowledge

As technologists, we spend much of our time learning the latest technologies, development practices, and tools. These are very important to the work that we do and thus we rightfully give them a lot of our attention. There are many resources from which to learn this information whether they be blog articles, conferences, certifications, videos, etc. Understanding the technology is only half the battle though. Software is built for a reason, to solve problems in the real world and, in order to do that, knowledge of how the real world works is necessary. This knowledge about a particular industry or field is commonly referred to as domain knowledge.

Domain knowledge, although not discussed often when explaining what is necessary to succeed as a developer, is critical to being effective in your work. Without domain knowledge, a developer simply is a coder that takes in information and translates it into a computer's language. Compare this to a developer that has deep domain knowledge in the area they are building software. This developer is able to intelligently discuss with those business experts what the software needs to do. They also know the constraints and the terminology of their particular field. Rather than just knowing the what and the how of the software, they also deeply understand the "why." Thus they become an expert in the particular domain of development as well. This doesn't mean that there aren't business people that are driving the requirements of the software, but it does mean the developers and the product folks are speaking the same language. Just as it can be helpful for a product owner to have a high-level understanding of how the software components work together, the same is even more true in the other direction.

Given the importance of gaining domain knowledge, how does one gain it? The unfortunate part about domain knowledge is that it can likely only be applied in that domain. Thus if you change industries or even jobs in the same industry you will likely have domain knowledge that will no longer be useful. While having a breadth of knowledge can be useful so you can pull knowledge from one area to another, it is the deep understanding of a specific domain that is most useful.

The place where I have learned the most about specific domains is from the experts in that field. These often end up being the "product" people if you are lucky enough to have them at your place of employment. They were likely hired partially for their domain knowledge and thus it would be a shame not to take advantage of that. This also has the added bonus of being able to build a relationship with that person which can pay dividends in the future. This may not be just them teaching you about something either, they may simply be acting as a guide. One of the domains I have had the opportunity to work in is building software for FDA-regulated companies. One of the critical pieces of legislation in that arena is 21 CFR part 11. While a product person could lead me through it I decided to take it upon myself to read through the legislation and just come to them with clarifying questions. This allowed me to get first-hand experience while also showing them that I was invested and taking what they pointed out as important seriously.

Sometimes you won't be so lucky as to have someone guiding you along. In a different project, I needed to work with barcodes and product packaging. While there were local experts on parts of the packaging process the barcode that was printed on it was outside the scope of the expertise of the experts, they simply needed it to work. After gathering requirements about why things needed to change from the package experts I had to go do the research into what was possible. Things like the differences between Code 39, Code 128, Interleaved 2 of 5, QR codes, etc. What could our printing software handle, what could our scanning software use, etc. This is not information that I have ever had to consider after but at the time I got extremely deep into the internals of barcodes. Sometimes you won't have a guide through a domain so having the research skill required are important.

Another way to gain this domain knowledge is through primary research. Shadow someone that does the job you are trying to build software for. This can be extremely useful in the design of the software. Gaining this empathy and understanding how it can and will be used allow you to make sure you are building something that is useful.

No matter the technique you use to gain these skills a common core to all of them is a desire to learn. If you start with a desire to learn about a particular field and use the sources above you will be able to build up your experience and knowledge in your field of study. Gaining domain knowledge will likely require a combination of the above ideas above.

Domain knowledge is essential in software development. It leads to more effective and innovative solutions, improved communication with stakeholders, and will make you invaluable in your software development experience. The investment is definitely worth it.