Evolving IoT to put the user in control

Image by Chris Krueger

Over on the “Upon 20–20” blog, Johannes Ernst published an excellent post titled “The Internet of Things could be great, if only we didn’t let the tech giants own it”. Johannes describes how IoT should look, if only it were more like the original internet — a more-or-less level playing field where individuals, small organizations, and large companies can work together. Instead, there is an attempt to gain control of as much of the consumer IoT pie as possible by companies that include Amazon, Google, Microsoft, Samsung, and Apple. This isn’t surprising. It is the nature of large organizations to try to establish a large role in emerging technologies.

Johannes describes an “Indie IoT.” His vision is appealing. He believes users should be in control of the devices they choose to place in their home. He believes individuals should be in control of the data those devices create. He believes owners of devices should be free to modify the devices they own. This is hardly radical stuff. Yet, this is far from the state of IoT today.

Influencing product creators

Johannes rightly argues that we can change the behavior of IoT product creators by changing how we spend our money. Alas, the vast majority of IoT products fail to guarantee the reasonable rights of the user. The writer Cory Doctorow talked about this in the O’Reilly Solid Conference a couple years ago. He encouraged us to “hedge,” not to completely stop purchasing products that disrespect our rights, but to put some fraction of the money we spend on such products and services into efforts that work to change that. His words are worth your time to listen to. To Cory and Johannes’ plea to put your money where it matters, I would add that we should do the same with our time. In particular, those of us that work in software can influence the direction of IoT by building code that enables the kind of IoT world we want to live in.

This idea echoes back to the start of the Free Software movement, which has long focused on the idea of “free” as in “freedom” — the freedom to fully understand the software you are using and to be able to modify it however you like.

Free Software isn’t enough

Indeed, if all the software in IoT products were to be Free Software, it would be possible for users to install software that respects their rights onto the products they own. I would be happy to live in this world. It would give the potential for individuals to take control of the products in their lives. That potential, however, is often unrealized in Free Software because the knowledge, skills, and time required to modify the software are out of reach of many in the software developer community, and any causal user of the product. That’s not to say that fully open software on IoT products is undesirable. It is. However, alone it is not enough. And, practically speaking, many IoT product creators are unlikely to embrace such a model any time soon. Moving from an entirely closed product to a fully open product is a lot to do in a single step.

Fortunately, there are a two proven ways to be more open that give users control of their devices without requiring deep software technical expertise or requiring IoT product creators to dramatically change their world view.

Local network services

The first approach is to build into the product a network service that allows other devices to receive status about the state of the IoT product and to send commands to control its operation. If this is done through a cloud service, as Google does with its Nest Thermostat, it does not meet the criteria Johannes established because all data is routed to Google’s cloud and all decisions are made there. Instead, the network service needs to be built into the product itself allowing communication without the need for a gateway or cloud. If the owner of the product wants to connect the IoT product to the cloud, that should be their choice — including which cloud to connect to.

At Moddable, we’ve created a network service for IoT we call Decentralized Ambient Synchronization (DAS). It combines standard mDNS with a little HTTP and JSON to enable lightweight direct communication between devices. It is fast, simple, and scalable in ways that a cloud service or even a local gateway can never be. Take a look at our work and then imagine what that would empower you to do if every IoT product in your home worked this way.

Apps for Things

The second approach to creating IoT products that are more open is apps. Taking a step back to the idea of fully open software for an IoT product, what we are talking about is replacing the operating system of the product. That’s difficult, even on a computer or mobile phone. Most people never do that. One way to think about apps is that they are the software extension mechanism for an operating system. Developing an app builds on services provided by the operating system, such as network connectivity, memory management, and storage. Most importantly, apps are easy to install. Everyone can do it. Why shouldn’t users be able to install apps into IoT products too?

At first blush, installing an app on your washing machine, thermostat, door lock, or light bulb seems absurd. But, once these are IoT products, they already have apps in them. That’s more-or-less how the product creators build their own software. Apps don’t always have to have a user interface on a screen. An IoT app in a lightbulb might adjust color temperature based on the time of day or occupants of a room. It might synchronize the lightbulb so it turns on and off to match another bulb, even one from another manufacturer. An IoT app in a thermostat might connect it to a cloud service that manages energy use. An IoT app for a door lock could implement access policies that are very different from what the manufacturer of the products provides in the factory installed software. We won’t truly appreciate how useful apps are in IoT until we have them. After all, who could have predicted the incredible variety of apps on mobile phones?

At Moddable, a core part of our mission is to enable IoT products to support installable apps. There are many challenges to overcome to achieve that. One aspect of the challenge is the diversity of hardware in IoT, which varies by price-point, by product category, and product creator. We selected JavaScript to build IoT apps because it has proven itself as a universally supportable programming language, working well on computers, mobile, servers, and embedded devices. At Maker Faire this year, we demonstrated an “app store” for things which showed just how easy and useful it can be to install apps on IoT products. Our Maker Faire blog post explains more in the “Apps for Things” section and includes a video of the demo.


IoT is still a relatively immature technology. As with many new technologies, it has begun with large industry players trying to control it. These products are going into every aspect of our home, our transportation, and the devices we carry on (and in!) our bodies. As individual consumers, we can make choices in our product selection to encourage IoT products that respect our rights by putting the product owner in control. As technology creators, we can do more by using our time and skills to enable the future we want to see. At Moddable, we’ve made this part of our daily work. Maybe you’ll be inspired by our approach and give it a try. Maybe you have a better idea for how to evolve IoT to a place where the user is in control. Either way, by showing that the ideas of putting the user in control are possible, practical, and desirable we can help shape the expectations of users and empower the creators of products to do the right thing.