Embedded - 428: Sprinkling a Little IoT

Episode Date: September 22, 2022

Jonathan Beri spoke with us about the different IoT development tools and how to categorize them.  Jonathan (@beriberikix) is the CEO of Golioth (@golioth_iot). He wrote a blog post called An Introd...uction to The Five Clouds of IoT, breaking the clouds into individual clouds: device, connectivity, data, application, and development. Jonathan was previously on Embedded 222: Virtual Bunnie when he worked for Particle.io. A partial list of the IoT tools we mentioned: ThingsBoard Freeboard Grafana Ubidots  Renode Memfault Golioth Particle.io  Node-RED Soracom Hologram.io   See also A list of IoT platforms – Systev post mentioned in the show (also Building The Infinite Matrix Of Tamagotchis | Hackaday).   Transcript

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to Embedded. I am Elysia White alongside Christopher White. We've talked about Memfault. We've mentioned Reno, Dio, and maybe UbiDots and Goliath and Particle. And I have just discovered these are all Pokemon and that we need to collect them all. And Jonathan Berry is going to help us unravel which one will win at which Pokemon towers. Is that right? Maybe if the Pokemon have antennas in their tails?
Starting point is 00:00:42 More seriously, we're going to talk about the Internet of Things and the tools that we can get around the internet of things. They are not, in fact, Pokemon. How are you doing, Jonathan? Welcome back. Thanks. Great to be here. Could you tell us about yourself as if you weren't on a show 200 episodes ago? Yeah, quickly about me. My name is Jonathan Berry. I'm the founder and CEO of Goliath, an IoT platform company. But I've been in embedded IoT for the last decade or so at big companies like Google Nest, at tiny companies like Particle,
Starting point is 00:01:19 because they're not so tiny anymore. And yeah, started Goliath in a similar space. All right, and we're going to ask about Goliath, but we are also going to ask about a lot of other things. But before that, we want to do lightning round. Are you ready? Yes. Complete one project or start a dozen?
Starting point is 00:01:40 Definitely start two dozen. What do the S in IoT stand for? Well, generally not security. Sometimes I like to say same defaults, but that doesn't quite have the same ring. What is your favorite video game? Favorite video game? Pokemon. Pokemon?
Starting point is 00:02:09 Should we bring back the dinosaurs? Five movies tells us no. If you had your own podcast, who would you want to be as a guest, and what would you ask them? Oh, I wasn't prepared for any of these lightning round questions. I would have a fictional guest. Jean-Luc Picard. And grooming tips. I don't know.
Starting point is 00:02:37 We may have asked this the last time you were on, but we can go check to see if you give a different answer this time. Favorite fictional robot? I probably have a different answer every time that question is asked but probably Lieutenant Commander Data going on the Star Trek theme and one last one
Starting point is 00:02:54 do you have a tip everyone should know I remember my tip from last time which is still very valid which was don't cross the red and black wires I think this time it's more which was don't cross the red and black wires. That's still valid, yes. I think this time it's more, once you get the bootloader working, don't change it.
Starting point is 00:03:16 And, might I add, don't put too much in the bootloader. Yes. And don't look at my PR that I just filed yesterday, which has too much in the bootloader when we last talked to you you worked at Particle what does Particle do? Particle is an IoT platform they are a full stack solution
Starting point is 00:03:37 so you can buy a component whether a dev board or module from them that includes the operating system the software update capabilities, connectivity. So if you are building a cellular product, they even give you a SIM. And then the tools to manage the devices. And now you have founded a company called Goliath.
Starting point is 00:03:58 What do they do? Similar space. We help hardware companies who are designing internet-connected devices by providing those capabilities like software updates, secure communication, but in a different approach where we say, hey, you've got your chip, you've got your sort of vendor of choice, your product is working. Now, how can we help connect that device online, but in a way that's working with the components you've chosen or the operating systems you want to use in a little bit more bring-your-own-device kind of way? And our approach to that problem space is, let's look at an IoT device, and we'll definitely go into IoT, I'm sure. And the cloud parts of that are very complicated, very specific, and hard, especially for hardware companies.
Starting point is 00:04:47 So can we be that team who's figured that all out? What do you need from the cloud, and let's provide that. So kind of a longer answer that's slightly different. So I've been doing embedded systems for what seems like forever, but isn't. I definitely started after networks. But I went to several companies who were building various IoT devices, as we would call them now,
Starting point is 00:05:15 who would start with the idea that they should build their own radios or their own GPS receivers. And when I would go, I'd be like, no, maybe we should buy those. Even though they seem super expensive, we should maybe do whatever it is you wanted to do.
Starting point is 00:05:32 But we would still have to run our own servers, build our own bootloaders, update our own firmware, monitor devices for system health and why they crashed and whether or not the bug that they have actually has to do with something crawling inside the box because Boston has salt fogs. All of this was from scratch.
Starting point is 00:05:55 Sometimes it was an assembly even. But now there are tools for all that. There are so many tools. Okay, we have Memfault. do you remember what memfault does christopher yes okay tell me tell me tell me i'll record it and insert it here memfault does a lot of diagnostic stuff and and capture a lot of telemetry and things from IoT devices, if I remember correctly. So they provide infrastructure so that you can have your device and have it send in a compact way, statistics and things, as well as firmware update things.
Starting point is 00:06:38 But they didn't actually, they didn't care about the data. It was all about the operations aspect. Yes, from my memory. And Jonathan Goliath provides... You just said, and I already am like, I don't know where that fits in. It's not AWS. AWS provides...
Starting point is 00:07:01 I think it is on top of AWS. If you want to do IoT, and I'm going to stop talking, let Jonathan talk in a second. If you want to do IoT, and I'm going to stop talking and let John talk in a second. If you want to do IoT, if you do it from scratch, then yes, you put a bunch of stuff in front of AWS. But that's a lot of hard work. You don't just connect AWS to your device. I think maybe Goliath is the thing that makes it a lot easier.
Starting point is 00:07:23 Do I have that right? Yeah, yeah. It's going back to what does an IoT device need from the cloud? And you could totally build everything that Memfault and Goliath and Renode does yourself. I feel like I have. Yeah, like many people have. I mean, in Nest, we had everything from scratch. Even the way we use databases predates a lot of the capabilities
Starting point is 00:07:46 that Amazon has today. But when you're talking about a product, for the most part, those things are actually not part of your business. It's not core to the value you create. Because if you're building a smoke detector, safety, reliability,
Starting point is 00:08:02 user notifications, that's your product. Great hardware, reliable sensors, that's your product. Great hardware, reliable sensors, that's your product. The things in the middle, the things that go into developing your product, the things to monitoring your product, the things to making sure that you can scale your product, again, is not part of the thing your business
Starting point is 00:08:17 wants to build and hopefully will be successful with. To your original point, over time, more and more people have realized that, whether it's coming from the open source world or commercial offerings like Goliath and Memfault, that should be a commodity. We really wish that you wouldn't have to start with, okay, let's write our own assembly bootloader, then bring in our own IP stack, and then write a custom driver with our modem vendor. And then, okay, now we have to figure out security and communication and encoding. And then, okay, well, now we have a database.
Starting point is 00:08:50 I haven't even built the mobile app yet. So how do we go from having a chip on our desk to having that end product? And that's where a lot of the solutions in space have started to be developed and show up over the last five, 10 years. It's sort of parallel to IT where five or ten, well, probably more like ten or fifteen years ago, if you were at a company, you had a server room. It was
Starting point is 00:09:12 packed with servers and you had an IT department that was tasked with managing those servers and everybody's files went on those for the company and now nobody does that. It's all elsewhere and managed by some other company because if I'm running a company that makes X, running a data center shouldn't be necessarily part of X. Yeah, exactly. Why does most companies use Gmail for their email server? It doesn't help your business by running your own SMTP server anymore.
Starting point is 00:09:41 What? This is so true, but it's hard to understand the landscape. And to some extent, it's easier for me to explain to managers and clients what they have to do to make it work instead of trying to figure out which company I should be recommending and whether or not I believe it will exist in a year. Which company should I be recommending and which ones won't exist in a year? Yeah, I think there's a third question there. What do you need from the cloud? Not everything is an IoT device and not all IoT devices are created equally and
Starting point is 00:10:26 don't have the same requirements. As an example, I met with a large consumer device manufacturer last year, and they have a lighting solution. And they're very much privacy focused, and their customers don't really want to use a cloud service. And so by design, they made sure that their lights and light switches just work. And they get paired in the factory, and there's a mobile app for some minor tweaking, but it doesn't talk to the cloud, mostly. I say mostly because they have a compliance requirement to have the ability to software update those devices, in case there's a vulnerability or in case there is a major feature that they want to push out, but they
Starting point is 00:11:09 plan never to use it. And so going from, hey, I have an offline wireless link between two devices to now I have to be able to push a firmware update to millions of devices sometimes is this huge lift. And so I call it sprinkling a little IoT. It's just as hard as building a full-fledged IoT system. Well, that company has to figure out OTA and fleet management and being able to push signed firmware binaries down to a subset of devices,
Starting point is 00:11:39 to 100% of devices, et cetera. And for them, they just need to go figure out the OTA problem and have a solution versus, let's say, an agriculture product which needs to sense a lot of different sensors all in near real-time, combine that with weather data and location data and other telemetry from third-party vendors. They have a whole other set of problems. And so it's hard, it's messy, it's complicated.
Starting point is 00:12:09 But first, it's useful to figure out or to determine, or even just to ask, to figure out what questions to ask. What do I need from the cloud as part of my IoT solution and what don't? Because that will help you figure out which vendors in the space actually serve your needs. Okay, so OTA, over-the-air, firmware update. That's one giant feature that many people don't expect the complexity of.
Starting point is 00:12:37 Even though we talk about security and how important it is not to create bricks, it's still something that gets tacked on at the very end of projects. You forget to have enough flash on your device for AB updates and didn't choose the right component with hardware-accelerated cryptography, so you can't actually do the OTA fast. Yeah, so usually it happens too late in the process, but...
Starting point is 00:13:00 Another thing that happens often very late in the project is realizing that you need to manage the device. You need heartbeats to figure out if the devices are dying or there's more crashing of this kind. This whole, what I'm saying, the operations side. And then you need some, maybe you need to command something, you know, maybe the agriculture device needs to command something that says, tell the farmer to turn on the water. Or maybe the farmer says, okay, now I want you to turn on the water and it commands down to the device. So there's this command and control and it can go either way. And that most people get. Most people say, okay, I understand what that's for and I understand why my product would need it. But the first thing most people think about are the data streams.
Starting point is 00:14:11 The sensors, where are they going? Which way do they go? And how do I collect that data? Are there other things I'm missing here? Well, so you're definitely right. The data is usually the first thing and sometimes the only thing companies think about as it relates to the IoT device because that's where the value is. Maybe there's an aspect of command and control
Starting point is 00:14:35 but how they get the data, how much data they're going to have, how they're going to store it. These other elements are really part of the early phases of the product development lifecycle, as well as the operations of the product development lifecycle. But those are kind of the main things. I would say the different phases, you might actually be using different tools. We talked about observability, monitoring the device, the things that Memfault does really well.
Starting point is 00:15:01 That's great for when you're initially developing your solution, but also as you operate the device. And some things are actually even more important at the development phase versus the operation phase. So being able to test at scale. There are companies that help with, in the cloud,
Starting point is 00:15:20 let's say scaling out your virtualized tests, like Reno is an example of a tool that helps you do development in the cloud or assist you developing with the cloud capabilities. But those kind of four things you hit on, which you can probably drill in if we want to go a little bit deeper, but device management,
Starting point is 00:15:38 that sort of command and control, the data, and really just, you know, interfacing with other systems. Yeah, that's probably the last one that we didn't touch on, because sometimes you have to talk to other systems. Maybe it's another team in your cloud application team or your mobile team, and we can call that
Starting point is 00:15:56 data, but it's actually quite a different problem, because if you get a raw sensor reading, let's say you have an accelerometer, get its raw values, you might send that to the cloud, denormalize it into actual coordinates. Well, the application team was trying to show
Starting point is 00:16:10 the tilt of a trash can on a mobile app has to then process that in something else. And that goes on to the cloud, the general cloud world. And so there's some tie-in between the world of device and device management and device data, and the world of application and application data. So there's that bridge.
Starting point is 00:16:28 Renode, R-E-N-O-D-E. I think it's Renode. Dot I-O. They do simulations. They don't solve any of these problems, actually. Is that right? Well, they actually solve a good any of these problems, actually. Is that right? Well, they actually solve a good chunk of these problems. So I was talking about the role of the cloud,
Starting point is 00:16:52 and I've started this mini-series that I call the Clouds of IoT. It's probably a good framework for us to talk about. You're giving me flack before we started that I haven't finished the blog series. It's coming, it's coming. It was a great start. And then I was like, okay, what about the other four?
Starting point is 00:17:09 But go ahead, talk about it, please. And it's trying to debunk part of these challenges you're asking about, that there's not just a, air quotes, cloud. It's not just someone else's machine, right? But the capabilities of a solution that is enabled through the cloud for IoT is actually specialized. And I talked about five different types of clouds. And to be very clear,
Starting point is 00:17:35 there might be one company that does more than one of these clouds. But at least I try to point to one specific example or two specific examples. And so Goliath and Particle and a few others in the space are what I would call a device cloud. That's the thing that helps you connect the cloud to the internet, security, software updates,
Starting point is 00:17:56 the thing that you as a firmware engineer might be using on a regular basis while you're in the prototyping phase, when you're in the pilot phase, even operating a device at scale, pushing new firmware, that's the device stuff. And so that's what a lot of conversations end up talking about when we talk about OTA, et cetera.
Starting point is 00:18:16 But there are other types of clouds that are part of a solution, and I mentioned the connectivity cloud is another kind of cloud, and we can we can double click on that I'll list the rest before before we go on in more detail what I would call the data and data cloud I'll kind of rattle these off a little bit faster so it's not taking too long application cloud and the development cloud and as an example a cloud. So if you're building a cellular-based device, you might need a SIM provider, like an MNO, an MVNO.
Starting point is 00:18:50 Think Bryzen or Hologram. If you're building an application, so a mobile app or a dashboard, you might use tools like Node-RED or Blink or Ubidots. And a development cloud is a tool that helps you in the initial phases of development and through the development lifecycle as you continue to iterate on your product.
Starting point is 00:19:10 I would categorize Memfault in the development cloud. It's a key part of writing your firmware, testing your firmware, doing new releases that is actually made better because the cloud exists versus having a similar tool on your desktop that you would batch download log files and then try to process those locally. It's just a complete
Starting point is 00:19:30 different kind of user experience than having a real-time tool that can aggregate all that information and make use of it. Those are the five clouds, device, connectivity, data app, and development in no particular order. UbiDots and Red somethings.
Starting point is 00:19:45 Node-Red. Node-Red. Where do they fit in? So what they help you do is, well, they kind of overlap. Data and apps tend to kind of share because first you need to be able to collect all the IoT data and then you need to be able to use, create dashboards, mobile apps, et cetera.
Starting point is 00:20:01 So Node-Red is a great tool for taking in sensor data or other sources of data with a low-code experience, a lot of time IoT, and then process it so it can be averaged or summarized or reformatted so it's more compatible with your dashboarding tool like UbiDots.
Starting point is 00:20:20 So Grafana, where I can just graph things, would fit in there? native Android and iOS tool. And Grafana is definitely an app builder for a lot of companies, especially if you're not building a consumer product where there's an installer or a product manager or a building manager, as an example. They just need that dashboard. Grafana would fall in that category. And the data cloud, is that just always AWS and Azure
Starting point is 00:21:02 and whatever Google canceled last week? Yes and no. And this is where we're starting to get into that. Well, some companies do multiple things. AWS IoT has some device cloud capabilities, device management, software updates, but they of course have a huge swath of stuff around data processing and data storage. But there's a lot of IoT-specific databases. So in general, IoT sensors tend to be time-stamped. So we call them time-series databases. And there's companies like InfluxDB or TimescaleDB. They build specialized databases that are extremely efficient,
Starting point is 00:21:38 easy to store the sensor-based data, but also easy to query it for visualization or later use. And so a bunch of companies make these optimized databases for things like time series data. It seems like Amazon has, to a certain extent, owned a large chunk of this market with AWS, at least the data storage market. Is there a way to spread the risk if you're an IoT company and say, well, I don't want
Starting point is 00:22:10 to put all my eggs in an AWS basket in case the Cascadia fault breaks? Or do you kind of have to choose, okay, this is where my stuff's going and that's just the way life is if that company screws up and loses my data? Yes and no. There's a standards problem in IoT, as we're all familiar. But it's not as the same when we talk about standards, we talk about data standards and how your Google device for Google Home can't talk to your Alexa.
Starting point is 00:22:40 What I mean by that more is the way that you build a device for AWS IoT is fundamentally different than you'd build it for Azure IoT or for Goliath or for anything you built yourself from homegrown. So the portability across different vendors makes that challenge. Some solutions like Goliath can work on multiple cloud providers. So if you build for that one thing, at least then it can run in multiple places. But all in all, each IoT project, for the most part, is kind of a snowflake, even if it's doing a very similar thing
Starting point is 00:23:08 to the nearest competitor. And so if you take on a whole all-in solution, let's say you built vertically on AWS, well, you can't really run that against Azure IoT. So either you pick solutions that are designed to have sort of multi-environments, which there aren't that many,
Starting point is 00:23:29 or you pick some of the pieces. So a lot of companies that I've come across who, let's say, use AWS for their IoT product, they might just use AWS's database. And then they wrote a lot of, they hired a big team, they wrote a lot of their own IoT device management on top of AWS, not depending on their solution because of that key factor.
Starting point is 00:23:47 They want to use a database that's high availability and cost effective. That same database might be running also on Azure because it's a standardized database. But that's the only real way, except for, again, solutions like Goliath that is designed so that it can be portable. But yeah, there's that baked-in challenge for most solutions. Is it baked into operating systems as well? I mean, I know AWS has a free RTOS branch, and I think Goliath likes Zephyr, which I'm liking Zephyr more every time I see it.
Starting point is 00:24:25 And Azure has ThreadX. I mean, do I have to, I'm starting an IoT project. If I choose one thing, does that mean I've chosen everything? So there's actually a couple good questions in there. And I'll start with my recommendation for anyone who's starting an IoT project. Start with your component. What chip do you want to use?
Starting point is 00:24:51 What radio technology do you want to use? Get that vendor down. And each vendor has made their own bet at the OS level. And generally speaking, those vendors have FAEs that will support you on the firmware side and the hardware architecture design side, and they've partnered with the cloud parts. So they have middleware components
Starting point is 00:25:11 that you can drag and drop and pull in. So, for example, if you're using Infideon with Modus Toolbox or MCS Expresso from NXP, and you're starting a project, you're going to have the ideal software SDK starting experience. And they have multiple RTOSs in there project, you're going to have the ideal software SDK starting experience.
Starting point is 00:25:26 And they have multiple RTOSs in there too, by the way, for the most part. And the middleware is the thing you can swap in and out. So before you get too far along into your development, you can build upon well-tested and supported middleware. And for the most part, you actually get some choice. Now, how vertically integrated that OS and middleware is will kind of make it a little bit harder. So, for example, if you're trying to use AWS,
Starting point is 00:25:58 if you started with, let's say, the cloud side, if you were to pick AWS IoT and try to design your hardware from there, well, if you're really proficient in embed, you're kind of stuck. I have a friend who has built an IoT product, and they chose AWS IoT, and their dev shop chose embedOS, and the two shall never meet. Nine months later, they didn't ship their product,
Starting point is 00:26:21 and they had to scratch the entire V1 of the solution without another platform. So if you start with the OS and the hardware, find which one you're going to get the best support, then go from the middleware up, that makes it a little easier for you to design your solution. And I mentioned
Starting point is 00:26:39 Infineon and MoSoolbox, they support FreeRTOS and Zephyr today. So you can actually go with the software that you're most comfortable with or maybe meet the timing requirements or whatever and then pick from the growing number of cloud solutions from there. We actually, of course, you mentioned Zephyr.
Starting point is 00:26:59 We're big fans of Zephyr. But the real driver for us, the reason why we like it so much, it's a good RTOS and has a good kernel and drivers, etc. But the key, and it may sound a little repetitive, is that vendor support for
Starting point is 00:27:13 Zephyr. And so we know that if a customer is using an NXP part with Zephyr, we know the FAE who maintains that SDK and integration and that we can find bugs, whether it's our bugs or their bugs, and have that resolution.
Starting point is 00:27:29 So IoT is such a complicated thing. You want to reduce as many variables of complexity and find the most amount of support you can. Picking that hardware OS is usually going to give you the happiest path, and then adding the cloud on top of it will just continue to reduce those areas where things can go awry. I have a napkin sketch for an internet-enabled fishbowl.
Starting point is 00:27:56 And I don't write code, and I don't want to know about firmware updates. Is there a completely vertically integrated solution so that my fish can talk to me while I'm at work? Yeah. So there are projects and there are products. It's something very important to keep in mind. I'm a maker. I build hobby projects on the weekends. I've also worked on products that have supply chain
Starting point is 00:28:24 and design for manufacturing and customer support and all the other things. The category of things you could build for projects, there's actually a huge ecosystem in the maker community. We're seeing a little bit more of that makery low
Starting point is 00:28:39 technical effort making its way into finished products or tools for creating finished products. But by and large, almost every product I've ever worked on or customers I've ever worked with, they have a C, C++ developer, they have a hardware and loop testing lab, they are doing manufacturing with a CM,
Starting point is 00:28:58 where things that are low code and low friction for, let's say, non-engineers to design and develop really fall in the category of makers, educators, etc. And there are solutions for sure that are great. There's tools like Blockly, which have been
Starting point is 00:29:18 integrated in projects like the BBC Microbit, but we're starting to see more of that kind of, let's say, drag and drop, or don't require you to write C code, and things like Arduino, the Arduino Cloud IoT platform.
Starting point is 00:29:34 They have the ability to design a solution and actually generate the code for you. And under the covers, it's Arduino and C++, which is pretty neat stuff. But if you're thinking about making 10,000 of those fishbowls, you probably want to start there, Arduino and C++, which is pretty neat stuff. But if you're thinking about making 10,000 of those fishbowls, you probably want to start there,
Starting point is 00:29:48 get the solution with a vertically integrated product, and then find someone who can design a PCB or a breakout board, write some firmware, think about the OTA, because one, it may not be secure, it may not be scalable, and it may not be cost-effective. So it's a good place to start. But certainly, I haven't seen a lot in the partizable realm yet.
Starting point is 00:30:12 You made a good point that trying to, and this is something that is philosophically where I am as an engineer, is try to make things as easy as possible for yourself. Don't reinvent the wheel. Don't go off re-implementing things that other people have implemented. Try to find solutions that are, quote, you know, not your job, not part of your product elsewhere. Are there pitfalls and shiny objects that people need to watch out for that can drag you away from the easy path because they look like a great idea?
Starting point is 00:30:46 Have you seen a lot of that kind of thing where somebody's like, oh, I saw this new technology and I'm going to go for it? How do you advise people to be cautious about what they're implementing? Well, I think there are shiny objects all the time in software. I think programming languages is one of those examples. There is amazing stuff happening in MicroPython and Rust.
Starting point is 00:31:16 And there are people actually starting to ship product with those. But if you're trying to build a consumer-grade IoT product, are you going to be able to find 30 Rust developers who know the Tokyo real-time stack and be able to interface with the networking? That tends to be a challenge. And so I go back to, what is the prescribed path? What is the happy path with the most amount of support? Whether that's from the chip you bought
Starting point is 00:31:45 and the vendor who makes it and the support team they offer you as part of your being a customer to the modems and the other forms of connectivity. Are there stacks that you can just grab as opposed to finding other challenges? Because IoT is probably the culmination of most of software, right?
Starting point is 00:32:04 It's hardware, it's embedded firmware, it's networking, it's modems, it's connectivity, it's security, it's infrastructure, it's servers, it's databases. Applications. Yes, mobile apps. Everything. Yeah.
Starting point is 00:32:18 And so if you can just circle around the path of least resistance, you're just going to be more successful because there's so many places where you can either get lost or confused or fail, really. And you'd choose based on the device first. Yeah. I would actually say choose on the product first.
Starting point is 00:32:39 So that fishbowl example, is there going to be a consumer product? Is there going to be an aquarium? Is there going to be a Vegas hotel? Is there going to be an aquarium? Is there going to be a Vegas hotel? Who's going to operate it? Does it need to have one controller? Multiple people controlling it. Is it part of a larger system? A consumer electronics company might do what's called a MRD, a market research document, understanding the landscape of how people
Starting point is 00:33:03 use products today, existing solutions, and how people interact with them. And from there, you can start to pan out or build out what kind of connectivity do we need? What kind of on-device computing do we need? Do we have to interface with other devices locally, over the internet, or with some other transport? And from this pyramid of figuring out what you're trying to build as the product,
Starting point is 00:33:26 you can start to develop that sort of roadmap of the hardware design, the firmware design, what kind of connectivity in cloud. And of those five clouds, what do we actually care about? What do we actually need in our solution? And not just pull on something because it's shiny and new or someone told you to use it. I mean, I totally agree with you.
Starting point is 00:33:47 I like the way you've broken this up because the device cloud is an area where I spend a lot of time and then usually I have a UART or something that goes to the connectivity cloud, which might be BLE, it might be 2.4 gigahertz radios, and it might be cell modems. And for the most part, I don't care. Those are very separate things. And what I talk to after that, yeah, I mean, it's fine. And then whoever, and then as the clouds go up, you know, the application cloud, sure, as long as the data gets to the data cloud, I don't care what you do with the
Starting point is 00:34:25 application cloud, as long as I can understand that my device is working correctly. And really, that goes back to the development cloud, where somewhere between the device cloud and the development cloud, I know my devices are being updated, I know my devices are alive, and that they are performing as their self-test indicates they should. But who wants to plan anything? I mean, nobody wants to plan anything. Everybody just seems to want solutions or to write it themselves. Yeah, yeah. It's interesting.
Starting point is 00:35:01 I did a Twitter survey a few months back about sensor drivers. And FreeRTOS is a kernel, and there are distributions of that kernel. I found out that most of the distributions don't include sensor drivers. So Espressif has the ESP-IDF, which is based on the FreeRTOS kernel, and they've brought in a bunch of stuff
Starting point is 00:35:21 to make it really easy to use FreeRTOS. But every single person who uses the ESP-IDF writes their own sensor drivers. You know, it's a little ITC here and a little accelerometer there. Which, you know, when I asked why people do it,
Starting point is 00:35:39 I've always done that. Versus grabbing a library of well-tested sensor interface from maybe the sensor manufacturer. And so I think there's... Wait, those exist? Where? Some do. Some do.
Starting point is 00:35:54 Or different operating systems include those. So like Zephyr has a whole sensor library with a bunch of sensors provided by some of the sensor makers. But for example, Bosch has a bunch of sensor drivers and some of them are actually optimized and lo and behold, actually performant. But people still end up writing their own Bosch,
Starting point is 00:36:13 you know, BME 680 sensor driver from scratch. And maybe that's just the way some people are wired and there's not much you can do about it. But if you would have looked around and maybe surveyed the ecosystem, those early decisions, that planning, maybe you picked a solution that had some of that already built in, that you didn't have to focus on those things
Starting point is 00:36:34 that you were doing over and over again with every project. I think that's one of the things embedded systems is going to be changing in the next five to ten years, is that we're going to start figuring out that we can't keep writing the same. Please don't make me write another accelerometer driver. I mean, I haven't written a UART driver in years and before that. UARTs at least are well covered.
Starting point is 00:36:57 I mean, I used to write, you know, one or two a year. And now it's usually, I don't have to do that, but I'm tired of writing display systems and. Well, even display. I mean, yeah, it's, it's usually, I don't have to do that, but I'm tired of writing display systems. And even the display, I mean, yeah, it's a mixed landscape. And like, I think you're right, Jonathan, when you're planning out your hardware in order to walk that path of making it easy on yourself, picking hardware that you don't have to write a bunch of software that is not part of your product's job. Nobody
Starting point is 00:37:29 bought your internet-connected fishbowl because it had a custom spy driver for the light. And there's things that do matter, especially in the world of IoT. A lot of applications are, say, power-sensitive or memory sensitive.
Starting point is 00:37:48 A lot of the companies we work with, they spend a lot of time on power management and actually taking the device driver they got, it was working, and they were optimizing the driver. That's, one, is more interesting and relevant to your product, but two, sometimes more fun, depending on the DNA of the engineer. So it's better to spend time on those kind of things as opposed to doing the defaults, you know, pull off the ITC buffer, read it, dump it on the UART, and then, oh yeah, cool, that works.
Starting point is 00:38:18 Okay. So cloud layers, I think I have them. And data that we talked about initially goes pretty well into these cloud layers. Device management goes to the device cloud. It might go also into the data cloud, but it definitely comes from the device cloud. Is that right? Mm-hmm. Okay. And then we have the data stream, which comes from the device cloud through the connectivity cloud into the data cloud, and then probably the application cloud does something with it. Yeah.
Starting point is 00:38:55 Yeah. put in some place things instead of just general names. Let's say I want to talk about the data stream, and I'm going to choose Goliath because I'm talking to you, and it seems rude to choose particle at this point. What happens next? Which connectivity cloud should I use? What does going to Goliath mean? Does that mean that I also have to use some other piece?
Starting point is 00:39:34 This is where I get to say it depends. Of course it does. I get that one card, right? And it really does depend on the product and the company. Because a lot of products, there might be already engineers in that company. There might be already building mobile apps. So you probably want your mobile team to have access to that data
Starting point is 00:39:54 coming off the sensor and just let them run with it. But if you're a consultant and you're working with an entrepreneur who has a great business idea, you're designing the PCB and some of the firmware, you kind of don't have that resource. So you want something that's super well
Starting point is 00:40:11 integrated with wherever the data's coming off of, and you can just go and drag and drop and do what you need on the visualization piece. And so we see a lot of mix. And if you're not building a cellular device or a LoRa device or anything with a managed connectivity, you don't even need to worry about connectivity cloud, right?
Starting point is 00:40:29 You're building a Bluetooth app or you're doing something on Ethernet or Wi-Fi, and you can just cross that part of the stack all together. And so if we go back to your fishbowl example, your fishbowl monitoring example, it's probably, I don't know, some pH sensor in the fishbowl monitoring example, it's probably some pH sensor in the fishbowl, maybe some
Starting point is 00:40:50 turbidity to measure the activity of the fish. I don't know. You want to stream that data and show it on a mobile app. It's a good example to use as a framework. You have picked your Wi-Fi components and the sensors and you've got some firmware and you have your UART-Fi components and the sensors,
Starting point is 00:41:08 and you've got some firmware, and you have your UART plugged aside, and you're seeing the data there. And so probably the most commonality across all these types of products, whether it depends, is some form of device management. So being able to connect that device to the internet, secure communication. Instead of having it on your, maybe you have it on our log output in the cloud. And you're like, cool,
Starting point is 00:41:30 this is connected to the internet. Now I want to test out OTA, so I build a new image, push it through the device management solution, and you see it, instead of blinking red, it blinks the green LED. Great, OTA works. And now I need to show to my investor,
Starting point is 00:41:49 or my, I don't know, my business partner, the values coming off that device. Log output's interesting, but let me just grab Grafana dashboard, wire up the data from the sensor, the streaming information, and then show the pH levels rising and falling or the turbidity as you kind of twirl water around there.
Starting point is 00:42:11 And so that's your prototype. And that kind of checks off some of the boxes. And as you go from that prototype to, let's say, a pilot, a lot of other things have to happen. But fundamentally, you're just building on where you started. Maybe you replace Grafana with a web app that the subcontractor built out
Starting point is 00:42:32 and that's taking the data from your device management like Goliath and then dumping it into a web app instead of a Grafana dashboard. And then maybe you decide that you want to have an outdoor fishbowl so you have a swap out of components and you now have a cellular device instead of a Wi-Fi device.
Starting point is 00:42:51 Now I have to go find my connectivity provider, bring that in, and these two skews, one is the Wi-Fi, one is the cellular, one has connectivity, one doesn't, and you can continue to refine the product. At some point, usually in that pilot phase, you have all the cloud parts figured out. Who's doing what if you're using a third-party vendor,
Starting point is 00:43:13 let's say Grafana, or if the web developer built your own dashboard, whether you need connectivity or you don't. Your device manager is probably plugged in from early on. And the rest is product development. New features in firmware, testing, changing from a Adafruit Feather board to a custom PCB. But I think one of the key things is there's a certain point where you don't have to make any decisions anymore
Starting point is 00:43:40 because you've figured it all out. And now it's just matched to whatever those initial product requirements were i'm always afraid of that i mean what if i chose wrong what if i chose sigfox so what now and what if i had a laura device i wanted it to be super low power and because you know everybody else was using the things network, I was sure it was going to succeed. But now I have a device and I can't talk to it anymore because I chose the wrong connectivity or I chose a data cloud that doesn't exist anymore. That's why you put eight different radios on every product so you can adapt as necessary. Yeah, and I think one of the things that has changed,
Starting point is 00:44:31 we talked a little bit about the changes in embedded and how reuse is becoming, moving towards commonplace. Just the ability to prototype as a professional engineer has also changed significantly. Oh, yes. You can actually build a working prototype with dev boards and breadboards, and it will be a lookalike. RF might be different in power, but at that phase, unless you have a very specific application, you're not optimizing for those things.
Starting point is 00:44:58 You want to know, does this work? Does the idea pan out? Can I build it with these basic components? And, you know, choosing flexibility around the software you're using. So let's say, we talked about operating system earlier, having one that will allow you to, let's say, swap out a cellular AT modem for a Wi-Fi AT modem. Those kind of things can help you at least reduce the risk at that phase. And in some ways, even further down the road, as you get to, we deployed in our first 100 sensors in the field, it's like, shoot, I need to do OTA,
Starting point is 00:45:34 and LoRaWAN doesn't support OTA. What am I going to do? That low-cost, almost low-cost prototyping phase, you can go back one step without a significant, crazy amount of cost versus you have to manufacture the full thing with enclosures, with IP ratings, with FCC, and then find out when you have your first thousand in the field, oh, shoot, I can't get through a metal box.
Starting point is 00:46:01 I should have thought about that earlier. I should have gone with plastic. So I think those tools, whether it's the cloud-enabled versions or counterparts, we've gone with debuggers and developers and IDEs and just cheap commodity sensors that you can easily wire in
Starting point is 00:46:18 makes it a little bit easier, a little bit less scary, but still risky. I was teaching my Making Embedded Systems class today, and their homework was to make Blinky work. And when they heard that last week, I'm pretty sure I could hear their eyes rolling. It's like, make Blinky. Everybody's made Blinky. That's dumb. And then today when they had to answer
Starting point is 00:46:46 the questions of, okay, did you step through the code? What compiler did you use? Did you use one of the hardware abstraction layers? Are you using an RTOS? Did you use the class board or something else? And suddenly the tooling becomes so much harder than the development, than the engineering. I mean, the tooling is engineering. I shouldn't say it that way because that makes it sound like it isn't. It totally is. But it's the part of the engineering problem that we don't always remember. And I feel like we're hitting that with the different clouds that, okay, it's all there and I might be able to put it all together once, but I don't know that I could put it together in a way that I could be confident it would still go together that way in a month,
Starting point is 00:47:45 or put it together in a way that I'm confident somebody else could put it together with my notes. It's a tooling problem right now. Do you see that as well, or is that just me not knowing the landscape? No, I think the tooling problem is one of the things holding embedded back. I really enjoyed Tyler from MFAL when he was talking about the analogy that a lot of large software companies have engineers dedicated just to make tooling better,
Starting point is 00:48:21 to make those engineers highly productive. There was a humongous group at Google just building internal tools for code completion, for code sharing, for continuous integration and deployment. And you can see that. I remember a lifetime ago, there was a public API we wanted to develop.
Starting point is 00:48:44 And a single engineer could build that public API. Draw the code, configured it, and deployed it on a global scale. And that's only possible because of the tens of thousands of hours from hundreds of engineers who built the tooling to make that possible. And we don't really have that. And I think we can pontificate a why in the embedded world that's the case but there's at least one component that I feel pretty strongly about
Starting point is 00:49:09 is because even though there were teams of embedded engineers the embedded work was mostly individual you were running your driver, you're integrating into some code repository but the tools that you interact with are the thing at your desk
Starting point is 00:49:24 the code on your screen the IDE that's configured in your environment. And as modern software practices have made things more distributed, but also it's a complex system of even things that you don't even know exist yet or haven't been built yet, that doesn't work anymore. And things like modern development tools that we are seeing in the classic web server and mobile application are slowly trickling
Starting point is 00:49:51 in to embedded. And by tools here, I mean more of the standard definition, like an IDE, a compiler, a debugger. But also, the things around those tools, like observability for
Starting point is 00:50:06 what's happening on your device at your desk or in the field or how to get a packet off of a UART into a database and all the things in between. We're still getting those more classic tools to be improved like Visual Studio Code.
Starting point is 00:50:22 When I was working at Particle, we launched a plugin for Visual Studio Code and no one was doing your terminal output from a physical device. So figuring out how to plug into slash dev slash gt0 on the Linux machine and then show the log output from a Particle device was actually really novel at the time
Starting point is 00:50:44 and hard to do and hard to repeat and wasn't reusable because it was tied to that specific platform. But now Microsoft has a team building embedded tools for Visual Studio Code. Things like step debugging for real-time operating systems, things like terminal output, and yeah, we're slowly getting there. And I think the tools around the IoT parts
Starting point is 00:51:07 for that part of the embedded world is also catching up, like Memfault, like WeNote, like Alive and others. So many people are used to rolling their own because they control all of the pieces, which means they don't have to worry about a company going out of business, which I think is a common fear. How do you, as Goliath's CEO, say,
Starting point is 00:51:32 no, no, we'll be here next month and get people to believe that? As an engineer, on the other hand, how do you figure out when to trust a cloud service? Those are three good questions. And I think part of it is just some of the things that are happening in the IoT space. So specifically IoT, not talking about Goliath yet. Open source is a thing now. And leveraging open source has actually been a big part
Starting point is 00:52:06 of our company and our product, which I would say 10 years ago, we couldn't have built some of the things that we wanted to build that we could build today because of leveraging open source. That's both on the device side, but also a lot of stuff we do in the cloud. And our approach to interfacing with device-side firmware
Starting point is 00:52:24 through the RTOS is we just have a little library. So you can look at our little library and see all the codes there and all the interaction points. And if you need to design Goliath out, you can just take that library, figure out what we're doing, and swap us out. It doesn't prevent us from going out of business, but it certainly prevents the risk of you
Starting point is 00:52:42 being stuck with a service that no longer works. And on the other side of the UART is the cloud communication and the security and other things that we talk about. Our approach to the device management, device connectivity,
Starting point is 00:52:59 security, all those other pieces, is using open standards. Either open source standards or open standards that are defined by big groups of PhDs. And so we document all of our APIs on the cloud side. And you can go on our website and see our reference information and you could literally reproduce what we're doing from the device to cloud communication.
Starting point is 00:53:19 And so the device side is open source, the cloud communication is open and documented. If we went out of business, we could show people today how to design us out so that you can limp along until you design your own solution. And so that's like worst case scenario which people want to hear.
Starting point is 00:53:36 From a business perspective and when we have these conversations, especially with larger companies, they don't, they have those concerns, not just an engineer from a business perspective, and they don't want to build a device management platform, again, because it's not part of their core product and it doesn't create value.
Starting point is 00:53:55 But they need to be able to control it, they need to be able to understand it, and they need to be able to communicate that to their end customers. And so part of our product has an enterprise version. So we can run a version dedicated just for your company on Azure, on Google, on an oil refinery if you had your own data server there.
Starting point is 00:54:15 And that allows them to have that control without having to basically build a glide-sized company. And those, between the openness of our solution and the ability to actually run it themselves without having to build it themselves, is how we mitigate some of that. It doesn't make
Starting point is 00:54:33 everyone feel good, or answer all those questions, but at least it's different than the, you know, lots of IoT companies today, especially consumer ones, they just run out of funding because they built something proprietary and did it from scratch. Literally, their gateway devices, their lighting controllers
Starting point is 00:54:52 just stopped working. At least that's our answer. So as an engineering side, how do I avoid vendor lock-in for my IoT tooling? Is it even worth bothering to worry about that? Or do I just figure out what my company needs and not worry about... Yeah, three abstraction layers.
Starting point is 00:55:13 Yeah, how many abstraction layers do I need? There's a fine line, of course, because the more abstractions you have, the harder it is to maintain. Probably performance gets impacted. But what I usually recommend, or the analogy I usually give
Starting point is 00:55:29 when I talk to engineers as opposed to the business person is when you're designing a PCB, you have a keep-out zone to deal with issues like, oh, what if there's a component shortage and I need to redesign my PCB? Do I have to redesign the whole thing or just swap out the modem? Or if you're
Starting point is 00:55:46 building, you know, writing some firmware, you don't have to create your own Halibstraction layer on top of a Halibstraction layer, but maybe modulize your code a little bit. And that's probably good practice. And I would say best practice. And because at the end of the day, the more effort you put into
Starting point is 00:56:02 buffering from, let's say, the chance that there's a solution that no longer works or you have to redesign somewhere in the future, well you really just, you can't abstract, you can't spend all your time writing that abstraction. So if you can prevent the inevitable redesign,
Starting point is 00:56:18 if you're afraid of that, without having to spend as much time preventing that through abstraction layers than you are writing firmware code, you're doing it wrong and you really have to strike that balance. And the secret, and I'll tell this to your listeners,
Starting point is 00:56:34 about IoT products is they're actually pretty simple. All this complexity we talk about, the thing that's happening on the device or the thing that's related to the IoT parts is actually usually pretty simple. Other companies take care of it, like your module lender doing the modem
Starting point is 00:56:51 is probably handling security and certificates and network packets. But the actual thing you're doing is probably just taking the sensor data and then sending it to a UR. And that piece can probably be redesigned if you really need to without too much pain. It's the actual application, the firmware, the logic,
Starting point is 00:57:11 the algorithms, the power management, all the things that's your product, your code, your innovation, that's always going to be complicated and that's where the time should be spent. But that IoT part actually tends to be pretty simple and the least amount of places you have to worry about. It's where scaling and large numbers of units come in that it comes back to being a device problem.
Starting point is 00:57:37 That getting a bug report that says unit number 1,000,012 crashed. That's not actionable. So that comes back to device management. Does Goliath do any of that? We do a bit. We've decided to focus on our swim lane, which is connecting device, securing device,
Starting point is 00:58:08 making sure they're online and healthy. But things like understanding the firmware and what's going on on that particular device at the stack or heap, we don't do. That's where folks like Memfault do really well. And kind of where we stop and they start, we see a lot of folks using those solutions together, actually. I kind of feel like I need a map of, you know,
Starting point is 00:58:33 those cartoon maps that are for tourist cities. And over here is the application cloud and these are the stores and restaurants over there. And here's the device cloud and here are the stores and restaurants over here, and here's the device cloud, and here are the stores and restaurants over here, and look, there's a little road that goes between them. I think you need to do a whole book of understanding embedded systems through maps.
Starting point is 00:58:53 Okay. I think you do a great design of... The memory maps. Yes, yes, exactly. Yeah, I had that visual in my head of IT products and solutions. Yes. If somebody could make my memory map land,
Starting point is 00:59:07 but instead for IoT solutions, that would be awesome. And then we can have the ocean of AWS, and it can have little ports along little areas that it needs to touch. FreeR TOS can be like the planes. Anyway. FreeRTOS can be like the planes. Anyway, so you were a product manager and did some code for Particle, but now you are CEO. How's that gig going?
Starting point is 00:59:37 How is it different? You both run your own companies, and I would say I spend a lot more time running a company than I am product managing or writing code. Things like payroll and insurance and weird laws between states because we're a remote-first company. But that part aside, it's just been kind of fun to scratch the itch and build a team
Starting point is 01:00:01 and work with some great people. It's not for everyone because, you know, it's Saturday and I'm probably going to get off this podcast and do some emails, but I think it's worth it. And you've built a pretty fun team, it looked like. Indeed. And let's see, one more question. What are the best and worst uses of IoT that you have seen so far?
Starting point is 01:00:28 Is that a listener question? No, but I think maybe they asked what was the worst, but I added what was the best, because you can't just have the Internet of fish bowls. It's a fishy example. Well, it's worth calling out. There's a Twitter account, the Internet of where they literally have
Starting point is 01:00:48 an internet connected toilet with health monitoring capabilities. I'll leave it for the listeners to look up what that means. My rule of thumb for connecting a device to the internet is it should be better than if it wasn't. Yes.
Starting point is 01:01:07 Don't take away the features because you've added the internet and want me to pay for them every month instead of just the once. Or actually make it perform worse because now you have to have a 2x size battery to deal with the Wi-Fi radio you put on there. And it literally does the exact same thing that it was doing without internet. You just created a dashboard. Except now you have to update the firmware every six months, randomly.
Starting point is 01:01:36 Hopefully there's a firmware update every six months. You're not stuck with a terrible device. I would say my general rule of thumb is something that senses something in the world that you wouldn't have knowledge otherwise. Something that provides automation or a meaningful enhancement of convenience. I'll try to describe those.
Starting point is 01:02:00 Or let's say does something really cool. That farming example we used earlier, you have no idea how much UV, how much rainfall or moisture is happening to a crop at any form of scale without having some sort of sensor there. And with the cost and sort of deployability of sensors, you now have insight into your crops that you never had before, except for sending someone else to put their thumb into the
Starting point is 01:02:31 ground. You still wouldn't know about those. So that actually improves crop yield and crop health and reduces environmental waste on water and other rolling up trucks to go, or tractors to go check on those things. So getting information which
Starting point is 01:02:48 you couldn't get otherwise, I think, is my favorite use case of IoT. And this idea of convenience, not just, hey, I'm sitting on my couch, I want to turn on my lights. I like consumer products altogether. But
Starting point is 01:03:03 being able to monitor things that you couldn't easily send a truck out to. Talk about waste management, elevator monitoring, street lighting poles, windmills, or wind generators. It's really expensive to send someone
Starting point is 01:03:19 up there, like thousands of dollars. And instead, is the generator working? Thumbs up, great. We don't have to send someone out there, dangerous, whatever. So those are my two general use cases of when I think about,
Starting point is 01:03:33 okay, this is IoT making devices better, products better, our environment better. I just think of cool things like, I don't know, particle accelerators and being able to beam form crazy stuff and the convenience of don't know, particle accelerators and being able to beam form crazy stuff in the convenience of the upstairs lab
Starting point is 01:03:50 where, yeah, you could have a PhD, sit there with a dial and move things around, but being able to have that remote control experience, there's fun examples. There's an example that Zach, the
Starting point is 01:04:07 CEO of Particle, used to always bring up, which I also agree is a terrible use case. There's a basketball from a basketball company. It was a Bluetooth monitor with an accelerometer so you can monitor your shots.
Starting point is 01:04:23 They had to put the Bluetooth radio and the accelerometer somewhere. So they put it at the bottom of the ball. Well, if you dribble the ball and it hits on the sensor, it just, one, breaks the sensor, and two, doesn't bounce back. So you've literally made a basketball not a basketball anymore.
Starting point is 01:04:40 So it's just figuring out where it can enhance that versus... Yes, make things better. Jonathan, it's been really good to talk to you. Do you have any thoughts you'd like to leave us with? Yeah, I think IoT is such a
Starting point is 01:05:00 fascinating space. It's obviously what I spend a lot of my time and my career on, but it's complicated. And if your listeners are thinking, wow, there's so much stuff I've got to learn and figure out, yes, that's what makes it both enjoyable but also complex. And the
Starting point is 01:05:16 advice I give is find resources, whether it's if you're working with a chip set vendor, get some help because they have engineers who are helpful. There's online communities. There's very active Slack like Embedded and Interrupt as well as Discord. They're popping up all the time. And local enthusiasts who are bridging the divide between Embedded and
Starting point is 01:05:36 hardware and connectivity because we can figure this out. We see people shipping products all the time. Just know that if you feel overwhelmed, it's not just you. It's a vastly complicated space, but there are people here to help you figure it out. And so if you want to collect all of the Pokemon that are the IoT tools companies, you should search the internet for IoT Pokemon.
Starting point is 01:06:03 I wonder what's going to happen there, if anybody actually tries that. Any product idea? Our guest has been Jonathan Berry, founder and CEO of Goliath. Thanks, Jonathan. Thank you both. Thank you to Christopher for producing and hosting, and thank you to our Patreon listeners Slack group for their support and their questions. Of course, thank you for listening. You can always contact us at
Starting point is 01:06:30 show at embedded.fm or hit the contact link on embedded.fm. And now I do not have a quote to leave you with. I think Jonathan has said it all.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.