The complexity of IoT, owing to the inherent distributed and dynamic nature of such systems, brings more
challenges to the software development process. A vast number of devices with different communication
protocols and data formats is involved and needs to be connected and exchange data with each other in a
seamless manner. Traditional software architectures fall short of addressing the requirements of IoT
systems and, therefore, a new approach to software architecture is required. This paper presents an
attempt to lay out the foundation for a quality attribute driven software architecture for the development of
IoT systems. This architecture accommodates the appropriate architectural styles and design patterns
necessary for the development of a robust IoT system. These include edge computing, microservices and
event driven architectures. The proposed architecture treats IoT systems as autonomic systems which
require a closed control loop to regulate and orchestrate the operational aspect of the IoT system.