Command Query Separation Principle: a function should either do something or answer something, but not both