Things I learned from IoT project

It was challenging to work on an Internet of Thing (IoT) project for a Bluetooth smart device in the last year, which is different from pure software development in a couple of aspects:

Firstly, integration is difficult, because the mechanical, firmware, mobile app and design parts are outsourced to different vendors with geographically remote teams and different work culture. Full scrum approach is not likely to apply when the developers are so specialised in its own area as silos instead of cross-functional to deliver one feature at a time as a whole team.

Secondly, the iteration of hardware is much longer than software, which is not easy to adapt to change. Lots of chips and motherboards are interconnected, unlike software can be easily modularised to separate components and implement features one by one. Therefore the approach is more waterfall as you either get the prototype as a whole or you get nothing, no in-between for the most valuable product (MVP) to ship to users to test, thus no users feedback input to the process, nor prioritisation of features. The longer the time, the larger the risk that you lack the courage to give the product to the end-users because of you afraid it is not perfect.

Thirdly, when things do not work, it is almost impossible to identify the problem, whether the main reason is mechanical failure, firmware bug or mobile app development issue. End to end testing is harder to achieve with the interface keep changing. It was also time-consuming to test without full automation of the hardware and generate an expected signal to the software. A better solution is to write down all acceptance criteria, with each statement actionable and testable, either pass or fail, no partial acceptance, thus enforce a strict definition of done.

Overall, properly deal with failure in communication is the most important factor to ensure the success of I.T. project. It is a natural behaviour for people to point fingers at each other when things are not working, thus leads to defensiveness and damaged the relationship among silos. The right way for good communication is to stop your tendency to evaluate, judge or disagree from your point of view emotionally. Instead, please try to listen and understand what is actually happened from the other person’s point of view.

This approach can reduce the amount of time and effort wasted in the process, leads to attitudes that are more positive and more problem-solving in nature, thus achieve higher performance. High performance is measured by the value delivered to the end-users. I wish the final product will be released and see the satisfactory and happy faces from the users.

Do you have experience in IoT project? Did you face similar problems? I’d love to hear your story and learn from you as well.