  The recent growth of the Internet of Things (IoT) devices has lead to the
rise of various complex applications where these applications involve
interactions among large numbers of heterogeneous devices. An important
challenge that needs to be addressed is to facilitate the agile development of
IoT applications with minimal effort by the various parties involved in the
process. However, IoT application development is challenging due to the wide
variety of hardware and software technologies that interact in an IoT system.
Moreover, it involves dealing with issues that are attributed to different
software life-cycle phases: development, deployment, and progression.
  In this paper, we examine three IoT application development approaches:
Mashup-based development, Model-based development, and Function-as-a-Service
based development. The advantages and disadvantages of each approach are
discussed from different perspectives, including reliability, deployment
expeditiousness, ease of use, and targeted audience. Finally, we propose a
simple solution where these techniques are combined to deliver reliable
applications while reducing costs and time to release.
