Exploring the Internet of Things
A Guide to Preparing for the Coming IoT Revolution
(Produced as ebook copy for SmartBear Software, November 2013)
Introduction
There’s a provocative vision of the year 2026 in a story from Ray Bradbury’s Martian Chronicles titled “There Will Come Soft Rains.” First published in 1950, the short six-page tale features no living characters—save for a lone, gaunt dog—but is nevertheless packed with action, intelligence, and poignant social commentary. Tiny robotic mice dart out to clean the carpets, pancakes and eggs are prepared for breakfast by kitchen appliances, a children’s nursery transforms itself at naptime into a colorful virtual jungle, bathtubs fill themselves at the appointed hour, and beds adjust their warmth to accommodate the nighttime temperature. It all happens automatically, day after day, within the last surviving home in a city destroyed by an atomic bomb—until the house finally catches fire and burns to the ground, leaving only one automated wall standing, its computerized voice chirpily announcing another new day to no one.
Nuclear holocaust aside, it’s a prescient depiction of what we now call a “smart house,” which is just part of a larger trend devoted to turning everyday objects and appliances into intelligently optimized extensions of our digital lives. It’s a phenomenon that has been widely dubbed “the Internet of Things” (IoT), and over the next few years its goal of wiring together every object in our world is going to be increasingly hard for software developers, testers, and IT engineers to ignore.
We already take our smart phones for granted, but what about smart watches and smart pens, smart cars and smart ski goggles? Everything around us is becoming connected to the net and imbued with code at an accelerating pace, and within the next decade the world as we know is going to be wired in ways that even Ray Bradbury’s vivid tale of a fully automated house couldn’t foretell. His household appliances sprang into action at a certain preprogrammed time of the day, but it’s unlikely anyone writing in 1950 could have imagined that you’d one day be able to instruct your GE BrillionTM oven to preheat itself from a device in your pocket while you were out finishing your grocery shopping in town. His story features an intelligent nursery with soothing sounds and nature scenes projected on the walls, which seems cool enough until you hear about MimoTM, an intelligent onesie for infants that delivers updates to parents’ phones about their child’s breathing patterns, temperature, sleeping position, and activity levels, along with a machine-washable built-in audio baby monitor.
These real-world examples are just the tip of the IoT iceberg, which is rapidly rising above the murky surface of the technological sea, inspiring consumers with its smooth, sparkling vision of the future, and causing product designers, business leaders, and legal teams everywhere to sit up and take notice, lest their supposedly innovative companies crash into it unawares.
Are you and your company ready for the Internet of Things? A world in which virtually all objects, from your shoes to your refrigerator, will be connected to the net and transmitting data, 24/7? If you work in software development or IT you’re going to want to be prepared, because the IoT train shows no signs of slowing down—and the route ahead is anything but clear.
In the following pages, we’ll examine the state of the Internet of Things, look at a few of the major projects already underway, and consider some of the technical challenges that will undoubtedly be creating more than a few headaches in the years to come.
The State of the IoT World
In October 2013 in Barcelona, Cisco hosted a conference they billed as the first annual Internet of Things World Forum and created sharable infographics to help promote their company’s excitement for the trend, which CEO John Chambers described as “the fourth wave of the Internet.” Not to be outdone, Machine 2 Machine magazine convened a second IoT “World Forum” in London a couple of weeks later. In the past couple of years, the IoT trend has been covered in depth by everyone from Wired to the New York Times Magazine, with dedicated tech sites like ReadWrite devoting continual coverage to all aspects of the emerging IoT marketplace. The IoT emergence is, in fact, a very broadly defined field, spanning everything from smart houses, cars, tools, and appliances to automated manufacturing processes and the growing masses of wearable-computer-enabled “quantified selves.”
By all indications, we’re soon going to be living in a world in which the distinction between the online world and the physical world is rendered increasingly meaningless. With Augmented Reality (AR) tech like Google Glass already blurring the divide, freeing our attention from its absorption in 2D glowing rectangles, the Internet is going to permeate our lives in a whole new way when it’s infused in nearly every physical object we interact with. And the potential of this fact to disrupt life—and business—as we know it is profound.
A recent report from the market research firm IDC predicts that by the end of 2020, “the installed base of the Internet of Things will be approximately 212 billion ‘things’ globally,” including 30.1 billion of those “installed ‘connected (autonomous) things’” appearing just in the year 2020 alone. Cisco offers a more conservative estimate of a mere 50 billion devices by the time 2020 rolls around, with an online counter on their website ticking away second by second, adding up the ever-growing number of “people, processes, data and things connected to the Internet” based on their projections (numbers that Morgan Stanley has recrunched to arrive at an estimate of 75 billion by 2020). No matter whose prediction you choose to run with, it’s clear that we’re going to be seeing a lot of Internet-enabled things in the next few years.
IoT by the Numbers
The accelerating growth of mobile phones, tablet computers, and other Internet-enabled devices is fueling the need for digital connectivity across all industries. This increase in connectivity will be possible thanks to the implementation of IPv6, the latest iteration of the Internet Protocol (IP), which is the universal communications standard for identifying and facilitating network connections across the web.
Analysts predict that by 2016 there will be nearly 18.9 billion network connections worldwide―almost 2.5 connections for every person on the earth―compared to just 10.3 billion in 2011.
And by the year 2020:
- There may be somewhere between 50 billion and 182 billion objects connected to the Internet.
- Every product over $100 might be “smart.”
- The overall business impact of nontraditional Internet-enabled devices, including cost savings across all industries benefiting from IoT technology, could create an economic infusion of $4.5 trillion.
According to projections by GSMA, these are the top ten industries that will benefit from IoT, accounting for a full 60 percent of global business in 2020:
Top 10 Connected Applications in 2020 Value (USD) 1. Connected Car $600 billion 2. Clinical Remote Monitoring $350 billion 3. Assisted Living $270 billion 4. Home and Building Security $250 billion 5. Pay-As-You-Drive Car Insurance $245 billion 6. New Business Models for Car Usage $225 billion 7. Smart Meters $105 billion 8. Traffic Management $100 billion 9. Electric Vehicle Charging $75 billion 10. Building Automation $40 billion
Naturally, every last one of these objects, machines, services, or automated processes is going to require stable software to function. That’s why companies such as ours are avidly tracking the ascent of IoT, which already poses greater problems—and potentials—for smooth webserver performance and software compatibility than anything we’ve encountered to date. The security and privacy risks posed by all devices being remotely accessible are enormous, to say the least, making clean, secure code increasingly important; and having so many devices connected to each other is going to make preventing load bottlenecks more relevant than ever. At this early stage it’s simply impossible to predict the many ways in which developers and testers are going to be affected by the IoT revolution, but that doesn’t mean we shouldn’t strive to find out. Let’s look at some of the ways in which the Internet of Things is changing the way both developers and IT engineers do business, and how the IoT vision of leaving no stone unintelligent is going to be creating a brave new world for us all.
How to Prevent a Google Car Pileup
Whether you’re used to programming iOS apps, MMORPG games, e-commerce websites, or securing corporate databases; whether you enjoy coding payment gateways or prefer to spend your days ensuring that the latest Android phone’s GPS plays nicely with your new health-tracking wristband; the fact is, there is almost no conceivable variety of programming experience that will remain untouched by the IoT revolution in the coming months and years. Smart watches will want to talk with smart clothing. Smart cars will want to talk with other smart cars. Smart blenders will touch base with your dieting app, refusing to let you make another chocolate milkshake if your caloric intake for the day is over the line. And every device and program is going to want to talk with your smart phone.
If you’re a developer in pretty much any field, it’s time to get creative. But if you’re someone who works regularly with APIs or machine-to-machine communications, may the digital gods have mercy on your soul.
Your world of smooth-talking software is about to get complicated.
Married Devices and Communication Issues
If you’ve ever spent way too much time trying to get an ordinary Apache server to communicate with an ordinary MySQL database properly, battling through port conflicts that shouldn’t exist, then you know that even in the best of circumstances the Internet can be an unruly beast. Never mind any number of API issues that keep programmers continually scratching their heads. Now, plot a few years of frustration on a rapidly ascending exponential curve, and you may be able to appreciate why, despite its tremendous promise, the IoT revolution is going to take a little while to fully manifest. When we have so many devices that are potentially capable of talking with each other, we’re just asking for communication trouble. And a failure to communicate is the main obstacle currently blocking the path to a robust IoT future.
Some enterprising startups are starting to take a crack at the problem with simple Event-Condition-Action controllers, such as WigWag, an Austin, Texas-based project that recently hit its Kickstarter goal (and then exceeded it by a cool $400k). WigWag consists of a smartphone app that communicates with proprietary sensors placed around the house, which detect environmental changes—such as the opening of a closet door, a bedroom light being left on, or someone snooping around your back porch at night—and then perform easily programmed actions, like sending you a text notification, turning off the light, or sounding an alarm. Its main selling point lies in its diverse functionality and ease of use, with a nicely designed user interface and if/then commands that even the least tech-savvy iPhone user can program. “WigWag,” says its founders, “is about making intelligent decisions—to make automated environments convenient, not annoying.” What seems most significant, however, is WigWag’s ability to communicate with third-party components, such as Belkin WeMo electrical outlets and Philips Hue light bulbs. And it aims to expand its circle of inclusion by communicating through one of the most common languages of all: Javascript. As the developers explain:
DeviceJS is an open-source runtime for executing Javascript. It is built on Google V8 and Node.js. Anyone who knows anything about programming should be able to start hacking things in the physical world easily. WigWag uses the same language and many of the same programming patterns that drive millions of web pages today.
As an affordable and well-designed way for consumers to finally enter the smarthome era, WigWag may be in a class of its own. But even if multipurpose devices like this, running on a universal standard like Javascript, begin to resolve some of the communication issues posed by an emerging panoply of smart devices, we’ve only won half the battle. The other half is making sure that the very basis of communication itself—i.e., code—actually makes sense to begin with.
Squashing Bugs in Autonomous Cars
Consider a simple equation:
A + B = X
Where A = Apple Maps, B = a self-driving Google Car, and X = a trip to the emergency room.
Yes, Apple Maps has steadily improved over time, but its disastrous initial deployment deserves at least a few more years of jokes, and the point should be clear. If you couple autonomous, “smart” hardware with glitchy software, you’re asking for a world of hurt. Of course, if the smart device in question is just a light bulb that should turn on when you enter the hallway at night, badly written code might only result in a stubbed toe. But if it’s a smart oven, smoke alarm, or fire sprinkler system we’re talking about, human lives may be on the line. Ordinary app developers could suddenly find themselves needing to take the same precautions, and engaging in the same degree of testing and code review, that software engineers for airline autopilot systems (and their insurers) already require.
Moreover, with smart cars or smart medical monitors, one glitch in the matrix can obviously result in serious problems, but potential disaster lurks around every corner in the IoT world, no matter how innocent any particular smart device may seem. Why? Because the whole point of the IoT vision is that all those individual devices are connected, networked, like the countless servers that support the web. One bad link in the chain can lead to a systemic failure, as the smooth interactions between devices start to become more important than the functioning of the individual devices themselves.
The Google Car, again, offers an easy example. With autonomous vehicles ruling the road, one of the biggest benefits will be found in the ability of cars to form tightly knit highway caravans, driving closely together in packs that reduce the drag coefficient on individual vehicles by creating slipstreams, just like professional cyclists’ drafting techniques. Intelligent automobiles driving more closely together—and reacting more quickly—than human drivers can handle will undoubtedly safe time, fuel, and greatly increase traffic efficiency. But what if just one of the cars in a massive commuter caravan has buggy traffic-sensing software installed? Perhaps the neighboring cars’ rapid reflexes would navigate it successfully, but if not, then the resulting pileup could be disastrous, making its hapless participants yearn for the days of mere four-car collisions, like the self-driving Prius incident reported by Jalopnik to have occurred outside Google’s Mountain View, California, headquarters in August 2011.
Clearly, in an IoT world clean, carefully written code, proper code review, and continual testing are going to be more vitally important than ever before.
Warning: Continuous Deployment Required
If we continue with the example of smart cars, the need for smart infrastructure soon becomes apparent as well, so that traffic lights and vehicles will be speaking the same language (some even suggest the need for smart pavement too). What’s also obvious is the necessity of either universally regulated software standards or robust and adaptive APIs, in order to avoid having too many upstart traffic-nav programs trying to outperform each other when they should be communicating nicely instead. After all, given the large-scale physical devices involved—from cars to appliances—creative competition and innovation may often need to take a backseat to safety standards and legal regulations in the IoT world.
Yet even if every car on the road is running Google Nav software, it won’t really work if users are permitted to update their software manually, inevitably resulting in bugs and outmoded software remaining on the road for years after fixes have been released (IE6, anyone?). No, updates will need to be pushed, perhaps multiple times a day, to all users at once in order to ensure that programming errors are eliminated as soon as they’re spotted and that this literal “information superhighway” keeps traffic running smoothly and safely. Software monitoring will be critical as the art of continuous deployment—and the tremendous benefits it offers for instant rollbacks and daily, incremental improvements—becomes business-as-usual for the Internet of Things.
Based just on these examples alone, it’s clear that the IoT emergence poses no shortage of challenges. Yet its early incarnations are already here, so we might as well get good at it. And once we overcome some of the major hurdles, it’s undoubtedly going to be a whole lot of fun.
Performance Testing As If Your Life Depended on It
As you can see by now, we’re soon going to be living in a world where ordinary objects and machines, from personal earbuds to corporate water treatment facilities, are increasingly programmable, “smart,” and absorbed within the ever-expanding definition of the Internet. In the previous section, we explored the need for careful code review to ensure that our newly wired world communicates with itself smoothly. Let’s turn now to a related concern for the future of the IoT: Testing and monitoring software performance as if human lives depended on it.
Software development is already a highly competitive marketplace. But in a world where software is running literally everything—from toothbrushes to toasters to T-shirts—the stakes for quality control are significantly higher. Today a broken app may result in a few negative reviews; tomorrow it may result in broken bones. A single buggy program could easily sink your company. Worse still, it could sink an autonomous ship.
Yes, perhaps the most worrisome problem with the “smartification” of objects, machines, and appliances is that entirely new kinds of safety concerns abound—especially if the objects in question are so smart that human beings willingly relinquish control to them, putting their lives in the hands of machines (and, by extension, the infrastructure supporting those machines). Again, if you have a fleet of autonomous cars happily driving people on their morning commute and just one of them is running glitchy software, that single bug could cause a major pileup. But the dangers of smart cars are just the beginning.
In an IoT world, problematic software could be lurking anywhere, in anything, just waiting to strike back with litigation at the hapless company that fails to properly test and continually monitor its web-connected applications and services.
Just imagine…
A Day in the Life
It’s September 2018, and you’re walking briskly down the street on an icy fall morning in Boston, feeling perhaps a little too warm in your climate-controlled jacket. Your shoes transmit basic health tracking data as you walk, registering your steps and burnt calories in your heads-up display—a function of your augmented-reality contact lenses. You’re late for work, so you raise your hand in the air and click a button only you can see, providing your colleagues with a precise estimate of your arrival time as you continue to Skype with them while you walk. Shifting your gaze to the left side of your field of vision, you focus on an app representing your office. It opens to reveal a number of options within it, and you focus on the coffee icon, selecting your usual setting, and decide to explore the main kitchen icon as well. The alarm you set on your smartwatch didn’t go off this morning for some reason, and your own kitchen at home had failed to make you breakfast again. Hungry and irritated, you take comfort in knowing that a mile away at the office, a coffeemaker, toaster, refrigerator, and the new countertop grill in the company kitchen are now proceeding to get to work.
What you don’t realize is that halfway around the world in Taiwan, most members of the team that created the new autonomous grill have all gone to bed, including the performance monitoring crew. This is only a problem because they’ve also failed to run their automated load-testing software for the ninth day in a row while they’ve turned their focus to other projects. Moreover, earlier this week sales of the smartgrill surpassed the company’s most optimistic projections, resulting in a user base greatly exceeding anything the website and cloud server attempted to tackle in the various testing scripts. Even now, as the QA team sleeps, thousands of users around the world are emailing the customer service department, complaining of waking up to uncooked eggs due to sketchy server connections and 503 errors. And a few emails contain reports of slightly more dire issues.
As you continue to walk down the street, sharing your thoughts on yesterday’s presentation with your colleagues, you hear one of them coughing over Skype, and then another. An alarm starts screeching loudly and you cup your hands tight over your ears. The office kitchen icon in your visual display is flashing red, and you feel a sudden rush of anxiety, stopping dead in your tracks as you hear your officemates screaming. Not for the first time, you wonder if all of the world’s “smart” technologies are personally conspiring against you.
The Moral of This Story
Although this tale may be just a tad melodramatic, it’s definitely not outside the realm of possibility. In fact, once we’re living in a world where we have upwards of 212 billion devices connected to the web, with new ones being deployed all the time, the possibility of incidents like this one should be expected.
But they can also be prevented.
Rigorous functional testing and performance monitoring may not always be the highest priorities when you’re producing multiple websites or video games on tight deadlines, as rushed schedules often take precedence in the quest for a solid financial ROI. But even if some companies fail to perceive what is, to us, an obvious correlation between high-quality software testing, rate of adoption, corporate reputation, and financial success, a focus on quality must become a priority whenever you’re dealing with software that can potentially affect the safety and welfare of other human beings. And in the IoT world, the number of devices and ordinary household objects that might prove unexpectedly dangerous once infused with potentially glitchy “smarts” will probably be greater than we can even anticipate right now. Will smart clothing have hidden dangers? Smart lightbulbs? Smart bicycles? Even if you’re not a product designer or engaged in writing home-appliance firmware, if you deal with any of the websites, apps, or server-side programming that will connect or communicate with such devices, then these concerns need to become yours too.
Once you’ve tested your new smart product thoroughly, squeezing all bugs out of your newly minted code and releasing it into the wilds of the consumer or enterprise marketplace, the importance of an ongoing testing and performance plan should become obvious. After all, in an IoT universe, maintaining your projects after they launch is, in some ways, more important than getting them to market in the first place. If you can’t keep up, if your software products can’t adapt, evolve, and learn to deal with stresses they weren’t originally tested to handle, then they will quickly fall by the wayside and lose their stake in an industry that Cisco estimates will soon be worth trillions of dollars annually. Plus, poorly maintained programs may cause genuine problems along the harrowing lines explored in good sci-fi fashion above, necessitating new safety regulations, government interventions, and the lawsuits that all too often accompany such consequences. And no one wants that, do they?
That’s why, in the Internet of Things, proper functional testing will be required to ensure that your software simply works as advertised, keeping you competitive, while ongoing performance testing and monitoring will ensure that it continues to work properly, keeping your end-users happy: safe and sound in a strange new world remade in the image of the web.
At least, this is the ideal, smooth-sailing IoT future that we’re invested in helping to foster by creating the tools to catch small errors before they become major problems. The question for developers and testers everywhere is: How invested are you?
The Internet of Things . . . and You
Throughout this brief overview, we’ve looked at some of the ways in which the rising wave of smart, Internet-enabled objects will dramatically transform the worlds of software engineering and testing as we know them. We’ve talked about smart cars and smart ovens, smart baby clothes and smart water treatment facilities—as well as the tools that will help intelligent objects to communicate and connect. And, of course, this wouldn’t be a brave new world if we didn’t explore some of the potential problems that may arise in a world overrun by apps and the endless objects they control.
Indeed, the IoT onslaught has very clear downsides, particularly regarding security and safety, when it comes to the sheer data-overwhelm that will soon be upon us. But if you happen to work for a government intelligence agency, there’s a silver lining to this cloud, as the privacy-thwarting tools of spycraft—like embedded cameras and microphones and 24/7 activity tracking—begin to pervade every home, public space, and office environment in the world, generating terabytes of big data to fill that shiny new NSA facility in Utah (whose welcome sign warns, ominously, “If you have nothing to hide you have nothing to fear”).
As for the ordinary IoT consumer, it all promises to be eminently practical and to dramatically streamline life, as Corning’s popular “Day Made of Glass” YouTube video series suggests.
Still, no matter how you personally choose to parse the promise and perils of our imminent IoT future, anyone involved in software development can at least be certain of one thing—namely, that everything from smart rings to smart door locks will soon be putting entirely new demands on your time and talents. Whether you spend your days monitoring server performance or coding apps, the IoT revolution will soon be testing everyone’s patience as intelligent objects increasingly roll into our daily lives and, slowly but surely, learn to play well with other smart things. As with all genuinely disruptive technological innovations, one should prepare for more than a few bumpy roads ahead.
That’s why software companies around the world are sitting up and taking notice, ensuring that the Internet of Things is helped along as efficiently as possible through its formative years. And in many ways, the potential problems posed by the IoT field are no different from those confronted by developers and testers every day. As we all know, experimentation and trial and error define the vast majority of software development, with occasional bursts of creativity fueling the process along. Every new project is its own unique beast waiting to be tamed, and we shouldn’t expect that developing the programs that make smartwatches tick should be all that different from building any other app. With the Internet of Things, the biggest challenge encountered by software developers and testers will, in all likelihood, simply be one of scale.
There are, after all, billions and billions of devices on the way.
But with the right software in your toolkit, your engagement in this fast-paced world can be made that much easier, and your own intelligence and creativity made to flourish—liberating your personal time and talents in all the ways that quality-assurance software exists to serve. Judging by the evidence all around us, it’s safe to say that the current excitement surrounding the Internet of Things is more than just tech-industry hyperbole, portending a genuine new era of rapid innovation. And all of us at SmartBear are sincerely excited to be playing a crucial role in helping to bring its most positive manifestations for our industry, our society, and our shared global future into being.