Paano ginawa ng isang maliit na programa ang isang maliit na opisina sa isang pederal na kumpanya na may tubo na 100+ milyong rubles/buwan

Sa pagtatapos ng Disyembre 2008, naimbitahan ako sa isa sa mga serbisyo ng taxi sa Perm na may layuning i-automate ang mga kasalukuyang proseso ng negosyo. Sa pangkalahatan, binigyan ako ng tatlong pangunahing gawain:


  • Bumuo ng software package para sa isang call center na may mobile application para sa mga taxi driver at i-automate ang mga internal na proseso ng negosyo.
  • Ang lahat ay kailangang gawin sa pinakamaikling posibleng panahon.
  • Magkaroon ng sarili mong software, sa halip na bumili mula sa mga third-party na developer, na sa hinaharap, habang umuunlad ang negosyo, ay maaaring iisa-isa na mai-scale sa patuloy na pagbabago ng mga kondisyon ng merkado.

Sa oras na iyon, hindi ko maintindihan kung paano gumagana ang merkado na ito at ang mga nuances nito, ngunit gayunpaman, dalawang bagay ang malinaw sa akin. Ang call center ay dapat itayo batay sa open source na asterisk software na PBX. Ang pagpapalitan ng impormasyon sa pagitan ng call center at ng mobile application ay mahalagang solusyon ng client-server kasama ang lahat ng kaukulang pattern para sa pagdidisenyo ng arkitektura ng hinaharap na proyekto at ang programming nito.

Matapos ang isang paunang pagtatasa ng mga gawain, mga takdang oras at gastos para sa proyekto, at napagkasunduan ang lahat ng mga kinakailangang isyu sa may-ari ng serbisyo ng taxi, nagsimula akong magtrabaho noong Enero 2009.

Pagtingin sa unahan, sasabihin ko kaagad. Ang resulta ay isang scalable platform na tumatakbo sa 60+ server sa 12 lungsod sa Russia at 2 sa Kazakhstan. Ang kabuuang kita ng kumpanya ay 100+ milyong rubles/buwan.

Unang yugto. Prototype

Dahil sa oras na iyon ay wala akong praktikal na karanasan sa IP telephony, at mababaw lang akong pamilyar sa asterisk bilang bahagi ng mga eksperimento sa "tahanan", napagpasyahan na magsimulang magtrabaho kasama ang pagbuo ng isang mobile application at bahagi ng server. Kasabay nito, ang pagsasara ng mga puwang sa kaalaman sa iba pang mga gawain.

Kung sa mobile application ang lahat ay higit pa o hindi gaanong malinaw. Sa oras na iyon, maaari lamang itong isulat sa java para sa mga simpleng push-button na telepono, ngunit ang pagsulat ng isang server na nagsisilbi sa mga mobile client ay medyo mas kumplikado:

  • Anong server OS ang gagamitin;
  • Batay sa lohika na ang isang programming language ay pinili para sa isang gawain, at hindi kabaligtaran, at isinasaalang-alang ang punto 1, kung aling programming language ang magiging pinakamainam para sa paglutas ng mga problema;
  • Sa panahon ng disenyo, kinakailangang isaalang-alang ang inaasahang mataas na pagkarga sa hinaharap sa serbisyo;
  • Aling database ang makakagarantiya ng fault tolerance sa ilalim ng mataas na load at kung paano mapanatili ang isang mabilis na oras ng pagtugon sa database habang dumarami ang bilang ng mga kahilingan dito;
  • Ang pagtukoy sa kadahilanan ay ang bilis ng pag-unlad at ang kakayahang mabilis na sukatin ang code
  • Ang halaga ng kagamitan at pagpapanatili nito sa hinaharap (isa sa mga kondisyon ng customer ay ang mga server ay dapat na matatagpuan sa teritoryo sa ilalim ng kanyang kontrol);
  • Gastos ng mga developer na kakailanganin sa mga susunod na yugto ng trabaho sa platform;

Pati na rin ang maraming iba pang mga isyu na may kaugnayan sa disenyo at pag-unlad.

