I write software that's tailored to solve problems for a particular domain, yet I don't know a lot about this domain. This lack of knowledge used to not really bother me, but now I find it very troubling. How can I be trying to solve problems when I don't truly, deeply understand the problems that need to be solved? It's pathetic and completely unacceptable. I need to know the domain for which I write software.
My previous performance reviews had objectives for learning about the industry that we write software for, and I've actually taken some steps to learn more. However, I've always treated this information as helpful and nice-to-have but not necessarily critical - and that's where I've been wrong. Domain knowledge is essential to creating powerful and wildly successful software, as it leads to a strong conceptual model and language that everyone on the team (not just developers) can use, as well as software that closely corresponds to this model and language. So I should be exerting as much effort towards learning about the problem domain as I have been towards learning new technologies, patterns, and practices.
What does the industry actually entail? What challenges is it facing and will be facing? Who are our customers? What problems do they have? What do they like about our software? What do they hate? How do they actually use our software (as opposed to how we think they use it)? What new features would they like to see? What's the roadmap and long-term vision for our software? I need to learn the answers to these questions and many more if I intend to design and implement innovative solutions for our customers. And as a test to determine whether I actually know the problem domain, I should be able to talk directly to our customers or potential customers using language that they understand, as well as explain how our software solves the problems they face.
Thus I'm trying to gain a deep understanding of the problem domain, and I'm curious to hear the ways in which I can learn more about the industry we're writing software for.