Lass mich dir von einem der schlimmsten Bugs erzählen, die ich (bis jetzt) in meiner Karriere als Software-Entwickler produziert habe.
Ich erinnere mich daran, als wäre es gestern gewesen. Im Jahr 2012 arbeitete ich für ein Unternehmen, das einen Online-Marktplatz für Immobilien betreibt. Viele Menschen sind auf ihre Dienste angewiesen, um beispielsweise eine Wohnung zu finden.
Suchmaschinenoptimierung
Ich arbeitete im SEO-Team. SEO steht für Suchmaschinenoptimierung. Es geht darum, sicherzustellen, dass dieser Online-Marktplatz ganz oben erscheint, wenn man nach Begriffen wie „Wohnung“ oder „Apartment“ googelt.
Der Wettbewerb in diesem Markt war hart. Zwei andere bemerkenswerte Akteure wollten die Pole-Position mehr als alles andere auf der Welt.
Das Problem mit Google ist: Das erste Suchergebnis erhält den Großteil des relevanten Traffics. Und Traffic ist das A und O für Online-Marktplätze wie diesen. Es gibt keine stationären Geschäfte. Alles passiert online. Und Google ist der Startpunkt der Kundenreise.
Da es bei SEO darum geht, deine Website relevant erscheinen zu lassen, benötigt man guten einzigartigen Inhalt auf seinen Seiten – und davon braucht man eine Menge.
Für häufig verwendete Wörter wie „Apartment“ dauert es viele Jahre, um auf die erste Seite der Google-Suchergebnisse zu gelangen. Das liegt hauptsächlich daran, dass so viele Unternehmen um Sichtbarkeit konkurrieren, wenn der Nutzer nach „Apartment“ sucht.
Der Googlebot klingelt immer zweimal.
Zweimal am Tag erhielt die Website einen einzigartigen Besucher – den Webcrawler-Bot von Google.
Der Googlebot ist eine Software, die im Grunde den ganzen Tag im Internet surft. Seine Aufgabe ist es, allen Links zu folgen und sich alle Seiten des Webs anzusehen. Er scannt den Inhalt der Webseite und fügt die Webseite dem Google-Suchindex hinzu, zusammen mit einigen Meta-Tags.
Wenn du nach einem bestimmten Begriff googelst, sagen wir „Apartment“, dann greift die Google-Suchmaschine auf ihr Archiv zu und sucht nach Webseiten, die mit diesem Begriff verbunden sind. Anschließend sortiert sie die gefundenen Seiten nach Relevanz und präsentiert dir das Ergebnis. Die relevanteste Webseite erscheint ganz oben in der Suchergebnisliste.
Kurz gesagt, der Googlebot durchsucht das Internet nach neuen Inhalten und füllt den Google-Suchindex. Die Google-Suchmaschine nutzt dann diesen Index, um schnell relevante Seiten basierend auf dem Suchbegriff des Nutzers zu finden.
In unserem Fall kam der Googlebot zweimal am Tag, zuerst um 2 Uhr morgens und dann wieder um 14 Uhr. Das konnten wir in unseren Überwachungstools sehen.
Du kommst nicht vorbei!
Manchmal möchten wir nicht, dass der Googlebot unsere Seite in den Google-Suchindex aufnimmt. Website-Besitzer haben dafür unterschiedliche Gründe. Einige möchten beispielsweise nicht gefunden werden, während andere unfertige Seiten haben, die noch nicht bereit sind.
In diesen Fällen können wir den Googlebot „bitten“, unsere Seite nicht in den Index aufzunehmen. Das erreichen wir mit einem speziellen Meta-Tag im Header der Webseite:
<html>
<head>
<meta name="robots" content="noindex nofollow">
<!-- ... -->
</head>
<body>
<!-- ... -->
</body>
</html>
noindex
bedeutet: „Bitte füge die Seite nicht in deinen Index ein.“ und nofollow
bedeutet: „Bitte folge keinem Link auf dieser Seite.“
Mit noindex
kannst du deine Seite im Grunde transparent machen und mit nofollow
kannst du sie zu einer Sackgasse für den Webcrawler machen.
Das Motto von Google zu dieser Zeit war: „Sei nicht böse.“ Daher gab es wirklich keinen Grund zu glauben, dass der Googlebot unsere Privatsphäre nicht respektieren würde.
Test & Produktion
Die meisten Softwareunternehmen haben ein Testsystem (auch bekannt als Umgebung), um neue Features und Änderungen zu testen. Ein Testsystem TEST
ist mehr oder weniger eine Kopie des Produktionssystems PROD
mit all den Servern, Datenbanken und anderen Komponenten.
Eine gängige Möglichkeit für Entwickler, auf die TEST
-Umgebung zuzugreifen, besteht darin, test.company.com
anstelle von company.com
zu besuchen.
Wenn die Entwickler mit dem, was sie im TEST
-System sehen, zufrieden sind, kopieren sie die Änderungen in das PROD
-System. Dies ist der Moment, in dem auch die regulären Benutzer schließlich die Änderungen sehen werden.
Die TEST
-Umgebung ist aus Sicht des Googlebots eine Website wie jede andere Website. Und da wir nicht möchten, dass unfertige Funktionen oder bevorstehende saisonale Aktionen an Endbenutzer weitergegeben werden, müssen wir dem Googlebot mitteilen, dass er die TEST
-Umgebung ignorieren soll:
<head>
{hostname.includes("test.") ? (
<meta name="robots" content="noindex nofollow">
) : (
<meta name="robots" content="index follow">
)}
<!-- ... -->
</head>
Es dauert Jahre, um einen Ruf aufzubauen…
Eines Tages waren mein Team und ich damit beschäftigt, an einigen neuen Features zu arbeiten, als der Produktverantwortliche hereinkam. Er fragte, ob wir eine bestimmte Seite aus dem Index nehmen könnten. Sie unterstützt das Ranking bei Google nicht wirklich.
Also tat ich es. Ich öffnete die Datei mit dem Quellcode für die Seite und entfernte die if/else-Anweisung, weil die TEST
-Seite nicht indiziert werden sollte und die PROD
-Seite ebenfalls nicht:
<head>
<meta name="robots" content="noindex nofollow">
<!-- ... -->
</head>
Gegen 13 Uhr ging mein Team zum Mittagessen.
Ich setzte mich gerade hin, bereit, in meinen wohlverdienten Döner zu beißen, als mein Telefon klingelte.
Es war der Produktverantwortliche:
„Hast du dem Googlebot gesagt, dass er unsere Seite aus dem Google-Index nehmen soll?“
Ich: „Ja, das hast du gewollt.“
Er: „ABER NICHT DIE GESAMTE WEBSITE!!!“
Ich: „Was meinst du?“
Er: „Alle Seiten des Marktplatzes sind derzeit auf NOINDEX gesetzt! Nicht nur die eine Seite, um die ich dich gebeten habe.“
Oh je.
Wir ließen unser Essen fallen, griffen unsere Sachen und rannten zurück ins Büro.
Wenn das, was der Produktverantwortliche gerade gesagt hatte, wahr war, hatten wir weniger als eine Stunde Zeit, um das Problem zu beheben. Weniger als eine Stunde, bevor der Googlebot kam.
Sobald der Googlebot noindex
sieht, würde er den gesamten Marktplatz aus dem Google-Suchindex entfernen. Es würde Jahre dauern, um wieder an die Spitze der Suchergebnisse zu gelangen. Unsere Wettbewerber würden den ganzen Traffic – und die Verkäufe – bekommen.
Ich begann mich zu fragen, ob die Konkurrenz mir eine Dankeskarte schicken würde? Und ob die Karte tatsächlich ihren Weg in die Antarktis finden würde…
Es ist eine Teamleistung.
Wir fanden und behoben das Problem rechtzeitig. Ich hatte die falsche Datei geändert, und wir schafften es, die vorherige Version der Datei mit der richtigen Anweisung für den Googlebot zu veröffentlichen.
Der Bot kam und ging, als wäre nichts passiert. Der Marktplatz blieb auf Position eins der Suchergebnisse. Alles war gut.
In unserer zweiwöchentlichen Retrospektive besprachen wir das Problem und wie wir solche Vorfälle in Zukunft verhindern könnten.
Wir einigten uns auf zwei Maßnahmen:
1) Automatisierte Tests
Wir fügten einen fehlenden Test zu unserem Sicherheitsnetz hinzu. Ein Test, der automatisch ausgeführt wurde, jedes Mal wenn wir die Produktionsumgebung änderten. Er würde uns eine Benachrichtigung senden, falls das robots
-Meta-Tag auf PROD
jemals wieder noindex
signalisieren sollte.
2) 4-Augen-Prinzip
Wir entschieden, dass jede Änderung an unserer Software von einem zweiten Paar Augen überprüft werden musste – vier Augen sehen mehr als zwei. Wir fanden Git Pull Requests super ineffizient und einigten uns auf persönliche Code-Reviews.
Die automatisierten Tests und die Kontrolle eines Kollegen stellten ein zweischichtiges Sicherheitsnetz dar. Und diese Redundanz war in den folgenden Monaten und Jahren äußerst hilfreich. Wir entdeckten nicht nur viele Bugs, bevor sie die Kunden erreichten, sondern unsere Codequalität verbesserte sich auch erheblich und wir lernten viel voneinander.
Programmieren machte nie mehr Spaß.
Was wäre wenn?
Lass uns für einen Moment annehmen, wir hätten das Problem nicht rechtzeitig beheben können.
Was wären die Konsequenzen, wenn ein Bug zu einem Ausfall, einem Datenverlust oder dem Verlust von Nutzern an die Konkurrenz führen würde?
Würde das Unternehmen uns feuern? Würden sie uns verklagen? Müssten wir bis ans Ende unseres Lebens für den Umsatzverlust aufkommen?
Höchstwahrscheinlich nicht.
Solange wir nicht absichtlich etwas Böses tun (und dabei erwischt werden), ist es wirklich schwierig zu beweisen, dass es allein unsere Schuld war. Softwareentwicklung ist kompliziert, und in der Regel sind mehr als eine Person beteiligt. Programmierer, Administratoren, Produktverantwortliche …
Es ist eine Teamleistung, und unsere tägliche Arbeit wird auch von dem beeinflusst, was andere in der Vergangenheit getan haben. Zum Beispiel die Dateinamen, die jemand vor ein paar Jahren gewählt hat, oder die Tests, die sie nicht geschrieben haben.
Am Ende läuft es immer darauf hinaus, dass der Chef keinen angemessenen Prozess eingerichtet hat, um solche Vorfälle zu verhindern.
Das bedeutet natürlich nicht, dass wir tun können, was wir wollen und sorglos herumlaufen können. Nein, wir müssen weiterhin unser Bestes geben und auf Details achten.
Aber wir dürfen uns auch nicht von der Angst lähmen lassen, Dinge kaputt zu machen. Wir müssen den Mut haben, Dinge zu verändern. Dinge kaputt zu machen ist normal. Wir müssen nur sicherstellen, dass wir daraus lernen.
Moderne agile Softwareentwicklungspraktiken wie das Schreiben von Tests, Deployment-Automatisierung oder Retrospektiven sind aus einem bestimmten Grund vorhanden. Und sie sollten nicht leichtfertig übersprungen oder verändert werden. Sie schaffen Redundanz, erhöhen die Qualität und bieten die Möglichkeit, aus Fehlern zu lernen.
Und wenn ein Team gute Entwicklungspraktiken wählt, wird das Scheitern zu einer sicheren Sache.
Bis demnächst
-David
Sieht dein Projektportfolio wie alle anderen aus?
Melde dich für meinen Newsletter an und erhalte…
10 einzigartige Portfolio-Projektideen
Hebe dich von der Masse ab.
Ich halte dich mit ein paar Emails pro Monat auf dem Laufenden. Selbstverständlich kannst du dich jederzeit abmelden.