Developing embedded software is not as simple as it used to be. Creating a standalone device was and still often is challenging for many development teams. In the IoT age, in which we are starting to connect absolutely everything—including toothbrushes—system complexity is skyrocketing. The traditional, disconnected developer is finding that there are multiple new challenges that need to be addressed in order to achieve success:
Challenge #1 – Connectivity
It sounds simple, but there are so many different ways to connect to the internet. Developers could connect through WiFi, Ethernet, cellular, LoRa, a Bluetooth bridge, and many other sources. Each has its own advantages and disadvantages along with different software stacks that developers need to learn and understand to get the hardware working. This doesn’t even cover the other software considerations on what protocols to use, such as UDP, COAP, TCP/IP, and several others or whether to use multiple protocols simultaneously. There’s then the challenge of learning and using TLS and/or MQTT and understanding how that all works when you throw in a server. Sure, developers can use pre-existing software stacks to help decrease the challenge, but they still need to understand what’s happening just in case something breaks or needs to be modified.
Challenge #2 – Over the Air-Updates
Now that the device is finally connected to the internet, we can remotely update its firmware, which sounds like a great idea. With a standalone device, developers used to just post a new firmware image to a secure site and then email all of their customers to “come and get it!” With the IoT, software updates are just expected to miraculously appear and be performed on their own. Even in a small deployment involving several thousand devices, developers need to figure out how to:
- Generate a firmware update job
- Secure their updates
- Validate that they are coming from a trusted source
- Roll back the update if there is an issue
- Determine when it is appropriate to update a device
This is all time-consuming, tricky business that developers now need to understand in order to successfully deploy their product.
Challenge #3 – Security
Connected devices are now so well connected that anything on the internet can see them. As a result, developers need to not just learn about how to connect, but also how to secure their devices from security threats that are ever-evolving and becoming more sophisticated. Security isn’t something that can just be added to a system at the end of the design cycle. And it's not something that can be learned overnight. Careful thought needs to be given into how the system is partitioned, isolated, and what information needs to be protected. Developers need to clearly identify how secure their system needs to be. The security on an electric toothbrush will undoubtedly be far less than the security on a smart meter.
Challenge #4 – Debugging
As more teams build connected devices, complexity increases. The amount of time spent debugging will most likely increase as well. As open source software and other software packages are integrated, strange and new behaviors will surely result in the system unless they have all been designed to work together in the first place. Embedded surveys have shown that developers on average already spend 40% of their time debugging. Debugging takes a lot of time and money on every embedded project. For this reason, it’s important that developers understand all the debugging techniques available to them and how to prevent them in the first place.
Challenge #5 – The Rate of Change
It may have just been me, but for the first 10 years of my career, it felt like the way we designed embedded systems and the technologies that we used were relatively the same. Sure, a more powerful processor would come out each year, but the improvement was incremental. Within the last five-plus years, there has been a big jump in the available technologies and what they need to do. It started with connectivity, but it’s rapidly expanding to not just security, but also artificial intelligence and systems. Developers are starting to find that the technologies available are changing faster than they can learn them.
These are the major challenges that I see development teams struggling with as they start to transition from designing standalone devices to connected devices. These challenges certainly aren’t insurmountable. In many instances, solutions already exist in a variety of forms. The trick becomes how developers and teams get up to speed and then maintain these new skills that every developer needs.
Are there other challenges that I’ve overlooked? Please comment on the challenges you're facing in your design and what sources you are using to try to overcome them.
Jacob Beningo is an embedded software consultant who currently works with clients in more than a dozen countries to dramatically transform their businesses by improving product quality, cost, and time to market. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees, which include a Masters of Engineering from the University of Michigan. Feel free to contact him at firstname.lastname@example.org, at his website www.beningo.com/, and sign-up for his monthly Embedded Bytes Newsletter.
Today's Insights. Tomorrow's Technologies.
ESC returns to Minneapolis, Oct. 31-Nov. 1, 2018, with a fresh, in-depth, two-day educational program designed specifically for the needs of today's embedded systems professionals. With four comprehensive tracks, new technical tutorials, and a host of top engineering talent on stage, you'll get the specialized training you need to create competitive embedded products. Get hands-on in the classroom and speak directly to the engineers and developers who can help you work faster, cheaper, and smarter. Click here to register today!