By Henryk Konsek, IoT Software Engineer, Red Hat
The Internet of Things (IoT) is going to be big, we already know that. In the famous Internet of Things report , Gartner predicts billions of connected devices and trillions of dollars of economic value-add in the 2020s. Existing enterprises are going to start collecting enormous volumes of data from myriad of heterogeneous devices. The data collected by enterprises will be used to transform their organizations to become more efficient and profitable.
What does it mean for all the companies hiring back-end Java or .Net developers? There is a large number of organizations willing to enter the Internet Of Things world and they have already begun to hire the human resources meant for the purpose. What should your developers know to stay relevant in the future? Which part of the existing expertise and know-how can be reused? What new competencies the developers have to master in order to be able to create the IoT-ready systems?
Data center development v/s embedded development
Software developers can be divided into two main categories: data center and embedded developers.
Embedded developers are the ones creating software deployed into non-server devices. The devices are usually sold to the end consumer and run in the customer environment, which can be a customer house, a factory or an outdoors facility. Embedded developers work with the low-level programming languages and create software that is highly hardware-dependent.
If your organization does not sell specialized hardware devices, you most probably hire mainly data center developers. This group of programmers creates software dedicated to server solutions. They usually program against some kind of unified, higher-level software platform such as, for example, Java or .Net.
We can think of the Internet of Things as a combination of embedded and data-center software development. A complete IoT solution is a combination of some hardware connected to an external data center system, so an ideal IoT software developer should have a good understanding of both the embedded and data center aspects of the business problem that is addressed with the IoT solution built.
The essential architecture of a typical data center system is presented in a simplified way in the diagram below. The client, usually a web browser, connects to the backend system deployed into the data center to retrieve the human-readable data from the application.
We can think of the Internet of Things architecture as the superset of the classic data center architecture. The system still has to present the data to the desktop – or mobile-based web clients – but at the same time the IoT architecture has to involve some additional elements; in particular, a field gateway, i.e. a small computer deployed near the connected devices, which is responsible for collecting the messages that come from the sensors, initial processing of the data and sending the data to the data center application.
Technical similarities between Data center and IoT
The communication in IoT systems is inherently asynchronous. The reason for that is that asynchronous communication is easier to scale and scalability is extremely important in the context of a huge number of devices connected to a typical IoT system as well as a large volume of the messages such devices generate. These conditions demand that larger Internet of Things systems are usually based on a solid messaging infrastructure. This is good news for the existing data center shops, as many of them have strong messaging assets already in place. The majority of data center developers feel comfortable with such messaging technologies as JMS, AMQP or STOMP, so the existing messaging expertise can certainly be reused.
One of the most popular messaging protocols for the Internet of Things is MQTT. The latter has been favoured by the IoT community due to small payloads it operates on and the protocol reliability. The MQTT connectivity can easily be bridged to the existing messaging infrastructure using MQTT-JMS or -AMQP bridges, which are offered by the majority of the existing messaging brokers on the market. The MQTT bridge allows you to reuse your existing messaging infrastructure and expertise, while taking advantage of the IoT messaging at the same time.
The survey  from the Eclipse IoT Foundation indicates that the majority of IoT developers still use the REST and HTTP communication to exchange messages in the IoT systems they have been working on. It clearly shows that HTTP communication, which is a fundamental tool for all data center developers, can be used to create a foundation for IoT communication solutions. The HTTP protocol, however, is not a perfect solution for the IoT communication due to the size of the messages it uses to exchange data between client and server. That is why many new IoT protocols mimicking the HTTP communication style keep emerging; the most notable example is the CoAP protocol which allows one to use communication patterns similar to HTTP/REST, without consuming so much device battery power or network data.
IoT adoption challenges
One of the biggest surprises that data center developers might encounter when working with IoT systems is the myriad of communication protocols that are involved in a complete working solution. While a data center system usually operates on a smaller number of protocols, the IoT solution has to be able to communicate using various connectivity options for the different layers of the system. Sensors use different protocols than the field gateway, while the gateway has to connect to the data center using yet another connection type. IoT developers have to feel comfortable using and mixing the different protocols, which often compete with each other for a wider community adoption.
Another challenge for developers who build IoT solutions is testing the system in conditions similar to those expected in the production environment. IoT developers should create the system with the assumption that it has to stay operational even in the extremely unreliable conditions – for example, when connected to a fragile network infrastructure.
An important thing to keep in mind when transitioning data center developers to work on Internet of Things projects is that IoT systems often rely on constrained resources. For example power management is never a problem for data center systems, while the software deployed into field devices must consume as little battery power as possible. The same principle applies to paid network traffic plans. Data center solutions have access to fast and unlimited network connectivity, while software in the field is usually limited by the expensive GSM connectivity.
Last but not least, security in the Internet of Things systems is much more difficult to establish than it is in traditional data center solutions. One of the biggest mindshift that has to be made for the people working with a data center background is that the attacker can physically access the device deployed into the field. You cannot anymore rely on the data center being safely hidden in an air-conditioned basement.
The Internet of Things systems can be perceived as the superset of classic data center solutions. While we should keep in mind that much of the existing data center expertise and resources can be reused when creating IoT systems, there is a set of critical IoT-specific issues that need to be considered and resolved when working on IoT solutions.