@jasongorman My original point is writing model types can sit alongside writing tests as an activity that clarifies what your system actually *is* and *does*.

It sounds like you prefer to think in terms of *behaviors*, hence your focus on tests as the starting point. For me, modeling the problem data domain is a more helpful starting point because it’s difficult for me to think about overall system behaviors in such an abstract way without having types to organize and guide.