“Most talented developers do not have much interest in learning about the specific domain in which they are working, much less making a major commitment to expand their domain-modeling skills. Technical people enjoy quantifiable problems that exercise their technical skills. Domain work is messy and demands a lot of complicated new knowledge that doesn’t seem to add to a computer scientist’s capabilities.”
The above quote is from the Domain-Driven Design book by Eric Evans and captures a struggle that many of my friends and I face. We want to find work that’s pretty much a continuation of our computer science degrees. We admire senior engineers that worked on complex systems. So when I ask myself “how can we be like them?”, my first thought is that I lack their technical skill set.
I believe we jump to that conclusion because we see their blogs or videos of interesting problems for a finished product with the correct success criteria. We don’t get to see their explorations, previous failures, lessons learned along the way. It seems to me that you can only push the boundaries like them once you become a pro in your field. And you become a pro by diving deep and becoming a domain expert.
Even with my short work experience, I can tell that understanding your business domain and building the right thing tends to be the hardest part of a product vis-à-vis the underlying technical problems.
If you only work on a technically interesting problem without understanding its impact, how do you even judge if you’re actually successful? Can we say that the technical skills that we acquired amount to anything if there are no end results to prove it? So I don’t think that doing technical tasks without understanding the surrounding context is a transferable skill.
Is domain specific knowledge transferable then? It’s hard to say. There seem to be many products that fail although their leaders were previously successful. At Amazon, we have the Are Right, A lot leadership principle. I would still prefer to follow the judgement of an engineer that has a track record of success versus someone that might be just technically savvy.
In summary, are domain-modeling skills worth investing into? It seems to me that by mastering a domain, you’ll end up with a technically challenging problem because nobody else would have explored those waters anyway. On the other hand, if you are handed down a technical problem without an understanding of why, I find it hard to believe that you’ll get any purpose from it and know in which scenarios to apply those skills.
Edit: Dan Abramov recently tweeted about something similar: