Power and energy are key design considerations across a
spectrum of computing solutions, from supercomputers and data
centers to handheld phones and other mobile computers. A large
body of work focuses on managing power and improving energy
efficiency. While prior work is easily summarized in two
words—"Avoid waste!"—the challenge is figuring out
where and why waste happens and determining how to avoid it. In
this article, I discuss how, at a general level, many
inefficiencies, or waste, stem from the inherent way system
architects address the complex trade-offs in the system-design
process. I discuss common design practices that lead to power
inefficiencies in typical systems and provide an intuitive
categorization of high-level approaches to addressing them. The
goal is to provide practitioners—whether in systems,
packaging, algorithms, user interfaces, or databases—a set
of tools, or "recipes," to systematically reason about and
optimize power in their respective domains.