Come un piccolo programma ha trasformato un piccolo ufficio in un'azienda federale con un profitto di oltre 100 milioni di rubli al mese

Alla fine di dicembre 2008 sono stato invitato ad uno dei servizi taxi di Perm con l'obiettivo di automatizzare i processi aziendali esistenti. In generale mi sono stati affidati tre compiti fondamentali:


  • Sviluppa un pacchetto software per un call center con un'applicazione mobile per tassisti e automatizza i processi aziendali interni.
  • Tutto doveva essere fatto nel più breve tempo possibile.
  • Avere il proprio software, invece di acquistarlo da sviluppatori di terze parti, che in futuro, con lo sviluppo dell'attività, potrà essere adattato in modo indipendente alle condizioni di mercato in costante cambiamento.

A quel tempo non capivo come funziona questo mercato e le sue sfumature, ma ciononostante due cose mi erano ovvie. Il call center deve essere costruito sulla base del software PBX open source Asterisk. Lo scambio di informazioni tra il call center e l'applicazione mobile è essenzialmente una soluzione client-server con tutti i modelli corrispondenti per progettare l'architettura del progetto futuro e la sua programmazione.

Dopo una valutazione preliminare dei compiti, delle scadenze e dei costi del progetto, e dopo aver concordato tutte le questioni necessarie con il titolare del servizio taxi, ho iniziato i lavori nel gennaio 2009.

Guardando al futuro, lo dirò subito. Il risultato è stato una piattaforma scalabile in esecuzione su oltre 60 server in 12 città in Russia e 2 in Kazakistan. Il profitto totale dell'azienda è stato di oltre 100 milioni di rubli al mese.

Fase uno. Prototipo

Poiché a quel tempo non avevo esperienza pratica nella telefonia IP e conoscevo solo superficialmente l'asterisco come parte di esperimenti "casalinghi", si è deciso di iniziare a lavorare con lo sviluppo di un'applicazione mobile e di una parte server. Allo stesso tempo, colmare le lacune nella conoscenza su altri compiti.

Se con l'applicazione mobile tutto fosse più o meno chiaro. A quel tempo poteva essere scritto in Java solo per semplici telefoni a pulsanti, ma scrivere un server che servisse client mobili era un po' più complicato:

  • Quale sistema operativo del server verrà utilizzato;
  • Basandosi sulla logica secondo cui si sceglie un linguaggio di programmazione per un compito, e non viceversa, e tenendo conto del punto 1, quale linguaggio di programmazione sarà ottimale per risolvere i problemi;
  • In fase di progettazione è stato necessario tenere conto dei futuri elevati carichi attesi sul servizio;
  • Quale database può garantire la tolleranza agli errori in caso di carichi elevati e come mantenere tempi di risposta rapidi del database all'aumentare del numero di richieste;
  • Il fattore determinante è stata la velocità di sviluppo e la capacità di scalare rapidamente il codice
  • Il costo delle apparecchiature e della sua manutenzione futura (una delle condizioni del cliente è che i server siano localizzati nel territorio sotto il suo controllo);
  • Costo degli sviluppatori che saranno necessari nelle prossime fasi di lavoro sulla piattaforma;

Oltre a molte altre questioni legate alla progettazione e allo sviluppo.

Prima di iniziare a lavorare sul progetto, ho proposto al titolare dell'azienda la seguente decisione strategica: poiché il progetto è piuttosto complesso, la sua implementazione richiederà molto tempo, quindi prima creo una versione MVP, che non richiederà molto tempo e denaro, ma che consentirà alla sua azienda di ottenere un vantaggio competitivo sul mercato già “qui e ora”, e amplierà anche le sue capacità come servizio di taxi. A sua volta, una soluzione intermedia di questo tipo mi darà il tempo per progettare in modo più ponderato la soluzione finale e tempo per gli esperimenti tecnici. Allo stesso tempo, non sarà garantito che la soluzione software implementata sia progettata correttamente e potrebbe essere radicalmente riprogettata o sostituita in futuro, ma svolgerà sicuramente le funzionalità minime necessarie per “distaccarsi dalla concorrenza”. L'idea è piaciuta al fondatore del taxi, quindi alla fine l'hanno realizzato.

Ho trascorso le prime due settimane studiando i processi aziendali in azienda e studiando il lavoro di un taxi dall'interno. Condotto un'analisi aziendale su dove, cosa e come può essere automatizzato e se è necessario. Quali difficoltà e problemi devono affrontare i dipendenti dell’azienda? Come vengono risolti. Come è organizzata la giornata lavorativa dei dipendenti dell'azienda. Quali strumenti utilizzano?

Entro la fine della terza settimana, dopo aver iniziato a lavorare e aver studiato questioni di interesse su Internet, tenendo conto dei desideri dell'imprenditore, nonché delle mie conoscenze e capacità in quel momento, si è deciso di applicare il seguente stack :

  • Server database: MsSQL (versione gratuita con limite di file di database fino a 2 GB);
  • Sviluppo di un server per i client mobili in Delphi sotto Windows, poiché esiste già un server Windows su cui verrà installato il database e l'ambiente di sviluppo stesso facilita uno sviluppo rapido;
  • Considerando la bassa velocità di Internet sui telefoni cellulari nel 2009, il protocollo di scambio tra client e server deve essere binario. Ciò ridurrà la dimensione dei pacchetti di dati trasmessi e, di conseguenza, aumenterà la stabilità del lavoro dei client con il server;

