The Intertwinement of Science and Engineering in Software Development - Part 2: Discovering the Japanese Boat

In Part 1, I introduced development speed (valuable features delivered per developer per time unit) as the heartbeat of software quality, signaling issues like technical debt when it slows. This speed relies on two intertwined forces: A, understanding the business domain (the “what”) through a scientific approach, and B, implementing it simply (the “how”) with clear, readable code. Both are essential to row like the Japanese team—lean and synchronized—not the bloated Dutch boat. Today, let’s explore this intertwinement of science and engineering, and how their continuous cycle drives sustainable speed.
The science—A—is crafting a rich domain model, like a scientist analyzing a complex system. It’s about identifying actors (e.g., customers, orders), their interactions, and rules through collaboration with domain experts. Spending time with an expert, asking targeted questions, can map out a model that captures the business’s essence. This isn’t guesswork; it’s hypothesis, testing, and refinement, ensuring the software mirrors the business reality of the domain.
The engineering—B—is implementing that model as simply as possible. Think “Mickey Mouse” code: clear, functional, and mapped 1:1 to the domain (e.g., an Order class with applyDiscount()). Avoid unnecessary frameworks or layers that add drag, like the Dutch team’s extra managers. Object-oriented (OO) programming shines here, as it aligns code with the domain model, making discrepancies obvious.
The magic lies in their cycle. A clear domain model (A) enables simpler implementation (B), while coding tests the model’s correctness as it will reveale gaps and spot design flaws. These short, frequent feedback loops refine the model, boosting speed and quality. Procedural coding, by separating data and logic, often misses this cycle, leading to misaligned solutions. Only by mastering both disciplines, both the science and the engineering, can you achieve the Japanese team’s efficiency.
In small applications, say 3 to 4 entities, the gain in an Object-Oriented approach is still there, but not large. But as systems grow, an Object-Oriented approach becomes the difference between a sustainable product and a 5-yearly rebuild cycle. The often sought solution of microservices only makes the feedback loops even longer to the point where one can't even tell anymore where the problem is.
Software engineering is about discovery and efficiency, not about knowing version X of framework Y.
In the next part I'll dive deeper into the engineering side of software development.






