Es gibt viele Umstände, die Katalysatoren für die Erstellung schlechter Software sein können: die verwendeten Tools, die Qualität der Kommunikation in einem Team, die persönlichen Eigenschaften von Entwicklern, Methoden usw. Und eines unter ihnen ist die Wurzel fast aller anderen: imaginäre Probleme.
Der größte Teil der komplexen oder zagabovannoy-Software sollte nicht komplex sein, und noch mehr zagabovannoy. Es wurde einfach geschaffen, um nicht die Aufgaben auszuführen, die dem ursprünglichen Plan zugrunde liegen.
Podcast-Geschichte
Stellen Sie sich vor, Sie nehmen einen beliebten Podcast auf und denken irgendwann darüber nach, eine eigene Website zu erstellen. Sie enthalten Informationen zu Ihrem Podcast, Aufzeichnungen früherer Ausgaben, Artikel und möglicherweise Werbung. Wie viel können Sie den Gewinn mit einigen externen Verlagen teilen?
Und so entscheiden Sie sich, Leute einzustellen, die diese Seite für Sie erstellen. Sie schreiben absolut klare Anforderungen an sie:
- Schnelles Laden der Website in Nordamerika
- Unterstützung für das Herunterladen früherer Podcast-Versionen und das Live-Streaming aktueller Versionen
- Die Sendung sollte in den ersten 15 Minuten für 99,99% der Benutzer nicht fallen oder einfrieren. Niemals wünschenswert, aber trotzdem.
- Integration mit Google AdWords (und in Zukunft möglicherweise mit Analoga)
- Integration mit Facebook-Sendungen, weil Sie dort Ihre Sendungen ausgeben. Wenn Sie eine alternative Lösung erstellen können, mit der Sie bequemer streamen können - noch besser.
Sie geben diese Anforderungen an Entwickler weiter und kommunizieren möglicherweise ein wenig mit ihnen. 2 Monate vergehen. Sie zeigen Ihnen eine Demo und Sie sind mit roten Flecken bedeckt. Es wird klar, dass Sie gerade 15.000 Dollar in den Abgrund geworfen haben. Was sie dir gezeigt haben, ist auf jeder Seite völlig inakzeptabel, nur ein Haufen Müll. Sie wollen Ihr Geld zurück, aber der Zug ist bereits abgefahren.
Es ist sehr einfach, sich über den Anblick einer demonstrierten Site zu ärgern. Bei der ersten Eröffnung erstarrte alles. Dann schien es zu funktionieren und Sie fragten, wie Sie die Art der Werbung ändern können, die auf der Website angezeigt wird. Sie haben Ihnen dafür eine Twist-and-Bike-Oberfläche gezeigt, die einfach unrealistisch ist, wenn Sie sie selbst beherrschen. Facebook-Streams sind langsam. Alles ist schrecklich.
Aber das Entwicklungsteam versteht nicht, warum Sie verärgert sind. Aus ihrer Sicht haben sie eine Leistung vollbracht, nachdem sie in nur zwei Monaten ein so komplexes Produkt hergestellt hatten. Sie haben ihr ganzes Talent in ihn gesteckt, ihre ganze Seele. Überzeugen Sie sich selbst, welche wunderbaren Funktionen sie hinzugefügt haben:
- Erstaunliches Empfehlungssystem
- Spracherkennungsalgorithmus, der Untertitel unter Ihrer Sendung IN REAL TIME anzeigt !!!
- Die Hauptseite der Site wird in 200 ms überall auf der Welt geladen
- Das Broadcast-Protokoll und der Client wurden von Grund auf neu geschrieben, und Facebook wurde durch ein Plugin hinzugefügt. Sie können jederzeit Plugins für andere Plattformen hinzufügen!
- Es ist möglich, in 20 verschiedene Werbeplattformen zu integrieren
Sie sehen schon, was das Problem ist, oder? Sie haben nach einem sehr spezifischen, hochspezialisierten Produkt mit einigen zusätzlichen Funktionen gefragt, die Sie benötigen. Das Entwicklungsteam hörte es anders. Für sie wurde all Ihr „Wünschenswertes“, „Bequemeres“ und „In der Zukunft“ zu einer aufregenden Aufgabe, ein gemeinsames, erweiterbares, skalierbares und ergänztes Produkt von enormen Ausmaßen zu entwickeln, bei dessen Implementierung Sie eine Reihe interessanter Probleme heldenhaft lösen können. Nun, und natürlich gibt es nichts, was durch Kleinigkeiten wie das Polieren und das Idealisieren der Grundfunktionalität des Produkts abgelenkt werden könnte - wir haben welchen Maßstab, es ist keine Zeit, es jetzt auszutauschen!
Ein weiteres Problem ist, dass Sie höchstwahrscheinlich nicht direkt mit den direkten Entwicklern des Systems kommuniziert haben. Sie spielten ein verdorbenes Telefon: Sie sprachen mit einem Verkäufer, der Aufgaben an jemanden aus dem mittleren Management seines Unternehmens übergab, dort Geschäftsspezifikationen schrieb, sie dem Projektmanager gab, technische Spezifikationen schrieb und sie dem Teamleiter gab, der sie in Aufgaben aufteilte und an die Entwickler verteilt. Nun, jeder der Entwickler hat auch seine Aufgaben im Kontext seines Verständnisses verstanden und realisiert.
Realitätsvermeidungsmechanismus
Imaginäre Probleme sind interessanter zu lösen als echte. Sehr kluge Leute spielen komplexe Spiele, lösen mathematische Probleme, schreiben Bücher zu abstrakten Themen - kostenlos oder fast kostenlos. Gleichzeitig wird Ihnen der mittelständische Programmierer für eine ganz normale mobile Anwendung eine sehr hohe Rechnung stellen. Dies liegt nicht daran, dass ein durchschnittlicher Programmierer schwerer zu finden ist als ein Genie. Dies liegt daran, dass es einfach und angenehm ist, interessante Aufgaben zu erledigen, aber keine Routine.
Die meisten Programmierer möchten an interessanten Aufgaben arbeiten und gutes Geld dafür bekommen. Dies ist schwer zu erreichen. Natürlich können Sie darüber spekulieren, was ein „interessantes Problem“ ist, aber für die meisten Entwickler ist es etwas, das sehr nahe an der Grenze des Feldes theoretisch lösbarer Probleme liegt. Etwas, das schwer zu erreichen, aber möglich ist.
Geben Sie einer rationalen Person viele routinemäßige, nicht automatisierte Aufgaben, und früher oder später werden Sie sie in den Griff bekommen. Das menschliche Gehirn hat jedoch nach Millionen von Jahren der Evolution einige verschiedene Tricks entwickelt, um sich in einem angemessenen Zustand zu halten. Wenn Opfer von Gewalt in die Welt ihrer Fantasien entkommen können und so unschuldig zu jahrelanger Unternehmensentwicklung oder Web-Freelancing im Laufe der Zeit verurteilt sind, finden sie Erlösung bei der Lösung imaginärer Probleme.

