ballmer-peak: use composition instead of mutable state