The extreme heterogeneity of networked embedded platforms makes both design and reuse of applications really hard. These facts decrease portability. A middleware is the software layer that allows to abstract the actual characteristics of each embedded platform. Using a middleware decreases the difficulty in designing applications, but programming for different middleware's is still a barrier to portability. This paper presents a design methodology based on an abstract middleware environment that allows to abstract even the services provided. This is gained by allowing the designer to smoothly move across different design paradigms.