Bago simulan ang trabaho sa proyekto, iminungkahi ko ang sumusunod na madiskarteng desisyon sa may-ari ng negosyo: dahil ang proyekto ay medyo kumplikado, ang pagpapatupad nito ay aabutin ng isang kapansin-pansing dami ng oras, kaya gumawa muna ako ng isang bersyon ng MVP, na hindi magtatagal ng maraming oras at pera, ngunit kung saan ay magpapahintulot sa kanyang kumpanya na makakuha ng isang mapagkumpitensyang kalamangan sa merkado na "dito at ngayon", at palalawakin din ang mga kakayahan nito bilang isang serbisyo ng taxi. Sa turn, ang ganitong intermediate na solusyon ay magbibigay sa akin ng oras upang mas maingat na idisenyo ang panghuling solusyon at oras para sa mga teknikal na eksperimento. Kasabay nito, ang ipinatupad na solusyon sa software ay hindi magagarantiyahan na tama ang disenyo at maaaring radikal na muling idisenyo o palitan sa hinaharap, ngunit tiyak na gagawin nito ang pinakamababang kinakailangang functionality upang "makawala sa mga kakumpitensya." Nagustuhan ng founder ng taxi ang ideya, kaya sa huli ay ginawa nila ito.

Ginugol ko ang unang dalawang linggo sa pag-aaral ng mga proseso ng negosyo sa kumpanya, at pag-aaral ng trabaho ng isang taxi mula sa loob. Nagsagawa ng pagsusuri sa negosyo kung saan, ano at paano maaaring maging awtomatiko at kung ito ay kinakailangan. Anong mga paghihirap at problema ang kinakaharap ng mga empleyado ng kumpanya? Paano sila nalulutas. Paano nakaayos ang araw ng trabaho para sa mga empleyado ng kumpanya. Anong mga tool ang ginagamit nila?

Sa pagtatapos ng ikatlong linggo, pagkatapos magsimula sa trabaho at pag-aralan ang mga isyu ng interes sa Internet, isinasaalang-alang ang mga kagustuhan ng may-ari ng negosyo, pati na rin ang aking sariling kaalaman at kakayahan sa oras na iyon, napagpasyahan na ilapat ang sumusunod na stack :

  • Server ng database: MsSQL (libreng bersyon na may limitasyon sa file ng database hanggang 2GB);
  • Pagbuo ng isang server na nagsisilbi sa mga mobile client sa Delphi sa ilalim ng Windows, dahil mayroon nang Windows server kung saan mai-install ang database, pati na rin ang development environment mismo ay nagpapadali sa mabilis na pag-unlad;
  • Isinasaalang-alang ang mababang bilis ng Internet sa mga mobile phone noong 2009, dapat na binary ang exchange protocol sa pagitan ng kliyente at server. Babawasan nito ang laki ng mga ipinadalang data packet at, bilang resulta, tataas ang katatagan ng trabaho ng mga kliyente sa server;

Isa pang dalawang linggo ang ginugol sa pagdidisenyo ng protocol at database. Ang resulta ay 12 pakete na nagsisiguro ng pagpapalitan ng lahat ng kinakailangang data sa pagitan ng mobile client at server at mga 20 talahanayan sa database. Ginawa ko ang bahaging ito ng trabaho na isinasaalang-alang ang hinaharap, kahit na kailangan kong ganap na baguhin ang stack ng teknolohiya, ang istraktura ng mga pakete at database ay dapat manatiling hindi nagbabago.

Pagkatapos ng gawaing paghahanda, posible na simulan ang praktikal na pagpapatupad ng ideya. Upang pabilisin ng kaunti ang proseso at magbakante ng oras para sa iba pang mga gawain, gumawa ako ng draft na bersyon ng mobile application, nag-sketch ng UI, bahagyang ang UX, at nagsasangkot ng pamilyar na java programmer sa proyekto. At nakatuon siya sa pag-unlad, disenyo at pagsubok sa panig ng server.

Sa pagtatapos ng ikalawang buwan ng trabaho sa MVP, handa na ang unang bersyon ng server at client prototype.

At sa pagtatapos ng ikatlong buwan, pagkatapos ng mga sintetikong pagsubok at mga pagsubok sa field, pag-aayos ng bug, menor de edad na pagpapabuti sa protocol at database, handa na ang application para sa produksyon. Alin ang ginawa.

Mula sa sandaling ito ang pinaka-kawili-wili at pinakamahirap na bahagi ng proyekto ay nagsisimula.

Sa panahon ng paglipat ng mga driver sa bagong software, inayos ang 24 na oras na tungkulin. Dahil hindi lahat ay maaaring pumunta sa oras ng trabaho sa araw. Bilang karagdagan, sa administratibo, sa pamamagitan ng isang malakas na desisyon ng tagapagtatag ng kumpanya, ito ay inayos sa paraang ang pag-login/password ay ipinasok ng manager ng serbisyo ng taxi at hindi sila ipinaalam sa driver. Sa aking bahagi, kailangan ng teknikal na suporta para sa mga user sa kaso ng mga pagkabigo at hindi inaasahang sitwasyon.

