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.

Download your Guide to IoT Development

Get Your Copy




What is the Internet of Things?

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:

  • Smart home devices such as light bulbs and thermostats can be programmed to take certain actions, or to turn on and off automatically. For example, you can turn off the thermostat during the day to save energy and money, then turn it back on soon before you arrive home from work.
  • Tiny monitors and sensors attached to manufacturing equipment can detect warning signs and declines in performance before humans even notice them. This helps you prevent unscheduled downtime, plan maintenance work in advance, and make the manufacturing process more efficient.
  • IoT healthcare devices such as glucose meters and blood pressure cuffs can give physicians up-to-the-minute information about the vital signs of their patients.

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.


Developing IoT Products

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:

  • Personalized attention in the form of actions and messages, which can help customers feel happier and more included. For example, the coffee machine at your favorite cafe can start preparing your usual order as soon as you approach the premises.
  • Taking care of the tedium in customers’ lives, such as automatically reordering groceries when supplies are running low.
  • Reducing time spent on customer support. For example, if a “smart car” detects a problem with its engine, it can automatically contact a mechanic to schedule an appointment.

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:

  • Failure is routine: According to a 2017 Cisco report, only 26 percent of companies said that at least one of their IoT initiatives was a “complete success.” What’s more, 60 percent of failed IoT projects stalled very early on, during the proof of concept. If you want to beat the trends and build a successful IoT product, it’s essential that you observe IoT development best practices.
  • Security is paramount: IoT devices range from those that are inconsequential (smart light bulbs) to those that are life-or-death (medical devices). Connecting an IoT product to the Internet potentially exposes your users to hundreds or thousands of vulnerabilities. Your IoT device must be developed according to standards for IT security and web development. In addition, you need to account for privacy laws and regulations about handling users’ sensitive personal information, such as the European Union’s GDPR.
  • Solving the right problem is crucial: Far too many IoT projects fail because they’re poorly defined or don’t solve an existing business problem. Before the initiative begins, make sure that you’ve selected metrics, KPIs, and goals that you’ll use to define the product’s success. You’ll also need to select the right technologies for the job. Could your project benefit from integrating Bluetooth and iOS, or perhaps adding a digital twin?

Building a Facial Recognition-Powered Beer Kiosk System

We worked with Hop to build the world's first self-serve beer kiosk powered by facial recognition technology.

Learn more


The Benefits of Agile IoT Development

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.

The Waterfall Development Model

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:

  • Requirements gathering
  • Analysis and planning
  • Design
  • Development
  • Testing
  • Deployment

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.

The Agile Development Model

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:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

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.

Why Agile and IoT are Perfect Together

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:

  • 1. Validations and constraints: This first stage seeks to validate your assumptions about the project and go over any constraints that you will face (in terms of budget, timeline, staff, etc.).
  • 2. Product development roadmap: The goal here is to construct a plan from the ground up, with the end result being a plan that captures both immediate needs, and a long term vision for the IoT product.
  • 3. Hardware De-risking: This step is when the true development begins. The goal is to eliminate unknowns around the hardware design. Answer questions like:
    • Is it possible to measure/control X with an acceptable level of accuracy?
    • Is it possible to receive wireless communication in the expected operating environment?
    • Is the expected BOM cost feasible from a budgetary perspective?
  • 4. Imitation:  The name of this stage has a double meaning. For hardware, you should have a rough hardware prototype that can reliably imitate the functionality of your desired end product. Think jumper wires and development board. When choosing your development board, choose the CPU/MCU that will be used in your production product, or be sure you are capable of porting your firmware across different chipsets.

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.

  • 5. Full Prototype: The goal of this step is to have your prototype fully connected to the web. You should be able to send data to and receive data from your device, including firmware updates. Your firmware and software should be production-ready (but probably not feature-complete) at this stage.
  • 6. Micro-facturing run: In this step, you’ll create custom printed circuit boards, and 3D printed mechanical enclosures/components. You can then distribute these to your less hardware-savvy software team, to enable testing with actual hardware. However, don’t allow the software team to abandon the idea of proper hardware mocking for automated tests. Once you feel comfortable with giving the device to beta testers, you’re ready to move on.
  • 7. First manufacturing run: This preliminary manufacturing run will create roughly 100 devices that you can distribute to a pilot group of testers. During this stage, you should receive feedback that you can use to make iterative improvements. If you need to make hardware changes at this stage, you can either pause the software team, or have them continue forward on more advanced (non MVP) software features.
  • 8. Real manufacturing run: This stage will produce 1,000 or more devices. The software team should have completed any custom provisioning or calibration software that the manufacturer will need in order to produce your devices. With a healthy group of early adopters, you can get feedback on the user training and onboarding process.
  • 9. Go-to-market manufacturing run: This is it—you’ve finished your first IoT product release! The more products you manufacture, the more you can benefit from economies of scale. Your software is bullet proof, and your hardware has struck the proper balance between cost and functionality. While your company profits on sales from this batch of devices, you can begin developing new hardware products that will easily plug into your IoT system by simply repeating the process again.
  • 10. Simulation with digital twins: “Digital twins” are virtual reproductions of a physical object that you can use for testing and experimentation. They can help you collect more accurate product feedback and reduce the lifetime cost of owning and supporting a device. If your IoT products are more complex than a light switch or a simple sensor, it could be beneficial to invest in a digital twin solution.


The Case for Using Elixir and Nerves in IoT Development

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.

The Elixir Programming Language

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:

  • Data immutability: As a functional programming language, Elixir cannot use mutable data. In other words, variables in one part of the code can’t be changed in another part, creating bugs and unexpected behavior.
  • Concise, testable code: Elixir encourages functions that are small, clear, and easily testable, which is another consequence of being a functional programming language.
  • Process-based: Thanks to its Erlang foundation, Elixir can easily parallelize workloads and use multiple processes at the same time, which adds a significant boost to performance.
  • Fault tolerant: If an Elixir process fails, the failure is contained to that process and that process only. The entire system won’t go down if one user experiences a problem.

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.

The Nerves Framework for Embedded Software

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:

  • A Linux platform that boots directly to the BEAM virtual machine for Erlang.
  • A plug-and-play library of Elixir modules for fast and easy development.
  • A set of command-line tools for managing builds, updating firmware, configuring devices, and other functionality.

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:

  • Credit card payments
  • iPad app
  • Accurate beer flow measurement
  • Inventory tracking
  • User management

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.


3 Examples of IoT Transforming Markets

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.

1. Consumer IoT

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.

2. Industrial IoT (IIoT)

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.

3. IoT and customer experience

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.


Working with an IoT Development Company

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:

  • Technical skills: Obviously, the right technical skills should be your foremost priority when on the hunt for an IoT solutions provider. Firms with experience in software development, web development, IT security, and electrical or mechanical engineering will have all the right expertise to execute your IoT product idea.
  • Communication styles: Some IoT development firms prefer a more hands-off approach, while others are happy to check in with you every day. Whatever your optimal communication style, make sure that you select an IoT partner who can match it.
  • Working patterns: As mentioned above, the agile methodology is highly preferred when developing IoT products. If you’re a stickler for tradition, however, you may prefer a partner who uses the waterfall model.
  • Culture of testing: IoT devices are highly complex, requiring both good hardware and software development practices. Testing—especially an automated testing suite—is essential to ensure that the product remains high-quality throughout the process.
  • Flexibility: Another consequence of this complexity is that requirements and features are likely to change more than once during the project. Your choice of IoT provider should be open to potential changes throughout the development cycle, without being wedded to any particular tool or technology.


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.

Download a PDF of This Content