Le choix de plateforme domine toutes les autres décisions architecturales dans un développement d'appareil connecté. Nous avons choisi iOS et Android natifs plutôt qu'une solution multiplateforme unique parce qu'une application de contrôle climatique vit ou meurt selon l'expérience d'appairage et de connectivité, et c'est précisément là que le code natif s'avère indispensable. L'accès direct et fiable à la découverte de réseau local, l'appairage Bluetooth, l'actualisation en arrière-plan et les notifications push maintient l'application et le contrôleur physique synchronisés — et lorsqu'un utilisateur règle 25 °C depuis son lit, il faut que le climatiseur en accuse réception et que l'écran reflète la réalité, pas une estimation mise en cache. Le développement des deux clients nativement signifiait également que le fabricant possède l'expérience complète plutôt que de la louer dans un concentrateur domotique générique, ce qui compte pour les entreprises américaines et européennes qui doivent répondre aux obligations RGPD et CCPA sur les données domestiques que l'application collecte.
Le compromis que la plupart des équipes sous-estiment est la longue traîne des appareils et des versions d'OS dans les foyers réels. Une solution multiplateforme tend à prendre du retard sur les API natives pour la découverte locale et la connectivité en arrière-plan, et l'abstraction fuit précisément là où ça fait mal — pendant la configuration et pendant la boucle de contrôle en direct. En écrivant directement en Swift et Kotlin, le flux de configuration de l'appareil, la boucle de température et le comportement hors-ligne se comportent de manière identique et prévisible sur une large gamme de téléphones, et le code reste ouvert et maintenable pour la feuille de route à long terme du fabricant.