
Logiciel serein : supprimer un interrupteur qui clignote et apprendre au chat à dire dans quel mode il est
Deux petites versions de GeekBye, sans fonctionnalité phare — juste un interrupteur de réglages qui a cessé de clignoter et un assistant de chat qui vous dit enfin s'il a répondu en mode réunion ou en mode codage. Voilà ce que coûte vraiment le "logiciel serein", un détail à la fois.
Toutes les versions ne sont pas un récit de guerre. Certaines ne sont qu''une liste de petites choses presque invisibles qui étaient discrètement fausses — le genre de choses qui ne font rien planter mais qui font qu''une app paraît légèrement peu fiable, légèrement nerveuse, légèrement pas-tout-à-fait-la-vôtre. GeekBye v2.0.3 et v2.0.5 étaient de celles-là. Aucune nouvelle fonctionnalité. Juste du calme.
"Logiciel serein" sonne comme une humeur. C''est en réalité une pile de décisions précises. En voici trois.
Un interrupteur qui n''arrivait pas à se décider
Il y avait un interrupteur de réglages — celui qui contrôle la récupération audio — qui clignotait quand on le cliquait. On l''activait, et pendant une fraction de seconde il affichait activé, puis revenait brusquement à désactivé, avant de se stabiliser. Un minuscule bégaiement visuel, mais votre œil l''attrape, et ça se lit comme l''app n''est pas sûre de ce qu''elle fait.
La cause est une course d''interface classique appelée mise à jour optimiste. Quand vous cliquez un interrupteur, l''app a deux choix : attendre que le réglage soit réellement enregistré puis mettre à jour le commutateur (correct, mais ça semble lent), ou basculer le commutateur immédiatement et enregistrer en arrière-plan (ça semble instantané). GeekBye faisait le second — basculer tout de suite — mais relisait aussi la valeur enregistrée à son retour. La séquence était donc : vous cliquez, le commutateur s''active de façon optimiste, la vraie valeur enregistrée arrive un instant plus tard, et pendant une image les deux divergeaient et le commutateur rebondissait visiblement.
Le correctif consiste à faire concorder proprement la valeur optimiste et la valeur confirmée — le commutateur s''engage sur l''état que vous avez choisi et cesse de se remettre en question quand l''enregistrement se confirme. À côté, la v2.0.3 a fait une passe de texte peu glorieuse : la description de récupération audio a été raccourcie pour s''aligner sur ses lignes voisines, et la formulation des réglages a été humanisée. Rien de tout cela n''est une fonctionnalité. Tout cela est la différence entre un panneau de réglages qui semble fabriqué et un qui semble soigné.
Un tour qui ne voulait pas partir
Les tours pour nouveaux utilisateurs sont utiles exactement une fois. Le problème est cette unicité : une fois que vous l''avez vu, une surimpression d''intégration que vous ne pouvez pas fermer devient un encombrement qui signale cette app pense que vous êtes encore nouveau. La v2.0.3 a corrigé les deux bouts — le tour du produit peut désormais être masqué, et si vous le voulez vraiment de retour, il y a un bouton Rejouer le tour. Montrez-le quand il aide, écartez-vous quand il n''aide pas, et laissez l''utilisateur le convoquer à ses conditions. Respecter que l''utilisateur n''est plus nouveau est sa propre petite forme de calme.
L''assistant qui ne disait pas comment il pensait
C''est celui qui comptait vraiment, et il rejoint un problème plus profond que nous poursuivions.
L''assistant de GeekBye répond différemment selon le contexte. En réunion, "qu''en penses-tu ?" devrait obtenir une réponse conversationnelle, consciente de la réunion. En session de codage, les mêmes mots devraient en obtenir une technique. Le backend passe donc la question par le bon cadre — appelez-le mode réunion ou mode codage — et ce cadrage change réellement la réponse que vous obtenez.
L''ennui : l''app ne vous disait jamais quel mode avait répondu. Alors quand l''assistant vous donnait une réponse au goût de code à une question conversationnelle — ou répondait à une question de code comme si vous discutiez — on aurait dit que l''IA était simplement dans l''erreur. Elle n''était pas dans l''erreur ; elle était dans l''autre mode, et vous n''aviez aucun moyen de le voir. Un état caché faisait passer un comportement correct pour cassé. (La logique de mode en elle-même est un chantier plus vaste — l''orchestrateur qui décide comment répondre aux questions non liées au code pendant une session de codage — mais rien de tout cela ne vous sert si vous ne pouvez pas voir la décision qu''il a prise.)
La v2.0.5 a ajouté une pastille de mode en lecture seule au chat : une petite étiquette indiquant si l''assistant a répondu en mode réunion ou en mode codage. La lecture seule est tout l''intérêt — ce n''est pas un réglage que vous fixez, c''est une fenêtre sur une décision que le système a déjà prise. Vous cessez de deviner pourquoi une réponse sonne faux ; vous pouvez voir le cadre dont elle est venue.
Le détail qui rend la pastille honnête
Voici le choix d''ingénierie qui mérite d''être transmis, parce que c''est le genre de chose qui sépare un indicateur bricolé d''un indicateur digne de confiance.
L''information de mode arrive du backend dans le flux de la réponse — une petite image mode dans le flux d''événements envoyés par le serveur. Mais un ancien client, antérieur à cette fonctionnalité, ne saurait pas ce qu''est une image mode ; au mieux il l''ignore, au pire il affiche quelque chose de déformé. Le client annonce donc sa capacité : il envoie un en-tête de requête disant je sais afficher une pastille de mode, et le backend n''émet l''image mode qu''aux clients qui l''ont envoyé. Les anciens clients ne reçoivent jamais un signal qu''ils ne peuvent gérer ; les nouveaux reçoivent exactement l''image qu''ils ont demandée.
C''est une poignée de main d''un seul en-tête, et c''est la différence entre "on a ajouté une fonctionnalité" et "on a ajouté une fonctionnalité sans rien casser pour qui n''a pas encore mis à jour." La même passe de revue a resserré le reste du comportement : la pastille se vide au reset et quand le contexte de la conversation change (une étiquette de mode périmée est sa propre petite mensonge), et elle ne s''affiche que dans la vue chat, là où elle a sa place.
Ce que deux versions "sans fonctionnalité" nous ont appris
- La nervosité est un signal de confiance. Un interrupteur qui clignote, un commutateur qui rebondit, une étiquette qui traîne une image de trop — aucun n''est un bug au sens du plantage, mais chacun chuchote cette app n''est pas tout à fait maîtresse d''elle-même. Le calme est l''absence de ces chuchotements, et il se gagne une condition de course à la fois.
- Un mode caché fait passer un comportement correct pour un bug. L''assistant faisait la bonne chose et s''en faisait blâmer, uniquement parce que l''utilisateur ne pouvait pas voir le cadre. Quand votre système prend une décision invisible qui change la sortie, montrez la décision — une pastille en lecture seule est souvent le correctif entier.
- Les nouvelles fonctionnalités doivent être invisibles pour les clients qui ne peuvent pas les utiliser. La poignée de main par en-tête de capacité fait que le signal de mode n''atteint que les clients capables de l''afficher. La rétrocompatibilité n''est pas une vérification de version bricolée après coup ; c''est un client qui dit ce qu''il comprend et un serveur qui respecte la réponse.
Ce sont les versions dont personne n''écrit les titres de changelog, et elles expliquent en grande partie pourquoi GeekBye v2 se ressent comme il se ressent. Pour la version sur laquelle ce calme a été bâti, voir ce que coûte vraiment une version 2 (v2.0.0). Pour le travail de fiabilité à ses côtés, le jour où notre app s''est auto-DDoS (v2.0.1) et pourquoi votre preneur de notes IA cesse d''enregistrer en pleine réunion (v2.0.9).