Problem-solving design: Reasoning about computational value, trade-offs, and resources