As I wrote in a previous article, one of the distinctive features of IoT projects is that they require integration of technical blocks originating from three different domains: electronics, communications and software. And inside these three domains, various different subdomains are usually involved: analog and digital electronics, wireless communication modules, protocol stacks, embedded software, user interfaces, database management, analytics, geospatial data, etc.
Therefore, when developing a new system, it's almost impossible to only rely on technical blocks developed in-house, or that you have been already using for a long period: you have to integrate some new components provided externally. And usually you'll discover that provided documentation does not say everything about components characteristics and behaviour.
There are several ways to reduce risk and shorten development time despite these discrepancies between specifications and reality. Among them, I usually rely on these three ones at least:
Adhering to these recommendations slows down the start of the project, but it allows to eliminate so many problems that would otherwise have appeared before the end of the project or, even worse, in the field, that the overall balance is very positive.
By the way, the above recommendations can be applied to components developped in-house as well, of course. And to software-only projects.