This week for our all-staff meeting at EffectiveUI, our CEO gave a presentation on what we’ve learned from the customer experience research that we have been doing in order to continue to improve the experiences that our customers have with us and to strengthen those relationships. She used a word cloud of terms that our customers had used to illustrate both what we, as a company, are doing well, and what areas our customers perceive a need for improvement in. One of the phrases in the areas for improvement that stuck out to me was “industry knowledge.” She explained that our customers were looking for us to show more knowledge of their particular industry so that we could help guide them more effectively. This got me thinking more on what “industry knowledge” means for a software developer.
One of this things that I’ve said at numerous interviews in the past is how I think that Computer Science is a great generalist’s degree. Having a degree in Computer Science is like having a degree in problem solving. I can say with 100% certainty that I’ve never solved a computer problem for the sake of solving a computer problem. Any problem that I’m addressing is directly related to the needs of the business and the computer is simply a tool to accomplish that goal. I have to be able to understand the business problem in order to be successful.
In my career, I’ve developed software for the nuclear environmental cleanup, laboratory operations, time and attendance tracking, financial services, mine safety, telecommunications, real estate, and municipal management industries. All of those different industries span a career of just 14 years (counting my internship during college). In each project, I find myself needing to rapidly learn the business of my client in order to develop software that actually works for them.
Going into each of these projects, I usually know almost nothing about the industry or the business model. For example, I was asked in my interview at the Mine Safety and Health Information if I had a mobile device, continuous miner, and conveyer belt in a mine, what could the mobile device tell me about the continuous miner and conveyor belt. Having never had any contact with any mining equipment, I had a hard time coming up with a very detailed answer, but I asked a lot of questions to try to figure out what might be useful. If I can’t understand the conversation, I have no hope of understanding the problem well enough to build a solution. I have to be conversant in my client’s language in order for me to understand them and for them to trust my ability to deliver the solution that they need.
With all of that being said, I will never be the subject matter expert that my client is. I will always have to rely on them to some degree to be able to tell me if I’m pointing in the right direction. So how do I gain the industry knowledge that customers are asking for and demonstrate to them that I truly care about them and their business?
First, I listen and I ask a lot of questions. I have learned to be assertive about asking questions about terms, acronyms, and interactions that I don’t understand. I’m not shy about interrupting a customer if need be to ask them to explain a term or a concept that I don’t understand or I am not familiar with. I paraphrase the answers to make sure that I truly understood what they were trying to communicate. Through these questions I learn more about the company, the industry, and the business problems.
Second, I draw pictures. Diagrams are a software engineer’s best friend when it comes to understanding complex systems and business models and the relationships between them. Drawing a diagram of the problem space really helps me see the bigger picture.
Third, I read a lot. I read on a broad range of topics, both work related and not, to be able to understand a wide range of problems and ideas. Having this breadth of knowledge helps me see parallels between the customer’s current problem and others that might be related. I can say that I’ve solved a similar problem before or that I’m familiar with a similar concept, easing the customer’s concerns about lack of knowledge in their particular space.
Finally, I liberally search online. There is definitely a skill to locating the right information online and building a search to find it. It’s taken a lot of practice in critical thinking and information analysis to be able to separate the really useful information from the sheer volume of other noise online. The best result is usually not the first one.
This ongoing learning process about new problems and industries is one of my favorite things about being a software engineer. I consider myself very fortunate to be in a position where I get the opportunity to be constantly learning new things and taking on new projects. It’s important to me that my customers feel that I understand their business, their problems, and value them as a customer and learning their business is critical to accomplishing this.