Hoe een klein programma een klein kantoor veranderde in een federaal bedrijf met een winst van meer dan 100 miljoen roebel/maand

Eind december 2008 werd ik uitgenodigd bij een van de taxidiensten in Perm met als doel bestaande bedrijfsprocessen te automatiseren. Over het algemeen kreeg ik drie fundamentele taken:


  • Ontwikkel een softwarepakket voor een callcenter met een mobiele applicatie voor taxichauffeurs en automatiseer interne bedrijfsprocessen.
  • Alles moest in de kortst mogelijke tijd gebeuren.
  • Zorg voor uw eigen software, in plaats van deze aan te schaffen bij externe ontwikkelaars, die in de toekomst, naarmate het bedrijf zich ontwikkelt, onafhankelijk kan worden opgeschaald naar voortdurend veranderende marktomstandigheden.

Destijds begreep ik niet hoe deze markt werkt en de nuances ervan, maar toch waren twee dingen voor mij duidelijk. Het callcenter moet gebouwd worden op basis van de open source asterisk software PBX. De uitwisseling van informatie tussen het callcenter en de mobiele applicatie is in wezen een client-server-oplossing met alle bijbehorende patronen voor het ontwerpen van de architectuur van het toekomstige project en de programmering ervan.

Na een voorlopige inschatting van de taken, deadlines en kosten voor het project, en nadat ik met de eigenaar van de taxidienst alle noodzakelijke zaken had afgesproken, ging ik in januari 2009 aan de slag.

Vooruitkijkend, zeg ik meteen. Het resultaat was een schaalbaar platform dat draait op meer dan 60 servers in 12 steden in Rusland en 2 in Kazachstan. De totale winst van het bedrijf bedroeg meer dan 100 miljoen roebel per maand.

Fase een. Prototype

Omdat ik op dat moment nog geen praktijkervaring had met IP-telefonie, en ik slechts oppervlakkig bekend was met asterisk als onderdeel van “thuis”-experimenten, werd besloten om aan de slag te gaan met de ontwikkeling van een mobiele applicatie en servergedeelte. Tegelijkertijd dichten we gaten in de kennis over andere taken.

Als met de mobiele applicatie alles min of meer duidelijk was. Destijds kon het alleen in Java worden geschreven voor eenvoudige telefoons met drukknoppen, maar het schrijven van een server voor mobiele clients was iets ingewikkelder:

  • Welk serverbesturingssysteem zal worden gebruikt;
  • Gebaseerd op de logica dat een programmeertaal wordt gekozen voor een taak, en niet andersom, en rekening houdend met punt 1, welke programmeertaal optimaal zal zijn voor het oplossen van problemen;
  • Bij het ontwerp was het noodzakelijk om rekening te houden met de verwachte toekomstige hoge belasting van de dienst;
  • Welke database kan fouttolerantie onder hoge belasting garanderen en hoe kan een snelle responstijd van de database worden gehandhaafd naarmate het aantal verzoeken daartoe toeneemt;
  • De bepalende factor was de snelheid van de ontwikkeling en de mogelijkheid om de code snel te schalen
  • De kosten van apparatuur en het onderhoud ervan in de toekomst (een van de voorwaarden van de klant is dat de servers zich in het gebied onder zijn controle moeten bevinden);
  • Kosten van ontwikkelaars die nodig zullen zijn in de volgende fasen van het werk op het platform;

Evenals vele andere kwesties die verband houden met ontwerp en ontwikkeling.

