Skip to content
MZMuse
Go back

Know Thy Domain

Whenever I switch jobs or change teams, I find myself spending all of my time learning the new technology stack and all the fancy tooling that are being used in my new workplace.

I’ve been reading more of the Domain Driven Design book by Eric Evans and one particular paragraph stuck with me as it made me reflect on my attitude towards software engineering in general.

The heart of software is its ability to solve domain-related problems for its user. All other features, vital though they may be, support this basic purpose. When the domain is complex, this is a difficult task, calling for the concentrated effort of talented and skilled people. Developers have to steep themselves in the domain to build up knowledge of the business. They must hone their modeling skills and master domain design.

Yet these are not the priorities on most software projects. 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..

Instead, the technical talent goes to work on elaborate frame-works, trying to solve domain problems with technology. Learning about and modeling the domain is left to others. Complexity in the heart of software has to be tackled head-on. To do otherwise is to risk irrelevance.

I am guilty of this behavior myself. Often when kicking off discussions regarding a new project, my mind drifts-off searching for the best and fanciest technologies that can accomplish the job.

While I do ask questions to understand the requirements and get clarity on what I’m going to build, I don’t think that’s enough. In retrospective I should start spending more time and effort studying the domain I’m dealing with. My current interpretation is too broad to what that means and will evolve overtime:

In the current organization where I work. We ask people that we interview to work on a simple coding assignment. Looking back over the past year, I realize that almost all of the people we hired are those who understood the problem well, and knew exactly what they were asked to build. Therefore, they were able to take into consideration all the invalid input and scenarios that could crash their program, even though no-one had told them about those edgecases.

Right now i’m torn between being Domain-Driven and Tech-Driven. While on one hand I do love technologies and learning about what’s new, the software I build would be absolutely rubbish and  useless if it isn’t useful to users and can’t model and abstract the real world domain properly. I’m not sure where the middle ground is, and that perhaps is an area I need to grow in.


Share this post on:

Previous Post
Cargo Cult Programming
Next Post
The Struggle With Maintainability