Ich habe neulich einen Fehler behoben

Ich habe neulich einen Fehler behoben, der seit zwei Jahren in der Produktion war. Mein Chef bedankte sich, und der UX-Forscher, der ihn vor zwei Jahren anrief und erfuhr, dass das bei uns nicht möglich sei, bedankte sich. Der Produktmanager, der mehrfach versucht hatte, das Problem zu lösen, aber mit seinen Entwicklern zu keinem Ergebnis gekommen war, bedankte sich. Es stellte sich heraus, dass dies eine der größten Kundenbeschwerden war und aus irgendeinem Grund übersehen wurde? ignoriert? Ich weiß nicht. Die Änderung umfasste, wie üblich, etwa 20 Codezeilen, hatte jedoch übergroße Auswirkungen auf die Kundenzufriedenheitsbewertungen. Warum?

Das Problem

Ich arbeite in Supermarktsystemen. Denken Sie an E-Commerce mit Steroiden. Wir machen wöchentliche Anzeigen (Flyer genannt) und diese haben Rabatte. Die App erledigt auch genug Arbeit, um Hunderte von Entwicklern zu beschäftigen, die an Treueprogrammen, personalisierten Empfehlungen, der Organisation von Abholung, Lieferung und Verfügbarkeitsmanagement für Bestellungen arbeiten, die an einem physischen Standort ausgeführt werden (was ist die meisten Bestellungen), Einkaufslisten, ein benutzerdefiniertes CMS ..., Sie bekommen das Bild. Das Problem bestand darin, dass unser wöchentliches Anzeigensystem ein Problem hatte, bei dem Anzeigen einen Coupon „ausschneiden“ mussten (sprich: Aufrufen einer API), damit der reduzierte Preis in unsere Warenkorbberechnungen gelangte. Allerdings wurde die API, die wir zur Verwaltung der wöchentlichen Anzeigen verwendeten, von einem externen Anbieter verwaltet, und wenn wir dessen Endpunkt abfragten, war das Coupon-Feld oft leer, obwohl dies nicht der Fall sein sollte. Für den Kunden bedeutete dies, dass er auf ein Miniaturbild mit einem ermäßigten Preis in seiner Beschreibung klickte, aber zum vollen Preis in den Warenkorb gelangte. Wirklich frustrierend und führt zu vielen lauten Kundenbeschwerden.

Warum war es schwer zu beheben?

Das war es nicht. Allerdings ließ sich dieses Problem in unseren niedrigeren Testumgebungen nur schwer reproduzieren, da die Daten einfach nicht vorhanden waren. Dies war auch ein Problem mit der Art und Weise, wie der externe Anbieter die an uns weitergegebenen Daten formatierte. Da diesen Daten ein Feld fehlte, mussten die Daten manuell eingegeben werden, um sie zu aktualisieren. Diese Daten änderten sich jedoch in Echtzeit und waren daher OFT veraltet. Wann immer sich dieses Problem den Entwicklern stellte, war die Reaktion stets, die Schuld dem Anbieter zuzuschieben. Das ist nur natürlich, denn technisch gesehen war es die Schuld des Verkäufers. Es zeigte sich jedoch, dass die Menschen nicht unter die Oberfläche gingen, um zum Kern dessen vorzudringen, was getan werden konnte.

Es wurde klar, dass es sich hierbei um ein andauerndes und nicht um ein fortlaufendes Problem handelte. Die Trägheit des Unternehmens bestand darin, herauszufinden, warum es schwierig oder unmöglich sein würde, dies zu tun, und warum der Fehler woanders lag. Bei diesem Problem gab es Spitzen und Rückstände, aber keine Maßnahmen. Ich hatte mir diesen Code noch nie angesehen, wurde aber aufgefordert, einen Blick darauf zu werfen, da die Daten anscheinend in einem unserer API-Aufrufe zurückkamen. Hier ist ein Diagramm des Informationsflusses, den wir bereits auf unserer Website hatten:

