Designing for immutability