An exercise from Design for Interactive 2.