Hoe 'n klein program 'n klein kantoor in 'n federale maatskappy verander het met 'n wins van 100+ miljoen roebels/maand

Aan die einde van Desember 2008 is ek genooi na een van die taxidienste in Perm met die doel om bestaande besigheidsprosesse te outomatiseer. Oor die algemeen het ek drie fundamentele take gekry:


  • Ontwikkel 'n sagtewarepakket vir 'n oproepsentrum met 'n mobiele toepassing vir taxibestuurders en outomatiseer interne besigheidsprosesse.
  • Alles moes in die kortste moontlike tyd gedoen word.
  • Het jou eie sagteware, eerder as om van derdeparty-ontwikkelaars gekoop, wat in die toekoms, soos die besigheid ontwikkel, onafhanklik geskaal kan word na voortdurend veranderende marktoestande.

Op daardie stadium het ek nie verstaan ​​hoe hierdie mark werk en sy nuanses nie, maar nietemin was twee dinge vir my duidelik. Die oproepsentrum moet gebou word op die basis van die oopbron asterisk sagteware PBX. Die uitruil van inligting tussen die oproepsentrum en die mobiele toepassing is in wese 'n kliënt-bediener-oplossing met al die ooreenstemmende patrone vir die ontwerp van die argitektuur van die toekomstige projek en sy programmering.

Na 'n voorlopige beoordeling van die take, spertye en koste vir die projek, en nadat ek ooreengekom het oor al die nodige kwessies met die eienaar van die taxidiens, het ek in Januarie 2009 begin werk.

As ek vorentoe kyk, sal ek dadelik sê. Die resultaat was 'n skaalbare platform wat op 60+ bedieners in 12 stede in Rusland en 2 in Kazakstan loop. Die maatskappy se totale wins was 100+ miljoen roebels/maand.

Fase een. Prototipe

Aangesien ek op daardie stadium geen praktiese ondervinding in IP-telefonie gehad het nie, en ek net oppervlakkig vertroud was met asterisk as deel van "tuis"-eksperimente, is daar besluit om te begin werk met die ontwikkeling van 'n mobiele toepassing en bedieneronderdeel. Terselfdertyd, die sluiting van gapings in kennis oor ander take.

As met die mobiele toepassing alles min of meer duidelik was. Op daardie tydstip kon dit net in Java geskryf word vir eenvoudige drukknoppie-fone, maar die skryf van 'n bediener wat mobiele kliënte bedien, was 'n bietjie meer ingewikkeld:

  • Watter bediener OS sal gebruik word;
  • Op grond van die logika dat 'n programmeertaal vir 'n taak gekies word, en nie andersom nie, en met inagneming van punt 1, watter programmeertaal optimaal sal wees om probleme op te los;
  • Tydens die ontwerp was dit nodig om die verwagte toekomstige hoë vragte op die diens in ag te neem;
  • Watter databasis kan fouttoleransie onder hoë vragte waarborg en hoe om 'n vinnige databasisreaksietyd te handhaaf namate die aantal versoeke daarna toeneem;
  • Die bepalende faktor was die spoed van ontwikkeling en die vermoë om die kode vinnig te skaal
  • Die koste van toerusting en die instandhouding daarvan in die toekoms (een van die kliënt se voorwaardes is dat die bedieners in die gebied onder sy beheer geleë moet wees);
  • Koste van ontwikkelaars wat in die volgende fases van werk op die platform benodig sal word;

Sowel as baie ander kwessies wat verband hou met ontwerp en ontwikkeling.