Sono state spese altre due settimane per progettare il protocollo e il database. Il risultato sono 12 pacchetti che garantiscono lo scambio di tutti i dati necessari tra client mobile e server e circa 20 tabelle nel database. Ho fatto questa parte del lavoro pensando al futuro, anche se dovessi cambiare completamente lo stack tecnologico, la struttura dei pacchetti e del database dovrebbe rimanere invariata.

Dopo il lavoro preparatorio è stato possibile iniziare la realizzazione pratica dell'idea. Per accelerare un po' il processo e liberare tempo per altre attività, ho realizzato una bozza dell'applicazione mobile, ho abbozzato l'interfaccia utente, in parte la UX, e ho coinvolto nel progetto un programmatore Java che conoscevo. E si è concentrato sullo sviluppo, sulla progettazione e sui test lato server.

Entro la fine del secondo mese di lavoro sull'MVP, la prima versione del prototipo del server e del client era pronta.

E alla fine del terzo mese, dopo test sintetici e sul campo, correzioni di bug e piccoli miglioramenti al protocollo e al database, l'applicazione era pronta per la produzione. Questo è ciò che è stato fatto.

Da questo momento inizia la parte più interessante e allo stesso tempo più difficile del progetto.

Durante la transizione degli autisti al nuovo software, è stato organizzato il servizio XNUMX ore su XNUMX. Poiché non tutti potevano venire durante l'orario di lavoro durante il giorno. Inoltre, dal punto di vista amministrativo, per decisione volitiva del fondatore della società, è stata organizzata in modo tale che login/password venissero inserite dal gestore del servizio taxi e non venissero comunicate all'autista. Da parte mia, era necessario il supporto tecnico per gli utenti in caso di guasti e situazioni impreviste.

La legge di Murphy ci dice: "Tutto ciò che può andare storto, andrà storto". Ed è proprio così che le cose sono andate storte... Una cosa è che io e diversi tassisti abbiamo testato l'applicazione su diverse decine di ordini di prova. Ed è una questione completamente diversa quando oltre 500 autisti sulla linea lavorano in tempo reale su ordini reali da persone reali.

L'architettura dell'applicazione mobile era semplice e conteneva notevolmente meno bug rispetto al server. Pertanto, l'obiettivo principale del lavoro era sul lato server. Il problema più critico nell'applicazione è stato il problema della disconnessione dal server quando si perdeva Internet sul telefono e la sessione veniva ripristinata nuovamente. E Internet è scomparso abbastanza spesso. In primo luogo, in quegli anni Internet sul telefono stesso non era sufficientemente stabile. In secondo luogo, c’erano molti punti ciechi in cui Internet semplicemente non funzionava. Abbiamo identificato questo problema quasi immediatamente ed entro XNUMX ore abbiamo risolto e aggiornato tutte le applicazioni installate in precedenza.

Il server presentava principalmente errori nell'algoritmo di distribuzione degli ordini e un'errata elaborazione di alcune richieste da parte dei clienti. Dopo aver identificato i problemi, ho corretto e aggiornato il server.

In effetti, non c'erano molti problemi tecnici in questa fase. Tutta la difficoltà stava nel fatto che ero in servizio in ufficio per quasi un mese, tornando a casa solo occasionalmente. Probabilmente 4-5 volte. E ho dormito a singhiozzo, dato che in quel momento stavo lavorando al progetto da solo e nessuno tranne me poteva aggiustare nulla.

Un mese, questo non significa che tutto abbia avuto costantemente problemi per un mese e stavo codificando qualcosa senza fermarmi. L'abbiamo appena deciso. Dopotutto, l’attività era già operativa e realizzava profitti. È meglio andare sul sicuro e riposarsi più tardi piuttosto che perdere clienti e profitti adesso. Lo abbiamo capito tutti molto bene, quindi l'intero team ha dedicato collettivamente la massima attenzione e tempo all'introduzione del nuovo software nel sistema taxi. E tenendo conto dell'attuale traffico di ordini, entro un mese elimineremo definitivamente tutte le carenze. Ebbene, i bug nascosti che potrebbero rimanere non avranno certamente conseguenze critiche sul processo aziendale e, se necessario, potranno essere corretti regolarmente.

Qui è necessario notare la preziosa assistenza dei direttori e dei capisquadra dei servizi di taxi, che, con la massima comprensione della complessità della situazione del trasferimento dei conducenti al nuovo software, hanno lavorato con i conducenti XNUMX ore su XNUMX. Infatti, dopo aver completato l'installazione dei nuovi programmi sui telefoni, non abbiamo perso un solo driver. E non hanno aumentato in modo critico la percentuale di clienti non allontanati, che è stata presto riportata a livelli normali.

Ciò ha completato la prima fase di lavoro sul progetto. E va notato che il risultato non si è fatto attendere. Automatizzando la distribuzione degli ordini agli autisti senza intervento umano, il tempo medio di attesa per un taxi da parte di un cliente è stato ridotto di un ordine di grandezza, il che ha naturalmente aumentato la fedeltà del cliente al servizio. Ciò ha portato ad un aumento del numero di ordini. Successivamente è aumentato il numero dei tassisti. Di conseguenza è aumentato anche il numero degli ordini completati con successo. E di conseguenza, i profitti dell’azienda sono aumentati. Naturalmente, qui sto andando un po' troppo avanti, poiché l'intero processo non è avvenuto all'istante. Dire che la direzione era contenta è non dire nulla. Mi è stato dato accesso illimitato a ulteriori finanziamenti del progetto.

Per essere continuato ..

Fonte: habr.com

Aggiungi un commento