Design for Software: A Playbook for Developers