This article considers the software problems of reuse, interoperability and evolution in the context of Ambient Intelligence. A novel approach is introduced: the Environment, Application, Adaptation (EAA) is streamlined for Ambient Intelligence and is evolved from state of the art methods used in software engineering and architecture. In the proposed approach, applications are written by using some abstract functionalities. All environment capabilities are exposed as individual services. Bridging the gap between capabilities of the environment and functionalities required by the applications is done by an adaptation layer that can be dynamically enriched and controlled by the end user. With an implementation and some examples, the approach is shown to favor development of reusable services and to enable unmodified applications to use originally unknown services.