How do you learn a problem space? I've had to chunk up problem spaces to give advice for the last several years, so I've refined my approach over time. In fact, When I find myself churning or don't have the best answers, I usually find that I've missed an important step.
Problem Domain Analysis
- What are the best sources of information?
- What are the key questions for this problem space?
- What are the key buckets or categories in this problem space?
- What are the possible answers for the key questions?
- What are the empirical results to draw from?
- Who can be my sounding board?
- What are the best answers for the key questions?
1. What are the best sources of information?
Finding the best sources of information is key to saving time. I cast a wide net then quickly spiral down to find the critical, trusted sources of information in terms of people, blogs, sites, aliases, forums, ... etc. Sources are effectively the key nodes in my knowledge network.
2. What are the key questions for this problem space?
Identifying the questions is potentially the most crucial step. If I'm not getting the right answers, I'm not asking the right questions. Questions also focus the mind, and no problem withstands sustained thinking (thinking is simply asking and answering questions).
3. What are the key buckets or categories in this problem space?
It's not long before questions start to fall into significant buckets or categories. I think of these categories as a frame of reference for the problem space. This is how we created our "Security Frame" for simplifying how we analyzed application security.
4. What are the possible answers for the key questions?
When identifying the answers, the first step is simply identifying how it's been solved before. I always like to know if this problem is new and if not, what are the ways it's been solved (the patterns). If I think I have a novel problem, I usually haven't looked hard enough. I ask myself who else would have this problem, and I don't limit myself to the software industry. For example, I've found great insights for project management and for storyboarding software solutions by borrowing from the movie industry.
One pitfall to avoid is that just because a solution worked in one case doesn't mean it's right for you. The biggest differences are usually context. I try to find the "why" and "when" behind the solution, so that I can understand what's relevant for me, as well as tailor it as necessary. When I'm given blanket advice, I'm particularly curious what's beneath the blanket.
5. What are the empirical results to draw from?
Nothing beats empirical results. Specifically I mean reference examples. Reference examples are short-cuts for success. Success leaves clues. I try to find the case studies and the people behind them. This way I can model from their success and learn from their failure (failure is just another lesson in how not to do something).
6. Who can be my sounding board?
One assumption I make when solving a problem is that there's always somebody better than me for that problem. So I then ask, well who is that and I seek them out. It's a chance to learn from the best and force me to grow my network. This is also how I build up a sounding board of experts. A sounding board is simply a set of people I trust to have useful perspective on a problem, even if it's nothing more than improving my own questions.
7. What are the best answers for the key questions?
The answers that I value the most are the principles. These are my gems. A prinicple is simply a fundamental law. I'd rather know a single priniciple, then a bunch of rules. By knowing a single principle, I can solve many variations of a problem.
Now, while I've left some details out, I've hopefully highlighted enough for you here that you find something you can use in your own problem domain analysis.