The Internet of Things (IoT) represents both a massive challenge and a massive opportunity. With IoT devices and revenues projected to double over the next few years, companies that develop IoT products are poised to benefit in a big way.
However, IoT isn’t a gold rush or a “get rich quick” scheme. Diving head-first into IoT development without knowing the best practices is an easy recipe for failed projects and disillusionment.
The good news is that by preparing and educating yourself and your team, you’ll be much more likely to succeed. In this Guide to IoT Development, we’ll go over everything you need to know to make your product vision a reality: best practices, development paradigms, frameworks, potential use cases, and more.
The Internet of Things (IoT) is one of the hottest buzzwords in technology—but what exactly is it? IoT refers to the vast network of interconnected devices that are connected to the Internet in order to share and exchange information in real time.
While IoT includes more “traditional” computing devices such as laptops and smartphones, the term is more frequently applied to hardware that has been enhanced with Internet connectivity. This includes cardiac monitors and biochips, industrial sensors, security cameras, TVs and other smart home devices, and even self-driving cars. In general, any device that has an IP address to send and receive data over a network is considered part of IoT.
By enhancing formerly “dumb” devices with Internet connectivity, IoT aims to make your life simpler, easier, and more efficient. Here are just a few examples of how IoT can impact the way we work, play, and live:
Regardless of how you use it, one thing is clear: IoT is growing at a nearly incomprehensible speed. According to research and advisory firm Gartner, 2017 was the first time in history that the planet had more IoT devices (8.4 billion) than human beings. What’s more, Gartner predicts that this number will skyrocket to 20.4 billion by 2020.
Meanwhile, management consulting firm Bain & Company predicts that the global IoT market will more than double in just 4 years, from $235 billion in 2017 to $520 billion in 2021.
IoT products have the potential to transform every aspect of your business, from operations and processes to customers and outcomes.
Let’s say that you’re looking to improve your customer experience. IoT devices can help in many different ways:
Even industries that are not typically recognized for technical innovation, such as agriculture and construction, are seeing benefits from clever application of IoT products. For example, IoT-enabled tractors can receive location data from all vehicles in the fleet, ensuring that they don’t overlap when seeding or fertilizing the soil.
With much of the market still unsaturated for IoT devices, now is the perfect time to get into IoT development. Before you get started, however, we want to note a few important concerns:
There are two main software development approaches — Agile and Waterfall. The waterfall methodology takes a linear approach to software development, with a sequence of events that each represents a distinct stage of software development. The Agile methodology was created as a direct response from critics of Waterfall who felt that there was too much room for problems to remain unnoticed until the project neared completion. With Agile development, teams break each feature into the smallest discernible chunk of work and produce incremental value over time.
For decades, software and hardware was mainly developed according to the waterfall model of product development. In this paradigm, development proceeds sequentially from one stage to the next, like a waterfall cascading over a series of steep drops. The project moves to the next stage only when the current stage is correct and complete, which means that there can be no returning to a previous stage.
The stages of the traditional waterfall model include:
With the waterfall model, the end goal is defined early and the entire process is laid out from beginning to end. Superficially, this seems to provide some greatly needed clarity and organization to the project.
However, it’s not hard to see the flaws with the waterfall model. For one, its structure is highly inflexible. If you encounter a major issue halfway through the process, or you decide to expand the project’s scope, you might have to start over from the very beginning. It also has no room for making updates or revisions based on feedback from clients and users.
In addition, testing is only performed once the project is nearing completion. As such, project members cannot be certain that they have a viable working product until very late in the life cycle, which makes the waterfall model highly risky.
The main problem with the waterfall model of development is that it doesn’t reflect how most people complete their work in reality. By discouraging exploration, experimentation, and iteration, the waterfall model reveals itself to be highly flawed.
Software development differs from physical engineering, fabrication, and manufacturing because, when done correctly, it is much easier to completely demolish sections of the current product, and construct new ones in a relatively short amount of time. Because the code base remains in the possession of the engineering team, it’s possible to make sweeping changes that instantly upgrade the experience for all users. Most stakeholders have a hard time grasping this reality, since it’s akin to an automotive manufacturer instantly swapping new engines into all of its cars currently on the road.
Because of these differences, the optimal process for designing and building software systems is very different from designing and building physical systems. Software can change and adapt as the needs of stakeholders change or as unforeseen difficulties arise, if you follow a process that allows your team to do so.
Partly in protest against the rigidity of the waterfall model, 17 software developers published an “Agile manifesto” in 2001. The document articulated a set of values and principles that the authors wanted to emphasize for product development. In particular, the manifesto’s authors expressed their preferences for:
These ideas became the foundation for the agile development methodology, which we’ve adopted here are Very. “Agile” (as its practitioners call it) prioritizes flexibility, speed, collaboration between cross-functional teams, and continual improvement through iterative development.
Agile separates the development process into discrete time periods called sprints, which typically last between 1 and 4 weeks. Each team member has a set of tasks that must be completed during the sprint. These tasks are delegated during a planning meeting at the beginning of the sprint. In addition, team members hold daily “stand-up meetings” to discuss their progress and brainstorm solutions to any problems they encounter.
These changes in how product development is practiced have a radical effect on the final results. Unlike waterfall, agile development is built to withstand change and even embraces it. In addition, agile produces a working product as early in the process as possible, and places a heavy emphasis on user testing and feedback.
Agile, rather than waterfall, is the clear choice for developing IoT products. In particular, agile is the preferred development model when building a minimum viable product (MVP). The MVP is an initial proof of concept that demonstrates the viability of your idea and provides a sounding board for user and client feedback.
Returning to a previous analogy, suppose that you want to design and manufacture a car from scratch. Traditional models of development would have you design and build components such as the engine and chassis in parallel. However, this method wouldn’t deliver a working product until very late in the process.
Instead, think about why you’re actually building the car: to have a means of transport from place to place. As such, you would first start by creating an MVP with the basic ability to transport users (e.g. an electric skateboard), and then iteratively add features, building intermediate products along the way (e.g. scooters and motorcycles). Though this seems expensive and time-consuming with physical products, it’s the most efficient way to build an IoT solution.
Yes, IoT solutions do involve physical products, however, a proper IoT solution is agnostic with respect to any particular piece of hardware, and therefore is more analogous to a software system. When planning an IoT solution, look at your problem from the broadest possible perspective. Most likely, you will realize that simple, commodity hardware will solve your immediate need, if the software performs properly and provides the ideal user experience. Once the proper software infrastructure is in place, swapping in new hardware designs will be simple, allowing for extraordinarily fast product release cycles.
One drawback of agile development is that it’s difficult to implement correctly—but the effort is well worth the cost. Below, we’ll go over the 10 key steps of an agile IoT release:
For (web and/or mobile) software, you should begin building the critical components around device provisioning, authentication, firmware updates, and basic message passing between the web backend and the device. Your software team should “imitate” or “mock” the interactions with the device within their software testing tools in order to proceed without a physical device.
You may have a vision in mind for your IoT product development, but how exactly will you get it done? With so many possible languages, frameworks, and libraries available, the hardest problem of all might be knowing where to begin.
One big challenge is that IoT devices and ecosystems require a vast range of knowledge in four areas: hardware, firmware, mobile development, and web development. Specialists in one field rarely have deep experience with another field, although that doesn’t stop them from sometimes trying to fill in the gaps themselves anyway.
In addition, embedded software technologies still lag far behind web-based software technologies. Trying to make embedded C code fit into the world of web development is like the proverbial square peg and round hole.
Due to these issues, the IoT landscape is fraught with half-baked products—with a good idea and good intentions, but without the execution to back them up. Many current IoT offerings are difficult to use or stricken with security flaws.
With all these problems in mind, what can a fledgling IoT developer do? Allow us to make a suggestion that we’ve tested through experience: Elixir and Nerves.
Even though it’s less than a decade old, Elixir has a lot to offer. Elixir’s creators describe it as “a dynamic, functional programming language designed for building scalable and maintainable applications.”
The Elixir language uses Erlang, another functional programming language that’s been around since 1987, as its foundation. As a result, Elixir developers can use any Erlang library, which gives you a lot more flexibility despite the relative newness of the language.
Erlang gives Elixir the hardware-centric features that make it perfect for robust embedded firmware. Originally designed for low-level, remote hardware applications, Erlang has the reputation of being fault-tolerant and highly available. It also supports “hot swapping,” which is the ability to add and change program code while the program is running.
Besides its Erlang foundation, there are many benefits to using Elixir, including:
Thanks to these traits, Elixir is particularly well-suited for systems that have large amounts of traffic and many different connections. Of course, this makes it ideal for IoT development.
If the benefits listed above aren’t enough to seal the deal for Elixir, Nerves is yet another selling point.
Nerves is a framework for building embedded software in Elixir using the ideologies of web development, including tools for secure communication with web servers and tools for continuous delivery. One feature that makes Nerves an especially good fit for IoT development is NervesHub, an extensible web service for managing wireless firmware updates of devices in the field.
Nerves is made up of three main components:
Here at Very, we’re eager to capitalize on the many advantages of using Elixir and Nerves—which is why it’s our go-to solution for firmware that has multiple or complex responsibilities.For example, we recently used Elixir and Nerves to build a self-service IoT beer kiosk that uses facial recognition technology to confirm that the buyer is of legal age. Once customers are manually verified by an on-site “bartender,” they can return to the kiosk without having to flash their IDs every time.
The system included features such as:
As a full-stack firmware solution, Nerves was able to take a great deal of work off our hands, from firmware updates to packaging the application code.
The self-service beer kiosk is just one idea for an IoT product that can revolutionize its industry. In this section, we’ll discuss a few more ingenious IoT use cases.
Very recently partnered with Koller Products to build the world’s first Internet-connected desktop aquarium. Using a mobile app, pet fish owners can remotely check the tank’s temperature, adjust the color of the aquarium lights, change the daily lighting schedule, and more.
Building the Smart Tank for Koller required Very to unify its knowledge of hardware, firmware, and software to bring the product to life. Thanks to a series of sprints and daily meetings at the project’s outset, Koller and Very could easily build a clear product roadmap. Very’s developers used their talents in C++, React Native, and iOS/Android development to deliver a mobile app that met the client’s needs, desires, and objectives.
IoT is projected to have a major impact on people’s homes and workplaces, but it’s also expected to shake up the manufacturing sector. The use of IoT in manufacturing and industry is called Industrial IoT (IIoT).
For example, IIoT devices facilitate the use of digital twins by making it easier to collect and curate information about a device’s current status and performance.
GE’s Predix platform has been used to deploy nearly 1 million digital twins for everything from jet engines to power turbines. With 24 sensors tracking thousands of parameters on each engine, companies can build intricate virtual models of an individual engine in order to predict its behavior and schedule preventive maintenance.
IIoT devices also help improve workers’ efficiency, safety, and productivity by monitoring their behavior while on the job. For example, Australian construction firm Laing O’Rourke has introduced IoT smart helmets that monitor employees’ body temperature and heart rate, as well as weather conditions, in order to alert them when they’re at risk of heatstroke.
IoT products can improve the lives of not only your employees, but also your customers as well. By gathering data from a variety of smart devices, you can provide an excellent, transformative customer experience.
Personalization is one area where businesses stand to gain from deploying IoT devices. For example, regular customers at a local café might receive a text from the “smart” coffee machine asking if they’d like their usual order ready for them tomorrow morning.
Consumer IoT products promise to remove much of the tedium of daily life. Smart refrigerators and pet food dispensers might contain sensors that automatically reorder your favorite brands when you’re running low. Meanwhile, smart cars can detect potential part failures before they actually occur, and then contact a mechanic to set up a service appointment.
"I wanted a company to work with that stands behind the work they do, will be there to help with future development, and ultimately the firm that had the most experience. That’s why I chose Very."
Without the technical chops to make your concept a reality, your IoT product idea will remain just that—an idea. The very good news is that you can still deploy an IoT product by partnering with an IoT development firm with the right knowledge and experience.
However, there are a lot of IoT partners offering their services, which may be of highly variable quality. So how can you hope to choose the right one?
In order to maximize your chances of a successful IoT product rollout, you need to perform your due diligence when choosing an IoT partner. Some of the top traits to look for are:
The world of IoT development holds enormous promise for companies that are willing to take risks and get wet. With the current rate of failure for IoT projects, however, selecting the right partner is a make-or-break moment for your IoT vision.
If you’re ready to jump into IoT development, our team of knowledgeable, experienced developers can help. We can handle every aspect of your IoT project, from design and prototyping to engineering and programming. To learn more about what we have to offer, check out our IoT application development page, or get in touch for a consultation.