Voordat ik aan het project begon, stelde ik de volgende strategische beslissing voor aan de bedrijfseigenaar: aangezien het project behoorlijk complex is, zal de implementatie ervan merkbaar veel tijd in beslag nemen, dus maak ik eerst een MVP-versie, die niet veel tijd zal kosten en geld, maar waardoor zijn bedrijf al “hier en nu” een concurrentievoordeel op de markt kan verwerven en ook zijn mogelijkheden als taxidienst zal uitbreiden. Een dergelijke tussenoplossing zal mij op zijn beurt de tijd geven om de uiteindelijke oplossing zorgvuldiger te ontwerpen en tijd voor technische experimenten. Tegelijkertijd is het niet gegarandeerd dat de geïmplementeerde softwareoplossing correct is ontworpen en in de toekomst mogelijk radicaal opnieuw wordt ontworpen of vervangen, maar het zal zeker de minimaal noodzakelijke functionaliteit bieden om ‘zich los te maken van de concurrentie’. De oprichter van de taxi vond het een leuk idee, dus uiteindelijk hebben ze het uitgevoerd.

De eerste twee weken heb ik de bedrijfsprocessen in het bedrijf bestudeerd, en de werking van een taxi van binnenuit bestudeerd. Een bedrijfsanalyse uitgevoerd van waar, wat en hoe geautomatiseerd kan worden en of dit überhaupt nodig is. Met welke moeilijkheden en problemen worden werknemers van bedrijven geconfronteerd? Hoe ze worden opgelost. Hoe de werkdag is georganiseerd voor de medewerkers van het bedrijf. Welke hulpmiddelen gebruiken ze?

Tegen het einde van de derde week, nadat ik was begonnen met werken en interessante onderwerpen op internet had bestudeerd, rekening houdend met de wensen van de bedrijfseigenaar en met mijn eigen kennis en capaciteiten op dat moment, werd besloten om de volgende stapel toe te passen :

  • Databaseserver: MsSQL (gratis versie met databasebestandslimiet tot 2 GB);
  • Ontwikkeling van een server voor mobiele clients in Delphi onder Windows, aangezien er al een Windows-server was waarop de database zou worden geïnstalleerd, en de ontwikkelomgeving zelf een snelle ontwikkeling mogelijk maakt;
  • Rekening houdend met de lage internetsnelheden op mobiele telefoons in 2009, moet het uitwisselingsprotocol tussen de client en de server binair zijn. Dit zal de omvang van de verzonden datapakketten verkleinen en als gevolg daarvan de stabiliteit van het werk van klanten met de server vergroten;

Nog eens twee weken werden besteed aan het ontwerpen van het protocol en de database. Het resultaat was 12 pakketten die zorgen voor de uitwisseling van alle benodigde gegevens tussen de mobiele client en server en ongeveer 20 tabellen in de database. Ik heb dit deel van het werk gedaan rekening houdend met de toekomst: zelfs als ik de technologiestapel volledig moet veranderen, zou de structuur van de pakketten en de database ongewijzigd moeten blijven.

Na het voorbereidende werk was het mogelijk om met de praktische implementatie van het idee te beginnen. Om het proces wat te versnellen en tijd vrij te maken voor andere taken, heb ik een conceptversie van de mobiele applicatie gemaakt, de UI, deels de UX, geschetst en een bekende Java-programmeur bij het project betrokken. En hij concentreerde zich op server-side ontwikkeling, ontwerp en testen.

Tegen het einde van de tweede maand waarin aan de MVP werd gewerkt, was de eerste versie van het server- en clientprototype gereed.

En tegen het einde van de derde maand, na synthetische tests en veldtests, bugfixes en kleine verbeteringen aan het protocol en de database, was de applicatie klaar voor productie. Dat is wat er werd gedaan.

Vanaf dit moment begint het meest interessante en moeilijkste deel van het project.

Tijdens de overstap van de chauffeurs naar de nieuwe software werd er een XNUMX-uurs dienst georganiseerd. Omdat niet iedereen overdag tijdens werkuren kon komen. Bovendien was het administratief, door een wilskrachtig besluit van de oprichter van het bedrijf, zo georganiseerd dat de login/wachtwoord werd ingevoerd door de manager van de taxidienst en niet werd doorgegeven aan de chauffeur. Van mijn kant was technische ondersteuning voor gebruikers nodig bij storingen en onvoorziene situaties.

