Fuse as an Experiment in Internet of Things Architectures


O'Reilly Media is hosting a Software Architecture Conference March 17-19 in Boston. This blog post is my proposal.

Yellow car

The Internet is decentralized, heterarchical, and interoperable. Unfortunately, today's Internet of Things is none of those. We might better call it the "CompuServe of Things." What architecture should the Internet of Things embrace?

This talk will discuss the problems with the current model for the Internet of Things and present the lessons we've learned from architecting an Internet of Things product that is more in keeping with the fundamental architectural principles of the Internet.

Fuse is a connected-car product built as an experiment with software architectures for the Internet of Things. Fuse is event-based, open-source, hostable, and has an extensible API enabled by a microservice architecture. Moreover, Fuse is designed to keep vehicle data and services private unless explicitly shared by the owner. At the same time, the architecture preserves the ability for the service and associated data to be sold with the car.

At the heart of the Fuse architecture are persistent compute objects (or picos). Picos are lightweight, general-purpose, online objects that have persistent state. Picos are used to represent anything with a unique identity including people, places, things, and even concepts. Picos are decentralized and networked. Fuse knits picos representing the owner, fleet, and the owner's vehicles together. The owner controls the picos, with whom and how they share data, and where the picos are hosted. Picos are individually extensible. Consequently, the set of services a given pico presents is controlled by what services the owner has installed.

Among the lessons learned in building fuse are the value of self-healing services, idempotent actions, asynchrony, and accretive functionality. These lessons have allowed us to build a connected-car service that is modular, loosely-coupled, and has unprecedented support for user control of data.