Write the simplest abstraction first, then as the system develops combine similar use cases into useful abstractions for clarity