De wet van Murphy vertelt ons: ‘Alles wat fout kan gaan, zal fout gaan.’ En dat is precies hoe het mis ging... Het is één ding toen ik en een aantal taxichauffeurs de applicatie testten op enkele tientallen testorders. En het is heel anders als meer dan 500 chauffeurs aan de lijn in realtime werken aan echte bestellingen van echte mensen.

De architectuur van de mobiele applicatie was eenvoudig en er zaten merkbaar minder bugs in dan in de server. Daarom lag de nadruk van het werk vooral op de serverkant. De meest kritieke storing in de applicatie was het probleem van het verbreken van de verbinding met de server toen het internet op de telefoon wegviel en de sessie opnieuw werd hersteld. En het internet verdween vrij vaak. Ten eerste was het internet op de telefoon zelf in die jaren niet stabiel genoeg. Ten tweede waren er veel blinde vlekken waarin internet simpelweg niet werkte. We hebben dit probleem vrijwel onmiddellijk geïdentificeerd en binnen XNUMX uur alle eerder geïnstalleerde applicaties gerepareerd en bijgewerkt.

De server had vooral fouten in het algoritme voor de orderverdeling en een onjuiste verwerking van sommige verzoeken van klanten. Nadat ik problemen had geïdentificeerd, heb ik de server gecorrigeerd en bijgewerkt.

In feite waren er in dit stadium niet zoveel technische problemen. Het hele probleem was dat ik bijna een maand dienst had op kantoor en slechts af en toe naar huis ging. Waarschijnlijk 4-5 keer. En ik sliep met horten en stoten, aangezien ik op dat moment alleen aan het project werkte en niemand behalve ik iets kon repareren.

Een maand betekent niet dat alles een maand lang voortdurend haperde en ik iets aan het coderen was zonder te stoppen. Dat hebben wij zojuist besloten. Het bedrijf was immers al actief en maakte winst. Het is beter om op safe te spelen en later uit te rusten dan nu klanten en winst te verliezen. We begrepen dit allemaal heel goed, dus het hele team besteedde gezamenlijk maximale aandacht en tijd aan het introduceren van nieuwe software in het taxisysteem. En rekening houdend met het huidige orderverkeer, zullen we binnen een maand zeker alle tekortkomingen wegnemen. Welnu, verborgen bugs die eventueel achterblijven, zullen zeker geen kritische gevolgen hebben voor het bedrijfsproces en kunnen, indien nodig, routinematig worden gecorrigeerd.

Hier is het noodzakelijk om de onschatbare hulp te vermelden van de directeuren en voormannen van taxidiensten, die, met maximaal begrip van de complexiteit van de situatie van het overzetten van chauffeurs naar nieuwe software, de klok rond met chauffeurs werkten. Na het voltooien van de installatie van nieuwe programma's op telefoons zijn we zelfs geen enkel stuurprogramma kwijtgeraakt. En ze hebben het percentage niet-verwijderende klanten niet kritisch verhoogd, dat al snel weer op het normale niveau was.

Hiermee is de eerste fase van het project voltooid. En het moet worden opgemerkt dat het resultaat niet lang op zich liet wachten. Door de distributie van bestellingen aan chauffeurs zonder menselijke tussenkomst te automatiseren, werd de gemiddelde wachttijd voor een taxi door een klant met een orde van grootte verminderd, wat uiteraard de loyaliteit van de klant aan de dienst verhoogde. Dit leidde tot een toename van het aantal bestellingen. Hierna nam het aantal taxichauffeurs toe. Hierdoor is ook het aantal succesvol afgeronde bestellingen toegenomen. En als gevolg daarvan steeg de winst van het bedrijf. Natuurlijk loop ik hier een beetje voorop, aangezien dit hele proces niet onmiddellijk plaatsvond. Zeggen dat het management tevreden was, betekent niets zeggen. Ik kreeg onbeperkte toegang tot verdere financiering van het project.

Wordt vervolgd ..

Bron: www.habr.com

Voeg een reactie