Die Anzahl und Komplexität der erfundenen Probleme hängt von der Vorstellungskraft des Programmierers und der Komplexität seiner eigentlichen Aufgaben ab. Es ist zu beachten, dass dieser Ansatz selbst nicht nur für Softwareentwickler gilt. Manager, Verkäufer, Personalabteilung, Support, Anwälte und Buchhalter finden ihre eigenen einzigartigen Wege, um nicht existierende Probleme zu schaffen und heldenhaft zu überwinden. Sie beteiligen sich an Entscheidungen, die außerhalb ihrer Zuständigkeit liegen, sprechen bei Besprechungen, bei denen ihre Anwesenheit eine reine Formalität ist, und so weiter. Sie überschätzen auch das Ausmaß der Probleme und ihre Rolle bei der Lösung dieser Probleme („Unsere neue Doggy Diary-Anwendung sollte vom ersten Tag an zu 101% mit GDPR kompatibel sein! Wir können es kaum erwarten, dass sich der Kunde beschwert!“). Sie blasen die Mitarbeiter auf, um den Eindruck zu erwecken, wie wichtig die Arbeit ihres Teams ist, und beschäftigen sich dann mit den Problemen Wachstum, Skalierung und Logistik (und in einem großen Team wird es immer solche Probleme geben).
Viele der Entwickler sind schlau, aber viele ihrer Aufgaben sind ziemlich dumm. Dieser Widerspruch zwingt kluge Leute, sich andere auszudenken, obwohl sie in der Realität nicht existieren, aber interessante Aufgaben.
Verwöhnte Telefonarchitektur
Manchmal sind imaginäre Probleme nicht das Ergebnis der Fantasien gelangweilter Entwickler. Manchmal ist dies das Ergebnis eines "kaputten Telefons".
Ich arbeite manchmal freiberuflich. Als ich gerade anfing, konnte ich es mir nicht leisten, Kunden zu sortieren. Dies bedeutete die Notwendigkeit, alle hintereinander zu nehmen und in allen Farben die verschiedensten Manifestationen von Abweichungen der menschlichen Psyche zu beobachten. Ich habe Ketten von Hunderten von Buchstaben zum Thema völlig immaterieller Prototypendetails gesehen. Ich habe gesehen, wie Leute jede Woche absolut jeden Absatz der Spezifikation geändert haben. Ich hatte Kunden, die für Projekte einiger trivialer Websites nach der Möglichkeit fragten, sofort mit ihnen zum ICO zu gehen oder künstliche Intelligenz an sie zu binden.
Es gab durchaus vernünftige Klienten, denen jedoch Kenntnisse (oder Vokabeln?) Fehlen, um alle ihre Anforderungen in verständlichen Formulierungen auszudrücken. Dies ist an sich kein Problem. Teil der Arbeit von Softwareentwicklern ist genau das Sammeln von Anforderungen und das Schreiben von Spezifikationen. Dafür werden wir bezahlt, einschließlich Geld, und diese Arbeit kann sogar mehr oder weniger normal ausgeführt werden, wenn Sie normalen Zugang zum Kunden haben und genügend Zeit haben. Das Problem ist, dass dieser Zugriff manchmal nicht möglich ist und es mehrere Vermittler zwischen Ihnen gibt.
Die meisten Unternehmen möchten „Verkäufer“ in separaten Positionen haben. Dies sind besondere Menschen, die potenzielle Kunden suchen und mit ihnen Aufgaben, Termine und Preise besprechen. Es sind diese Leute, die das Nützlichste herausfinden und die meisten Fragen stellen können. Aber das sind nicht die Leute, die dieses Projekt schreiben werden. Zwischen Verkäufern und Programmierern gibt es 2, 3, 4 oder mehr Schichten von Managern, Architekten, Analysten und Teamleitern auf mittlerer und unterer Ebene. Ja, es können sehr qualifizierte Leute sein. Aber trotzdem - das sind zusätzliche Schichten. Egal wie sehr sie es versuchen, die Informationen, die sie durchlaufen, werden sich ändern. Jemand wird etwas (seiner Meinung nach) Unwichtiges verwerfen, ein anderer wird etwas Unbestimmtes klären, aber (seiner Meinung nach) offensichtlich wird der dritte den dummen Wortlaut durch den richtigen (wie er sicher ist) Begriff ersetzen - und jetzt kann die ursprüngliche Aufgabe nicht mehr erkannt werden. Ein Verkäufer kann dem Kunden einen Satz wie "Aber für 39.999 können wir das auch in der Blockchain tun" geben. Wenn der Kunde beißt, muss sich das Entwicklungsteam auf zwei Ebenen darunter den Kopf zerbrechen. Wie kann dies in der Blockchain geschehen? Aber es ist bereits verkauft und bezahlt, wir werden es tun.
Somit geht das ursprüngliche Problem bei Spekulationen und Umdenken verloren. Lücken zwischen neu erfundenen Problemen (wenn sie dort nicht einmal geklaut hätten) und Menschen, die sie mit ihren eigenen imaginären Problemen und ihren brillanten Lösungen füllen wollen. Weil es immer noch Freiheit ist, keine Routine.
Künstliche Komplexität und natürliche Selektion
Oft gibt es eine noch dunklere Seite. Die Erfindung imaginärer Probleme und Methoden zu ihrer Lösung kann zum Wachstumstreiber des Unternehmens werden und in Zukunft vielleicht zu seinem Hauptgeschäft, dem wichtigsten Teil seiner Existenz, der nicht aufgegeben werden kann.
„Menschen, die für die Lösung komplexer Probleme ausgewählt wurden, haben keinen Anreiz, einfache Probleme zu lösen“ - Taleb
Haben Sie von den drei besten Ingenieuren gehört, die plötzlich herausgefunden haben, dass Online-Banking im Allgemeinen eine recht einfache Sache ist? Sie erstellten einfache und daher störungsfreie Software, verwendeten die richtigen Techniken und Programmiersprachen und übertrugen dann alle Hauptbanken auf ihre Plattform.
Nein, nicht gehört? Dies liegt daran, dass dies nicht war. Aber was passiert ist, ist und sein wird - getrennte Teams von Tausenden von Programmierern, die für verschiedene Banken arbeiten und buchstäblich ein halbes Jahr lang in der Lage sind, das gesamte Team zur Implementierung einer Funktion wie „Rollback-Transaktion“ zu nutzen. So wird Bankensoftware geschrieben, ja.
Und das liegt natürlich nicht daran, dass es so schwierig ist, eine Zahl von einer Spalte in eine andere zu verschieben, nein. Es ist nicht schwer. Indizieren Sie hier das gesamte Internet und zeigen Sie relevante Suchergebnisse in Sekundenbruchteilen an - dies ist schwierig. Ein paar Leute in der Garage haben es jedoch geschafft. Für den Rollback der Transaktion werden 1000 Personen und sechs Monate benötigt.
Das Problem dabei ist, dass das Bankenökosystem bei seiner Hauptaufgabe - der Unterstützung des Bankenökosystems - unglaublich gut ist. Die Räder drehen sich, die Papiere rascheln und morgen wird alles so sein wie gestern. Alles hat Trägheit. Und wenn wir in den letzten 5 Jahren an einem imaginären Problem gearbeitet haben, werden wir auch morgen daran arbeiten.
"Es ist schwer, jemanden zum Verstehen zu bringen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht." - Upton Sinclair
Und alle arbeiten weiter an fiktiven Aufgaben, denn wenn sie einen Moment innehalten und sich die realen ansehen, wird klar, dass ihr gesamtes System kaputt ist. Plötzlich kann sich herausstellen, dass Vasya, der in dieser Ecke sitzt, seit 10 Jahren den Status der internen Serverfarm überwacht. Die Migration von AWS zu AWS fand vor 5 Jahren erfolgreich statt. Plötzlich stellt sich heraus, dass die ganze Arbeit von Mascha darin besteht, Dashas Berichte an jemanden zu senden. Ein solches Bewusstsein ist sehr schwierig und Menschen versuchen unbewusst, Situationen zu vermeiden, in denen sie versehentlich gemacht werden können.
Und wir lösen weiterhin imaginäre Probleme.