Richtig, für jeden Entwickler ist die Antwort einfach: Verwenden Sie die Gutscheine, die wir BEREITS im Frontend erhalten, um die Felder auszufüllen, die Benutzer erwarten, damit sie ihre Rabatte erhalten können. Zu den Produkten gehörten bereits Gutscheine, was uns jedoch nicht bewusst war. Nicht nur, dass wir das nicht wussten, wir sagten auch, dass es nicht möglich sei. Das erinnert mich an diesen Artikel, den ich über das Melden eines Fehlers gelesen habe:

Leugnen, dass es ein Problem gibt. Leugne, dass es dein Problem ist. Frage nach mehr Informationen. Beschweren.

Die eigentliche Schwierigkeit bestand darin, die Daten zu reproduzieren, also habe ich sie komplett gehackt und den API-Aufrufdienst durch eine dumme Funktion ersetzt, die hartcodierte Daten zurückgab, die aus einer Produktion kopiert wurden. Unser leitender Ingenieur sagte mir, als ich ihm von dem Hack erzählte, um an die Daten in meiner lokalen Umgebung zu gelangen: „Alle Daten in niedrigeren Umgebungen sind Dummy-Daten.“

Die Lösung

Es gibt nur sehr wenige spannende Dinge über Fehlerbehebungen. Es war einfach, ein paar Array-Methoden, um sicherzustellen, dass wir nicht nach Duplikaten suchten, und es erforderte sogar einen API-Aufruf weniger als zuvor. Es funktionierte gut und die Kundenzufriedenheitswerte stiegen wie erwartet. Was ich tat, war, als Außenseiter auf das Problem und dieses spezielle Geschäftsanliegen aufmerksam zu werden, mich von meiner Naivität bei meinen Nachforschungen leiten zu lassen und innerhalb weniger Tage eine Lösung zu finden. Warum wurde das noch nie gemacht? Das ist die interessanteste Frage, und sie scheint mit ein paar Dingen zusammenzuhängen, die über meinem Gehaltsscheck liegen, aber für mich von großem Interesse sind.

Abschließende Gedanken

Ich liebe mein Unternehmen, meine direkten Vorgesetzten und viele andere Menschen, mit denen ich regelmäßig interagiere. Dies war jedoch ein Fall, in dem die Trägheit des Status quo die Oberhand gewann ...

Ich habe neulich einen Fehler behoben

Ich habe neulich einen Fehler behoben, der seit zwei Jahren in der Produktion war. Mein Chef bedankte sich, und der UX-Forscher, der ihn vor zwei Jahren anrief und erfuhr, dass das bei uns nicht möglich sei, bedankte sich. Der Produktmanager, der mehrfach versucht hatte, das Problem zu lösen, aber mit seinen Entwicklern zu keinem Ergebnis gekommen war, bedankte sich. Es stellte sich heraus, dass dies eine der größten Kundenbeschwerden war und aus irgendeinem Grund übersehen wurde? ignoriert? Ich weiß nicht. Die Änderung umfasste, wie üblich, etwa 20 Codezeilen, hatte jedoch übergroße Auswirkungen auf die Kundenzufriedenheitsbewertungen. Warum?

Das Problem

Ich arbeite in Supermarktsystemen. Denken Sie an E-Commerce mit Steroiden. Wir machen wöchentliche Anzeigen (Flyer genannt) und diese haben Rabatte. Die App erledigt auch genug Arbeit, um Hunderte von Entwicklern zu beschäftigen, die an Treueprogrammen, personalisierten Empfehlungen, der Organisation von Abholung, Lieferung und Verfügbarkeitsmanagement für Bestellungen arbeiten, die an einem physischen Standort ausgeführt werden (was ist die meisten Bestellungen), Einkaufslisten, ein benutzerdefiniertes CMS ..., Sie bekommen das Bild. Das Problem bestand darin, dass unser wöchentliches Anzeigensystem ein Problem hatte, bei dem Anzeigen einen Coupon „ausschneiden“ mussten (sprich: Aufrufen einer API), damit der reduzierte Preis in unsere Warenkorbberechnungen gelangte. Allerdings wurde die API, die wir zur Verwaltung der wöchentlichen Anzeigen verwendeten, von einem externen Anbieter verwaltet, und wenn wir dessen Endpunkt abfragten, war das Coupon-Feld oft leer, obwohl dies nicht der Fall sein sollte. Für den Kunden bedeutete dies, dass er auf ein Miniaturbild mit einem ermäßigten Preis in seiner Beschreibung klickte, aber zum vollen Preis in den Warenkorb gelangte. Wirklich frustrierend und führt zu vielen lauten Kundenbeschwerden.

