I demonstrated building the "sell one item" feature with primitive values (strings). In doing this, I take advantage of the fact that strings are Value Objects in Java (equals compares the underlying values and not merely whether they are the same object in memory). If you did this, then try building the feature again, this time introducing Whole Value objects right away without even specifying the underlying value! In Java, for example, that means using a Barcode class that doesn't wrap a value. (You could even just use Object on its own, but most people find that too weird. Try it if you dare!) Since there's no underlying value to compare, then Barcode objects (strangely) represent values, but act like "regular" objects (only multiple references to the same object are equal).