Sensor network developers have to address not only the functional application requirements, but also have to cope with a number of difficult non-functional requirements and constraints resulting from scarce resources including energy, from the need for self-organization and unattended operation, from the heterogeneity of sensor nodes, and from the unpredictability of the deployment environment.