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.