Tout développeur expérimenté le sait : on a pas toujours le loisir de créer une application de A à Z d’en faire son bébé rien qu’à soi et de la voir grandir… Non souvent on doit récupérer et maintenir un logiciel qui est passé entre plusieurs mains et dont, au final, on ne connait pas grand chose mais pour lequel il faut résoudre un bogue bloquant et urgent … Et c’est justement ce qui m’est arrivé dernièrement et qui est l’objet de ce billet.
Ainsi on m’a demandé de corriger une application iOS qui dialogue avec un boîtier en Bluetooth Low Energy ; l’application est assez conséquente mais je connais iOS, l’Objective-C, le Swift (un peu) et le Bluetooth (j’ai eu l’occasion de mener plusieurs projets autour de cette technologie fort pratique) donc cela ne m’effraie pas plus que cela. Me voilà donc devant gérer cet ensemble et comprendre pourquoi le boitier ne se reconnecte pas de manière fiable lorsque l’application iOS est en background (arrière-plan) alors tout se passe bien si l’application est en foreground (premier plan).
J’essaie de nombreuses solutions mais je n’arrive toujours pas à comprendre pourquoi je ne reçois pas un message essentiel du système ! Qu’est-ce que je fait ou ne fait pas en amont pour que cet indispensable message ne me parvienne pas ?
Et là commence le doute ! En fait plus pour mes responsables que pour moi : je sais que je vais trouver le problème mais je ne sais pas dire quand et cela est dur à entendre et à communiquer au client … Mais au final c’est passionnant parce qu’il y a un challenge à relever et j’aime cela mais ce n’est pas au goût de tout le monde et bien entendu je suis le coupable tout désigné (limite incapable) … On va chercher des conseils à droite et à gauche et on m’incite à les suivre ; je le fais malgré moi car je ne comprends pas comment cela va me faire parvenir le message qui me manque … Toujours pas de solution, alors on trace, on met des logs, on me demande si j’ai vraiment fait ce que l’on m’a demandé (suggérer très fortement) laissant entendre que si j’avais appliqué les conseils prodigués cela aurait du fonctionner … De là à ce que l’on insinue que je mente ce n’est vraiment pas très loin …
La pression monte mais je prends néanmoins la semaine de vacances que j’avais posé … Cela continue à m’obséder pendant mes vacances alors je prends des initiatives (au moins je ne devrais pas me justifier car c’est sur mes vacances) et j’achète un sniffer qui va me permettre de voir ce qui se passe au bas niveau et comparer avec un autre type de boitier qui lui fonctionne … Je configure tout cela pendant mes vacances et on me laisse faire l’utiliser à mon retour de vacances pour continuer à investiguer …
Et là la source du problème finit par m’apparaitre ! Je me sens comme le Terminator dans Terminator 3 qui est à la recherche de cibles secondaires et qui découvre le sang de la cible ultra-prioritaire : John Connor ! Je manque de crier lorsque je m’en aperçois, l’orgasme est réellement tout proche, cet orgasme du développeur inversement proportionnel à la confiance que l’on m’accordait … Néanmoins il ne faut pas crier victoire trop vite : il faut tester encore et encore, comprendre pourquoi ce qui manque est la source du problème …
Comme je le soupçonnais mais je n’osais pas le dire : c’est le boitier et non l’application qui était en cause mais on m’accordait tellement peu de crédits qui fallait le prouver noir sur blanc et sans aucun doute …
Le boitier a été mis à jour et le problème a été définitivement résolu mais je ne suis pas prêt d’oublier comment j’y suis arrivé ni les difficiles moments passés … On aurait du fêter cela mais ce n’était pas à moi de le faire et j’attends toujours …