If you follow DDD approach, you understand that the domain of an application is what really matters. The better you express it, the more maintainable application you get. Common approaches for modelling of real business processes doesn’t work well on big scale. Single model of Customer with all possible states and attributes in one place quickly turns it into mess. Here is the place where Types Algebra from Functional programming comes helpful. And it can be implemented in Ruby in a decent way using dry-types from the great dry-rb toolkit.