Wie ein kleines Programm ein kleines Büro in ein Bundesunternehmen mit einem Gewinn von über 100 Millionen Rubel/Monat verwandelte

Ende Dezember 2008 wurde ich zu einem der Taxidienste in Perm eingeladen mit dem Ziel, bestehende Geschäftsprozesse zu automatisieren. Generell wurden mir drei grundsätzliche Aufgaben übertragen:


  • Entwickeln Sie ein Softwarepaket für ein Callcenter mit einer mobilen Anwendung für Taxifahrer und automatisieren Sie interne Geschäftsprozesse.
  • Alles musste in kürzester Zeit erledigt werden.
  • Verfügen Sie über Ihre eigene Software, anstatt sie von Drittentwicklern zu kaufen, die in Zukunft im Zuge der Geschäftsentwicklung unabhängig an sich ständig ändernde Marktbedingungen angepasst werden kann.

Damals verstand ich nicht, wie dieser Markt funktioniert und welche Nuancen er hat, aber dennoch waren mir zwei Dinge klar. Das Callcenter muss auf Basis der Open-Source-Asterisk-Software PBX aufgebaut sein. Der Informationsaustausch zwischen dem Callcenter und der mobilen Anwendung ist im Wesentlichen eine Client-Server-Lösung mit allen entsprechenden Mustern für die Gestaltung der Architektur des zukünftigen Projekts und seiner Programmierung.

Nach einer vorläufigen Einschätzung der Aufgaben, Termine und Kosten des Projekts und der Abstimmung aller notwendigen Fragen mit dem Inhaber des Taxidienstes begann ich im Januar 2009 mit der Arbeit.

Mit Blick auf die Zukunft werde ich gleich sagen. Das Ergebnis war eine skalierbare Plattform, die auf über 60 Servern in 12 Städten in Russland und 2 in Kasachstan lief. Der Gesamtgewinn des Unternehmens betrug über 100 Millionen Rubel pro Monat.

Bühne eins. Prototyp

Da ich zu diesem Zeitpunkt keine praktische Erfahrung in der IP-Telefonie hatte und Asterisk im Rahmen von „Heimversuchen“ nur oberflächlich kennengelernt hatte, wurde beschlossen, mit der Entwicklung einer mobilen Anwendung und eines Serverteils zu beginnen. Gleichzeitig werden Wissenslücken zu anderen Aufgabenstellungen geschlossen.

Wenn mit der mobilen Anwendung alles mehr oder weniger klar wäre. Damals konnte es nur für einfache Tastentelefone in Java geschrieben werden, aber das Schreiben eines Servers, der mobile Clients bedient, war etwas komplizierter:

  • Welches Server-Betriebssystem wird verwendet?
  • Basierend auf der Logik, dass eine Programmiersprache für eine Aufgabe ausgewählt wird und nicht umgekehrt, und unter Berücksichtigung von Punkt 1, welche Programmiersprache für die Lösung von Problemen optimal ist;
  • Bei der Planung mussten die zu erwartenden künftigen hohen Belastungen der Anlage berücksichtigt werden;
  • Welche Datenbank kann bei hoher Auslastung Fehlertoleranz gewährleisten und wie kann eine schnelle Datenbankantwortzeit aufrechterhalten werden, wenn die Anzahl der an sie gerichteten Anforderungen steigt?
  • Ausschlaggebend waren die Geschwindigkeit der Entwicklung und die Möglichkeit, den Code schnell zu skalieren
  • Die Kosten für die Ausrüstung und deren Wartung in der Zukunft (eine der Bedingungen des Kunden ist, dass sich die Server in dem von ihm kontrollierten Gebiet befinden müssen);
  • Kosten für Entwickler, die in den nächsten Phasen der Arbeit an der Plattform benötigt werden;

Sowie viele andere Fragen im Zusammenhang mit Design und Entwicklung.

