As technology and communication advances, more devices (and things) are able to connect to the Internet and talk to each other to achieve a common goal which results in the emergence of the Internet of Things (IoT) era. It is believed that IoT will bring up a limitless number of applications and business opportunities that will affect almost every aspect of our life. Research has already been conducted to investigate the challenges that obstruct the realization of IoT along with the promising solutions that pave the way for the acceptance and enabling of IoT. Among the research areas that is of a great importance to making IoT paradigm possible is the presence of a unified programming framework that masks the heterogeneity of the involved devices of the IoT platform. Such a framework guides system developers throughout the IoT application development process. In this paper, we investigate the IoT concept and its high level architecture in general and focus more on the application development aspect. We believe that IoT applications are highly dynamic in nature and thus need to be engineered with the self adaptive and autonomic concepts in mind. Therefore, our proposed IoT software development lifecycle was based on the IBM architecture blueprint for autonomic systems. To cater for the runtime dynamic and heterogeneity aspects of IoT applications, we adopt the MDD paradigm for our proposed development framework. We highlight the core requirements of a resilient development framework that accommodates the necessary concepts and processes for a successful IoT application.