J’ai passé 13 ans à créer des applications Android, et pour la plupart d’entre elles, le backend était le problème de quelqu’un d’autre. Building Weather Pal, ma propre application de prévisions, a rapidement rompu avec cette habitude. Cela m’a appris que la fiabilité mobile dépend rarement de la réponse de votre serveur. Il s’agit de savoir ce qui arrive à vos données entre la récupération et l’affichage, et de savoir qui d’autre boit dans le tuyau pour lequel vous payez. Deux incidents ont rendu cela concret. Dans le premier cas, le système d’exploitation a tranquillement arrêté d’actualiser mes données. Dans le second, des scripts que je n’avais jamais autorisés ont vidé le quota qui l’aurait rafraîchi. Ni l’un ni l’autre ne s’est présenté comme une erreur.
Weather Pal est une application Kotlin et Jetpack Compose : prévisions horaires et quotidiennes, IQA, radar, alertes météorologiques et une couche d’informations en langage clair générées sur l’appareil avec TensorFlow Lite. Les prévisions proviennent d’Open-Meteo et de MET Norvège, les alertes officielles américaines de l’API du National Weather Service et chaque demande est relayée via une passerelle que j’utilise plutôt que d’être appelée directement depuis le combiné. Les coordonnées sont arrondies à une précision approximative d’un pâté de maisons avant leur départ ; il n’y a pas de compte, les favoris et l’historique de recherche n’atteignent jamais un serveur, comme le dit ma politique de confidentialité. Je suis délibéré sur cette formulation, car vous ne pouvez pas obtenir de prévisions pour un lieu sans le dire à quelqu’un. La question est de savoir combien et si vous le dites clairement.
La panne qui n’existait que sur l’écran d’accueil
Le widget était la fonctionnalité dont j’étais le plus fier et la première à me trahir. Il a été actualisé via un travail périodique WorkManager, la manière correcte d’effectuer un travail en arrière-plan sur Android moderne. Puis un bêta-testeur m’a envoyé une capture d’écran : son widget indiquait 31°C et un ciel dégagé, et sa photo par la même fenêtre, prise quelques secondes plus tard, montrait une averse. Le chiffre de l’AQI représentait environ la moitié de celui mesuré en direct. Rien n’avait échoué. Crashlytics était propre ; la passerelle en avait renvoyé 200 toute la journée. Son appareil avait simplement placé mon application dans un compartiment App Standby restrictif, et le mode Doze avait reporté mon travailleur soi-disant périodique d’environ quatorze heures. Le widget restituait fidèlement la dernière chose qu’il avait récupérée, sans aucune idée qu’il s’agissait de la veille au soir.