Voordat ek aan die projek begin werk het, het ek die volgende strategiese besluit aan die sake-eienaar voorgestel: aangesien die projek redelik kompleks is, sal die implementering daarvan 'n merkbare hoeveelheid tyd neem, so ek skep eers 'n MVP-weergawe, wat nie veel tyd sal neem nie en geld, maar wat sy maatskappy in staat sal stel om 'n mededingende voordeel op die mark reeds "hier en nou" te verkry, en ook sy vermoëns as 'n taxidiens sal uitbrei. Op sy beurt sal so 'n tussenoplossing my tyd gee om die finale oplossing meer deurdag te ontwerp en tyd vir tegniese eksperimente. Terselfdertyd sal die geïmplementeerde sagteware-oplossing nie gewaarborg word om korrek ontwerp te wees nie en kan dit in die toekoms radikaal herontwerp of vervang word, maar dit sal beslis die minimum nodige funksionaliteit verrig om "weg te breek van mededingers." Die stigter van die taxi het van die idee gehou, so op die ou end het hulle dit gedoen.

Ek het die eerste twee weke die sakeprosesse in die maatskappy bestudeer, en die werk van 'n taxi van binne bestudeer. Het 'n besigheidsontleding gedoen van waar, wat en hoe geoutomatiseer kan word en of dit hoegenaamd nodig is. Watter probleme en probleme ondervind die maatskappy se werknemers? Hoe hulle opgelos word. Hoe die werksdag vir die maatskappy se werknemers georganiseer word. Watter gereedskap gebruik hulle?

Teen die einde van die derde week, nadat ek begin werk het en kwessies van belang op die internet bestudeer het, met inagneming van die wense van die besigheidseienaar, sowel as my eie kennis en vermoëns op daardie tydstip, is besluit om die volgende stapel toe te pas :

  • Databasisbediener: MsSQL (gratis weergawe met databasislêerlimiet tot 2GB);
  • Ontwikkeling van 'n bediener wat mobiele kliënte in Delphi onder Windows bedien, aangesien daar reeds 'n Windows-bediener was waarop die databasis geïnstalleer sou word, asook die ontwikkelingsomgewing self fasiliteer vinnige ontwikkeling;
  • Met inagneming van die lae internetspoed op selfone in 2009, moet die uitruilprotokol tussen die kliënt en bediener binêr wees. Dit sal die grootte van versendte datapakkies verminder en as gevolg daarvan die stabiliteit van kliënte se werk met die bediener verhoog;

Nog twee weke is bestee aan die ontwerp van die protokol en databasis. Die resultaat was 12 pakkette wat die uitruil van alle nodige data tussen die mobiele kliënt en bediener verseker en ongeveer 20 tabelle in die databasis. Ek het hierdie deel van die werk gedoen met inagneming van die toekoms, al moet ek die tegnologiestapel heeltemal verander, moet die struktuur van die pakkette en databasis onveranderd bly.

Na die voorbereidingswerk was dit moontlik om met die praktiese implementering van die idee te begin. Om die proses 'n bietjie te bespoedig en tyd vir ander take vry te maak, het ek 'n konsepweergawe van die mobiele toepassing gemaak, die UI, deels die UX, geskets en 'n bekende Java-programmeerder by die projek betrek. En hy het gefokus op ontwikkeling, ontwerp en toetsing aan die bedienerkant.

Teen die einde van die tweede maand van werk aan die MVP was die eerste weergawe van die bediener en kliënt prototipe gereed.

En teen die einde van die derde maand, na sintetiese toetse en veldtoetse, foutoplossings, geringe verbeterings aan die protokol en databasis, was die toepassing gereed vir produksie. Wat is wat gedoen is.

Van hierdie oomblik af begin die interessantste en moeilikste deel van die projek.

Tydens die oorgang van bestuurders na die nuwe sagteware, is XNUMX-uur diens georganiseer. Aangesien nie almal bedags gedurende werksure kon kom nie. Boonop is dit administratief, deur 'n sterk wilsbesluit van die maatskappy se stigter, so georganiseer dat die login/wagwoord deur die bestuurder van die taxidiens ingevoer is en dit nie aan die bestuurder gekommunikeer is nie. Van my kant af was tegniese ondersteuning vir gebruikers nodig in geval van mislukkings en onvoorsiene situasies.