Sinasabi sa atin ng Batas ni Murphy: "Anumang maaaring magkamali, magkakamali." At ganoon nga kung paano nagkamali... Ito ay isang bagay noong sinubukan ko at ng ilang taxi driver ang application sa ilang dosenang test order. At ito ay isang ganap na naiibang bagay kapag ang 500+ na driver sa linya ay gumagana nang real time sa mga totoong order mula sa mga totoong tao.

Ang arkitektura ng mobile application ay simple at may kapansin-pansing mas kaunting mga bug dito kaysa sa server. Samakatuwid, ang pangunahing pokus ng trabaho ay nasa panig ng server. Ang pinaka-kritikal na glitch sa application ay ang problema ng pagdiskonekta mula sa server kapag nawala ang Internet sa telepono at naibalik muli ang session. At ang Internet ay nawala nang madalas. Una, sa mga taong iyon ang Internet sa telepono mismo ay hindi sapat na matatag. Pangalawa, mayroong maraming mga blind spot kung saan ang Internet ay hindi gumagana. Natukoy namin ang problemang ito halos kaagad at sa loob ng 24 na oras ay naayos at na-update ang lahat ng naunang naka-install na application.

Pangunahing may mga error ang server sa algorithm ng pamamahagi ng order at hindi tamang pagproseso ng ilang kahilingan mula sa mga kliyente. Sa pagtukoy ng mga glitches, itinama ko at na-update ang server.

Sa katunayan, walang ganoong karaming teknikal na problema sa yugtong ito. Ang hirap lang, halos isang buwan akong naka-duty sa opisina, paminsan-minsan lang umuuwi. Marahil 4-5 beses. At natulog ako nang maayos at nagsimula, dahil sa oras na iyon ay nagtatrabaho ako sa proyekto nang mag-isa at walang sinuman maliban sa akin ang maaaring ayusin ang anuman.

Isang buwan, hindi ito nangangahulugan na ang lahat ay patuloy na nagkakamali sa loob ng isang buwan at ako ay nagko-coding ng isang bagay nang walang tigil. Napagdesisyunan lang namin yun. Pagkatapos ng lahat, ang negosyo ay tumatakbo na at kumikita. Mas mainam na maglaro nang ligtas at magpahinga sa ibang pagkakataon kaysa mawalan ng mga customer at kita ngayon. Naunawaan naming lahat ito nang husto, kaya ang buong koponan ay sama-samang naglaan ng pinakamataas na atensyon at oras sa pagpapakilala ng bagong software sa sistema ng taxi. At isinasaalang-alang ang kasalukuyang trapiko ng mga order, tiyak na aalisin namin ang lahat ng mga pagkukulang sa loob ng isang buwan. Well, ang mga nakatagong bug na maaaring manatili ay tiyak na hindi magkakaroon ng mga kritikal na kahihinatnan sa proseso ng negosyo at, kung kinakailangan, maaari silang itama sa isang nakagawiang batayan.

Narito kinakailangang tandaan ang napakahalagang tulong mula sa mga direktor at kapatas ng mga serbisyo ng taxi, na, na may pinakamataas na pag-unawa sa pagiging kumplikado ng sitwasyon ng paglilipat ng mga driver sa bagong software, ay nagtrabaho sa mga driver sa buong orasan. Sa katunayan, pagkatapos makumpleto ang pag-install ng mga bagong programa sa mga telepono, hindi kami nawalan ng isang driver. At hindi nila kritikal na napataas ang porsyento ng hindi pag-alis ng mga kliyente, na sa lalong madaling panahon ay naibalik sa normal na antas.

Nakumpleto nito ang unang yugto ng trabaho sa proyekto. At dapat tandaan na ang resulta ay hindi nagtagal. Sa pamamagitan ng pag-automate ng pamamahagi ng mga order sa mga driver nang walang interbensyon ng tao, ang average na oras ng paghihintay para sa isang taxi ng isang kliyente ay nabawasan ng isang order ng magnitude, na natural na nagpapataas ng katapatan ng customer sa serbisyo. Nagdulot ito ng pagtaas sa bilang ng mga order. Kasunod nito, dumami ang mga taxi driver. Bilang resulta, tumaas din ang bilang ng mga matagumpay na nakumpletong order. At bilang resulta, tumaas ang kita ng kumpanya. Siyempre, narito ako ay nauuna nang kaunti sa aking sarili, dahil ang buong prosesong ito ay hindi naganap kaagad. Ang sabihing natuwa ang management ay walang sinasabi. Binigyan ako ng walang limitasyong access sa karagdagang financing ng proyekto.

Upang magpatuloy ..

Pinagmulan: www.habr.com

Magdagdag ng komento