  Software has a longstanding association with a state of crisis considering
its success rate. The explosion of Internet-connected devices,
Internet-of-Things, adds to the complexity of software systems. The particular
characteristics of these systems, such as being large-scale and its
heterogeneity, pose increasingly new challenges. In this paper, we first
briefly introduce the IoT paradigm and the current state of art of software
development. Then, we delve into the particularities of developing software for
IoT systems and systems of systems, given an overview of what are the current
methodologies and tools for design, develop and test such systems. The findings
are discussed, revealing open issues and research directions, and reveal that
the nowadays IoT software development practices are still lagging behind of
what are the current best practices.