Warum war es schwer zu beheben?

Das war es nicht. Allerdings ließ sich dieses Problem in unseren niedrigeren Testumgebungen nur schwer reproduzieren, da die Daten einfach nicht vorhanden waren. Dies war auch ein Problem mit der Art und Weise, wie der externe Anbieter die an uns weitergegebenen Daten formatierte. Da diesen Daten ein Feld fehlte, mussten die Daten manuell eingegeben werden, um sie zu aktualisieren. Diese Daten änderten sich jedoch in Echtzeit und waren daher OFT veraltet. Wann immer sich dieses Problem den Entwicklern stellte, war die Reaktion stets, die Schuld dem Anbieter zuzuschieben. Das ist nur natürlich, denn technisch gesehen war es die Schuld des Verkäufers. Es zeigte sich jedoch, dass die Menschen nicht unter die Oberfläche gingen, um zum Kern dessen vorzudringen, was getan werden konnte.

Es wurde klar, dass es sich hierbei um ein andauerndes und nicht um ein fortlaufendes Problem handelte. Die Trägheit des Unternehmens bestand darin, herauszufinden, warum es schwierig oder unmöglich sein würde, dies zu tun, und warum der Fehler woanders lag. Bei diesem Problem gab es Spitzen und Rückstände, aber keine Maßnahmen. Ich hatte mir diesen Code noch nie angesehen, wurde aber aufgefordert, einen Blick darauf zu werfen, da die Daten anscheinend in einem unserer API-Aufrufe zurückkamen. Hier ist ein Diagramm des Informationsflusses, den wir bereits auf unserer Website hatten:

Richtig, für jeden Entwickler ist die Antwort einfach: Verwenden Sie die Gutscheine, die wir BEREITS im Frontend erhalten, um die Felder auszufüllen, die Benutzer erwarten, damit sie ihre Rabatte erhalten können. Zu den Produkten gehörten bereits Gutscheine, was uns jedoch nicht bewusst war. Nicht nur, dass wir das nicht wussten, wir sagten auch, dass es nicht möglich sei. Das erinnert mich an diesen Artikel, den ich über das Melden eines Fehlers gelesen habe:

Leugnen, dass es ein Problem gibt. Leugne, dass es dein Problem ist. Frage nach mehr Informationen. Beschweren.

Die eigentliche Schwierigkeit bestand darin, die Daten zu reproduzieren, also habe ich sie komplett gehackt und den API-Aufrufdienst durch eine dumme Funktion ersetzt, die hartcodierte Daten zurückgab, die aus einer Produktion kopiert wurden. Unser leitender Ingenieur sagte mir, als ich ihm von dem Hack erzählte, um an die Daten in meiner lokalen Umgebung zu gelangen: „Alle Daten in niedrigeren Umgebungen sind Dummy-Daten.“

Die Lösung

Es gibt nur sehr wenige spannende Dinge über Fehlerbehebungen. Es war einfach, ein paar Array-Methoden, um sicherzustellen, dass wir nicht nach Duplikaten suchten, und es erforderte sogar einen API-Aufruf weniger als zuvor. Es funktionierte gut und die Kundenzufriedenheitswerte stiegen wie erwartet. Was ich tat, war, als Außenseiter auf das Problem und dieses spezielle Geschäftsanliegen aufmerksam zu werden, mich von meiner Naivität bei meinen Nachforschungen leiten zu lassen und innerhalb weniger Tage eine Lösung zu finden. Warum wurde das noch nie gemacht? Das ist die interessanteste Frage, und sie scheint mit ein paar Dingen zusammenzuhängen, die über meinem Gehaltsscheck liegen, aber für mich von großem Interesse sind.

Abschließende Gedanken

Ich liebe mein Unternehmen, meine direkten Vorgesetzten und viele andere Menschen, mit denen ich regelmäßig interagiere. Dies war jedoch ein Fall, in dem die Trägheit des Status quo die Oberhand gewann ...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow