One of the most important considerations in the product life-cycle of an embedded project is to understand and optimize the power consumption of the device. Power consumption is highly visible for hand-held devices which require battery power to be able to guarantee certain minimum usage/idle times between recharging. Other main embedded applications, such as medical equipment, test, measurement, media, and wireless base stations, are very sensitive to power as well – due to the need to manage the heat dissipation of increasingly powerful processors, power supply cost, and energy consumption cost – so the fact is that power consumption cannot be overlooked. The responsibility for setting and keeping power requirements often falls on the shoulders of hardware designers, but the software programmer has the ability to provide a large contribution to power optimization. Often, the impact that the software engineer has on the power consumption of a device is overlooked or underestimated. The goal of this chapter is to discuss how software can be used to optimize power consumption, starting with the basics of what power consumption consists of, how to properly measure power consumption, and then moving on to techniques for minimizing power consumption in software at the algorithmic level, hardware level, and data-flow level. This will include demonstrations of the various techniques and explanations of both how and why certain methods are effective at reducing power so the reader can take and apply this work to their application immediately.