Murphy's Law sê vir ons: "Enigiets wat verkeerd kan gaan, sal verkeerd gaan." En dit is presies hoe dinge verkeerd geloop het ... Dis een ding toe ek en verskeie taxibestuurders die toepassing op 'n paar dosyn toetsbestellings getoets het. En dit is heeltemal 'n ander saak wanneer 500+ bestuurders op die lyn in reële tyd werk op regte bestellings van regte mense.

Die argitektuur van die mobiele toepassing was eenvoudig en daar was merkbaar minder foute daarin as in die bediener. Daarom was die hooffokus van werk op die bedienerkant. Die mees kritieke fout in die toepassing was die probleem van ontkoppeling van die bediener wanneer die internet op die foon verloor is en die sessie weer herstel is. En die internet het gereeld verdwyn. Eerstens, in daardie jare was die internet op die telefoon self nie stabiel genoeg nie. Tweedens was daar baie blindekolle waar die internet eenvoudig nie gewerk het nie. Ons het hierdie probleem byna onmiddellik geïdentifiseer en binne XNUMX uur het alle voorheen geïnstalleerde toepassings reggestel en opgedateer.

Die bediener het hoofsaaklik foute in die volgordeverspreidingsalgoritme en verkeerde verwerking van sommige versoeke van kliënte gehad. Nadat ek foute geïdentifiseer het, het ek die bediener reggestel en opgedateer.

Trouens, daar was in hierdie stadium nie soveel tegniese probleme nie. Die hele moeilikheid was dat ek amper 'n maand by die kantoor aan diens was, maar net af en toe huis toe gegaan het. Seker 4-5 keer. En ek het geslaap, want op daardie stadium het ek alleen aan die projek gewerk en niemand behalwe ek kon iets regmaak nie.

'N Maand, dit beteken nie dat alles 'n maand lank aanhoudend fout was nie en ek het iets gekodeer sonder om op te hou. Ons het dit net besluit. Die besigheid het immers reeds bedryf en wins gemaak. Dit is beter om dit veilig te speel en later te rus as om nou kliënte en winste te verloor. Ons het almal dit baie goed verstaan, so die hele span het gesamentlik maksimum aandag en tyd daaraan gewy om nuwe sagteware in die taxistelsel in te voer. En met inagneming van die huidige verkeer van bestellings, sal ons beslis al die tekortkominge binne 'n maand uitskakel. Wel, versteekte foute wat mag oorbly, sal beslis nie kritieke gevolge op die besigheidsproses hê nie en, indien nodig, kan dit op 'n roetine-basis reggestel word.

Hier is dit nodig om kennis te neem van die onskatbare bystand van die direkteure en voormanne van taxidienste, wat, met 'n maksimum begrip van die kompleksiteit van die situasie van die oordrag van bestuurders na nuwe sagteware, die hele dag met bestuurders gewerk het. Trouens, nadat ons die installering van nuwe programme op fone voltooi het, het ons nie 'n enkele bestuurder verloor nie. En hulle het nie die persentasie van nie-verwydering van kliënte krities verhoog nie, wat gou na normale vlakke teruggekeer is.

Dit het die eerste fase van werk aan die projek voltooi. En daar moet kennis geneem word dat die resultaat nie lank was om te kom nie. Deur die verspreiding van bestellings aan bestuurders sonder menslike ingryping te outomatiseer, is die gemiddelde wagtyd vir 'n taxi deur 'n kliënt met 'n orde van grootte verminder, wat natuurlik die lojaliteit van kliënte teenoor die diens verhoog het. Dit het gelei tot 'n toename in die aantal bestellings. Hierna het die aantal taxibestuurders toegeneem. Gevolglik het die aantal suksesvol voltooide bestellings ook toegeneem. En gevolglik het die maatskappy se wins toegeneem. Natuurlik, hier raak ek myself 'n bietjie vooruit, aangesien hierdie hele proses nie onmiddellik plaasgevind het nie. Om te sê dat die bestuur tevrede was, is om niks te sê nie. Ek het onbeperkte toegang tot verdere finansiering van die projek gekry.

Vervolg..

Bron: will.com

Voeg 'n opmerking