Every time we start implementing a system we do it in a certain way that seems most natural to us. We create domain objects and build layers of code that work with them. Why do we choose this way? Does it really serve us in large enterprise systems? Are there better ways? How should we decide? Let’s forget our prejudices and rethink the basic assumptions!