Bevor ich mit der Arbeit an dem Projekt begann, schlug ich dem Geschäftsinhaber die folgende strategische Entscheidung vor: Da das Projekt recht komplex ist, wird seine Umsetzung merklich viel Zeit in Anspruch nehmen, also erstelle ich zunächst eine MVP-Version, die nicht viel Zeit in Anspruch nehmen wird Geld, das seinem Unternehmen aber bereits „hier und jetzt“ einen Wettbewerbsvorteil am Markt verschaffen und auch seine Fähigkeiten als Taxidienst erweitern wird. Eine solche Zwischenlösung gibt mir wiederum Zeit, die endgültige Lösung sorgfältiger zu entwerfen, und Zeit für technische Experimente. Gleichzeitig kann nicht garantiert werden, dass die implementierte Softwarelösung korrekt konzipiert ist und möglicherweise in Zukunft radikal umgestaltet oder ersetzt wird, aber sie wird auf jeden Fall die minimal erforderliche Funktionalität erfüllen, um „sich von der Konkurrenz abzuheben“. Dem Gründer des Taxis gefiel die Idee, also taten sie es schließlich.

Die ersten zwei Wochen verbrachte ich damit, die Geschäftsprozesse im Unternehmen zu studieren und die Arbeit eines Taxis von innen zu studieren. Durchführung einer betriebswirtschaftlichen Analyse, wo, was und wie automatisiert werden kann und ob dies überhaupt notwendig ist. Mit welchen Schwierigkeiten und Problemen sind Unternehmensmitarbeiter konfrontiert? Wie sie gelöst werden. Wie der Arbeitstag für die Mitarbeiter des Unternehmens gestaltet ist. Welche Werkzeuge verwenden sie?

Am Ende der dritten Woche, nachdem ich mit der Arbeit begonnen und interessante Themen im Internet studiert hatte, wurde unter Berücksichtigung der Wünsche des Geschäftsinhabers sowie meiner eigenen Kenntnisse und Fähigkeiten zu diesem Zeitpunkt beschlossen, den folgenden Stapel anzuwenden :

  • Datenbankserver: MsSQL (kostenlose Version mit einer Datenbankdateibeschränkung von bis zu 2 GB);
  • Entwicklung eines Servers, der mobile Clients in Delphi unter Windows bedient, da es bereits einen Windows-Server gab, auf dem die Datenbank installiert werden würde, sowie die Entwicklungsumgebung selbst, die eine schnelle Entwicklung ermöglicht;
  • Angesichts der niedrigen Internetgeschwindigkeiten auf Mobiltelefonen im Jahr 2009 muss das Austauschprotokoll zwischen Client und Server binär sein. Dadurch wird die Größe der übertragenen Datenpakete reduziert und dadurch die Stabilität der Arbeit der Clients mit dem Server erhöht;

Weitere zwei Wochen wurden mit der Gestaltung des Protokolls und der Datenbank verbracht. Das Ergebnis waren 12 Pakete, die den Austausch aller notwendigen Daten zwischen mobilem Client und Server und etwa 20 Tabellen in der Datenbank gewährleisten. Ich habe diesen Teil der Arbeit unter Berücksichtigung der Zukunft durchgeführt. Auch wenn ich den Technologie-Stack komplett ändern muss, sollte die Struktur der Pakete und der Datenbank unverändert bleiben.

Nach den Vorarbeiten konnte mit der praktischen Umsetzung der Idee begonnen werden. Um den Prozess ein wenig zu beschleunigen und Zeit für andere Aufgaben zu gewinnen, habe ich einen Entwurf der mobilen Anwendung erstellt, die Benutzeroberfläche, teilweise auch die UX, skizziert und einen bekannten Java-Programmierer in das Projekt einbezogen. Und er konzentrierte sich auf serverseitige Entwicklung, Design und Tests.

Am Ende des zweiten Monats der Arbeit am MVP war die erste Version des Server- und Client-Prototyps fertig.

Und am Ende des dritten Monats, nach synthetischen Tests und Feldtests, Fehlerbehebungen sowie kleineren Verbesserungen am Protokoll und an der Datenbank, war die Anwendung produktionsbereit. Genau das wurde getan.

Von diesem Moment an beginnt der interessanteste und schwierigste Teil des Projekts.

Während der Umstellung der Fahrer auf die neue Software wurde ein XNUMX-Stunden-Dienst organisiert. Da tagsüber nicht jeder während der Arbeitszeit kommen konnte. Darüber hinaus wurde es administrativ durch eine willensstarke Entscheidung des Firmengründers so organisiert, dass der Benutzername/das Passwort vom Leiter des Taxidienstes eingegeben und nicht dem Fahrer mitgeteilt wurde. Meinerseits war technischer Support für Benutzer bei Ausfällen und unvorhergesehenen Situationen erforderlich.

