Brian Carrigan|
11.18.15 |Code

Full Stack Engineering For The Internet Of Things

IoT

Over the last decade, the Internet has become an increasingly diverse and dynamic place to create and consume information. With the increased availability of inexpensive microcontrollers with the ability to connect to the Internet, our digital experience will continue to change rapidly. While speaking at the IEEE Sensors conference in South Korea, I argued that this improved utility is not free. It comes at the price of complexity. On their own, the worlds of electronics and the Internet have been getting more complex. Let’s start there.

Traditionally, electronics were built using a mixture of analog circuits and single transistors. They were developed to receive information about their surroundings and act on that information. While microcontrollers have been around since the early 1970s, they have gained more and more traction due to dropping prices, more capabilities, and improved development tools. This transition introduced the first programmable elements into electronics, enabling a whole new generation of devices.

A concurrent shift was happening in the web world. New devices and screen sizes produced the need for web applications that could be viewed in many different ways. Web development split into having a backend, which manages the application data, and frontends, which display data in the best format for the device they are on.

The Internet of Things is not a brand new stack; rather, it is the merging of embedded systems with the Internet. The new stack is more complex, but the good news is that the individual disciplines have already built up best practices. The upcoming challenges exist less in the realm of technicalities of how everything works and more in the difficulties of how to orchestrate so many moving parts. There are two things that I think will be vital to making great connected projects:

Understanding the concerns of other developers. The most important skills for developing connected products are communication and teamwork. At every layer of design, tradeoffs need to be made. If part of the project team makes a decision that affects others without their awareness, it could mean disaster for a system. I urge software engineers working in this space to learn about the challenges in making good embedded projects, including the constraints on memory, processing power, and battery. Similarly, embedded engineers working on connected devices should learn how web applications are built so that they can structure their communications in a way that is scalable and extensible.

Designing the application as a unified experience. As our applications move from screens to reality, there will be more decisions to make about the best way to interact with the application. Designers and user experience experts should spend time learning about what sensors are available. They can then think of innovative ways that these sensors could be used in a given application. Moving from a graphical user interface to a reality user interface may be the most literal form of breaking out of the box.

There is a challenging path ahead for making the Internet of Things a reality. It will ultimately live up to its own hype once disciplines band together to understand the other’s craft. As someone who has worked on both sides of the problem, I am excited to see these worlds converge as they can benefit from one another greatly. I challenge everyone interested in this area to try something new: buy an Arduino and experiment with making a physical device, make a website from scratch, or deeply contemplate how you would redesign something that you use often. There are many paths to a connected future, and it will take all kinds of people to get us there.

We design, develop, and ship custom software for web, mobile, and connected applications and experiences. GET IN TOUCH.