Murphys Gesetz sagt uns: „Alles, was schief gehen kann, wird schief gehen.“ Und genau so ist es schiefgelaufen... Das ist eine Sache, als ich und mehrere Taxifahrer die Anwendung auf mehreren Dutzend Testaufträgen getestet haben. Und ganz anders sieht es aus, wenn mehr als 500 Fahrer am Band in Echtzeit an echten Aufträgen von echten Menschen arbeiten.

Die Architektur der mobilen Anwendung war einfach und es gab deutlich weniger Fehler als auf dem Server. Daher lag der Schwerpunkt der Arbeit auf der Serverseite. Der kritischste Fehler in der Anwendung war das Problem der Trennung vom Server, wenn die Internetverbindung auf dem Telefon verloren ging und die Sitzung wieder wiederhergestellt wurde. Und das Internet ist ziemlich oft verschwunden. Erstens war das Internet auf dem Telefon selbst in jenen Jahren nicht stabil genug. Zweitens gab es viele blinde Flecken, in denen das Internet einfach nicht funktionierte. Wir haben dieses Problem fast sofort erkannt und innerhalb von XNUMX Stunden alle zuvor installierten Anwendungen behoben und aktualisiert.

Der Server hatte hauptsächlich Fehler im Auftragsverteilungsalgorithmus und eine fehlerhafte Verarbeitung einiger Anfragen von Kunden. Nachdem ich Störungen festgestellt hatte, habe ich den Server korrigiert und aktualisiert.

Tatsächlich gab es zu diesem Zeitpunkt noch nicht so viele technische Probleme. Die ganze Schwierigkeit bestand darin, dass ich fast einen Monat lang im Büro Dienst hatte und nur gelegentlich nach Hause ging. Wahrscheinlich 4-5 Mal. Und ich habe phasenweise geschlafen, da ich zu diesem Zeitpunkt alleine an dem Projekt arbeitete und niemand außer mir etwas reparieren konnte.

Einen Monat lang bedeutet das nicht, dass einen Monat lang ständig alles kaputt ging und ich ununterbrochen etwas programmierte. Das haben wir gerade entschieden. Schließlich war das Unternehmen bereits in Betrieb und erwirtschaftete Gewinne. Es ist besser, auf Nummer sicher zu gehen und sich später auszuruhen, als jetzt Kunden und Gewinne zu verlieren. Da wir das alle sehr gut verstanden haben, widmete das gesamte Team gemeinsam größte Aufmerksamkeit und Zeit der Einführung neuer Software in das Taxisystem. Und unter Berücksichtigung des aktuellen Auftragsaufkommens werden wir auf jeden Fall alle Mängel innerhalb eines Monats beseitigen. Nun, eventuell verbleibende versteckte Fehler haben sicherlich keine kritischen Auswirkungen auf den Geschäftsprozess und können bei Bedarf routinemäßig behoben werden.

Hier ist die unschätzbare Unterstützung der Direktoren und Vorarbeiter der Taxidienste hervorzuheben, die mit maximalem Verständnis für die Komplexität der Situation der Umstellung von Fahrern auf neue Software rund um die Uhr mit Fahrern zusammengearbeitet haben. Tatsächlich haben wir nach Abschluss der Installation neuer Programme auf Telefonen keinen einzigen Treiber verloren. Und sie haben den Prozentsatz der nicht entfernten Kunden nicht wesentlich erhöht, der bald wieder auf ein normales Niveau zurückgekehrt ist.

Damit war die erste Phase der Arbeiten am Projekt abgeschlossen. Und es ist anzumerken, dass das Ergebnis nicht lange auf sich warten ließ. Durch die Automatisierung der Auftragsverteilung an Fahrer ohne menschliches Eingreifen konnte die durchschnittliche Wartezeit eines Kunden auf ein Taxi um eine Größenordnung verkürzt werden, was natürlich die Loyalität der Kunden gegenüber dem Service erhöhte. Dies führte zu einem Anstieg der Bestellungen. Daraufhin stieg die Zahl der Taxifahrer. Dadurch ist auch die Zahl der erfolgreich abgeschlossenen Aufträge gestiegen. Dadurch stiegen die Gewinne des Unternehmens. Natürlich übertreibe ich hier etwas, da dieser ganze Prozess nicht sofort vonstatten ging. Zu sagen, dass das Management zufrieden war, bedeutet nichts zu sagen. Mir wurde uneingeschränkter Zugang zur weiteren Finanzierung des Projekts gewährt.

Fortsetzung folgt..

Source: habr.com

Kommentar hinzufügen