No final de dezembro de 2008, fui convidado para um dos serviços de táxi em Perm, a fim de automatizar os processos de negócios existentes. Em geral, três tarefas fundamentais foram definidas diante de mim:
- Desenvolva um pacote de software para um call center com um aplicativo móvel para taxistas e automatize os processos de negócios internos.
- Tudo tinha que ser feito o mais rápido possível.
- Ter um software próprio, e não comprado de desenvolvedores de terceiros, que, no futuro, à medida que a empresa se desenvolvesse, poderia ser escalado de forma independente para mudar constantemente as condições do mercado.
Naquela época, eu não entendia como esse mercado era estruturado e suas nuances, mas, no entanto, duas coisas eram óbvias para mim. A central de atendimento deve ser construída com base na troca de software de código aberto asterisco. A troca de informações entre o call center e o aplicativo móvel é essencialmente uma solução cliente-servidor com todos os padrões relevantes para o design da arquitetura de um projeto futuro e sua programação.
Após uma avaliação preliminar das tarefas, prazos e custos do projeto, tendo acordado todas as perguntas necessárias com o proprietário do serviço de táxi, em janeiro de 2009 comecei a trabalhar.
Olhando para o futuro, direi imediatamente. O resultado foi uma plataforma escalável rodando em mais de 60 servidores em 12 cidades da Rússia e 2 do Cazaquistão. O lucro total da empresa foi de mais de 100 milhões de rublos / mês.
Estágio Um. Protótipo
Como naquela época eu não tinha experiência prática em telefonia IP e conhecia o asterisco superficialmente como parte de experimentos "residenciais", foi decidido começar a trabalhar com o desenvolvimento de um aplicativo móvel e parte do servidor. Ao longo do caminho, fechar lacunas de conhecimento em outras tarefas.
Se com um aplicativo móvel, tudo estava mais ou menos claro. Naquele momento, ele só podia ser escrito em java para telefones simples, e com a gravação de um servidor atendendo a clientes móveis, a pergunta era um pouco mais complicada:
- Qual sistema operacional do servidor será usado;
- Com base na lógica de que uma linguagem de programação é selecionada para a tarefa, e não vice-versa, e levando em consideração a reivindicação 1, qual linguagem de programação será ideal para resolver problemas;
- Ao projetar, era necessário levar em consideração a alta carga futura esperada no serviço;
- Qual banco de dados pode garantir tolerância a falhas em altas cargas e como manter um tempo de resposta rápido com um aumento no número de acessos a ele;
- O fator determinante foi a velocidade do desenvolvimento e a capacidade de escalar rapidamente o código
- O custo do equipamento e sua manutenção no futuro (uma das condições do cliente - o servidor deve estar localizado em seu território);
- O custo dos desenvolvedores que serão necessários nas próximas etapas do trabalho na plataforma;
Assim como muitas outras questões relacionadas ao design e desenvolvimento.
Antes de iniciar o trabalho no projeto, propus a seguinte solução estratégica para o proprietário da empresa: como o projeto é bastante complexo, sua implementação levará um tempo notável, então primeiro crio uma versão MVP que não leva tanto tempo e dinheiro, mas que permitirá à empresa obter uma vantagem competitiva. o mercado já está “aqui e agora” e também expandirá suas capacidades como serviço de táxi. Para mim, por sua vez, essa solução intermediária me dará tempo para projetar mais deliberadamente a solução final e tempo para experimentos técnicos. Ao mesmo tempo, não será garantido que a solução de software implementada seja projetada corretamente e possivelmente seja radicalmente refeita ou substituída no futuro, mas definitivamente executará a funcionalidade mínima necessária para "separação dos concorrentes". O fundador do táxi gostou da ideia, então no final eles gostaram.
Nas duas primeiras semanas que passei estudando processos de negócios na empresa e estudando o trabalho de um táxi "de dentro". Conduziu uma análise de negócios, onde, o que e como automatizar e se é necessário. Que dificuldades e problemas os funcionários da empresa enfrentam? Como resolvê-los. Como é o dia de trabalho organizado pelos funcionários da empresa. Quais ferramentas você usa.
No final da terceira semana após o início do trabalho e o estudo de questões interessantes na Internet, levando em consideração os desejos do proprietário da empresa, bem como meus próprios conhecimentos e capacidades na época, decidiu-se usar a seguinte pilha:
- Servidor de banco de dados: MsSQL (versão gratuita com uma limitação de arquivo de banco de dados de até 4 GB);
- O desenvolvimento de um servidor que atende clientes móveis no Delphi para Windows, já que já havia um servidor Windows no qual o banco de dados será instalado, assim como o próprio ambiente de desenvolvimento contribui para o desenvolvimento rápido;
- Dadas as baixas velocidades da Internet nos telefones celulares em 2009, o protocolo de troca entre o cliente e o servidor deve ser binário. Isso reduzirá o tamanho dos pacotes de dados transmitidos e, como resultado, aumentará a estabilidade dos clientes que trabalham com o servidor;
Outras duas semanas foram gastas no design do protocolo e banco de dados. Foram 12 pacotes que fornecem a troca de todos os dados necessários entre o cliente e o servidor móveis e cerca de 20 tabelas no banco de dados. Fiz essa parte do trabalho com vista para o futuro, mesmo que eu precise alterar completamente a pilha de tecnologia, a estrutura dos pacotes e o banco de dados devem permanecer inalterados.
Após o trabalho preparatório, foi possível iniciar a implementação prática da ideia. Para acelerar um pouco o processo e me liberar para o restante das tarefas, fiz uma versão preliminar do aplicativo móvel, esboçei a interface do usuário, parcialmente o UX e atraí um programador java familiar para o projeto. E ele se concentrou no desenvolvimento do lado do servidor, no design e no teste.
No final do segundo mês de trabalho no MVP, a primeira versão do servidor e cliente protótipo estava pronta.
E até o final do terceiro mês após testes sintéticos e testes de campo, corrigindo bugs, pequenas melhorias no protocolo e no banco de dados, o aplicativo estava pronto para a saída para produção. O que foi feito.
A partir deste momento começa a parte mais interessante e mais difícil do projeto.
Durante a transição dos drivers para o novo software, foi organizada uma tarefa ininterrupta. Como nem todos poderiam chegar durante o dia durante o horário de trabalho. Além disso, administrativamente, por decisão decidida do fundador da empresa, foi organizado para que o login / senha fosse digitado pelo gerente do serviço de táxi e não fosse comunicado ao motorista. De minha parte, eu precisava de suporte técnico dos usuários em caso de falhas e situações imprevistas.
A Lei de Murphy nos diz: "Tudo o que pode dar errado vai dar errado". E não foi assim que tudo aconteceu ... Uma coisa foi quando eu e vários taxistas testamos o aplicativo em dezenas de pedidos de teste. E outra coisa é quando mais de 500 motoristas na linha trabalham em tempo real, sob ordens reais de pessoas reais.
A arquitetura do aplicativo móvel era simples e havia muito menos erros nele do que no servidor. Portanto, o foco principal do trabalho estava no lado do servidor. A falha mais crítica no aplicativo foi o problema de desconectar do servidor quando a Internet desapareceu no telefone e a sessão foi restaurada novamente. E a Internet desapareceu com bastante frequência. Em primeiro lugar, a Internet no telefone em si não era estável o suficiente naqueles anos. Em segundo lugar, havia muitos pontos cegos em que a Internet simplesmente não funcionava. Identificamos esse problema quase imediatamente e eliminamos e atualizamos todos os aplicativos instalados anteriormente em 24 horas.
No servidor, houve principalmente erros no algoritmo para distribuição de pedidos e processamento incorreto de algumas solicitações dos clientes. Com o fato de revelar falhas, corrigimos e atualizamos o servidor.
De fato, não havia muitos problemas técnicos nesta fase. A dificuldade toda era que, durante quase um mês, eu estava de serviço no escritório, apenas ocasionalmente chegando em casa. 4-5 vezes, provavelmente. E ele dormia aos trancos e barrancos, pois naquela época sozinho trabalhava no projeto e ninguém conseguia consertar nada além de mim.
Um mês, isso não significa que tudo estava constantemente errado durante um mês, e eu, sem cessar, codifiquei algo lá. Nós apenas decidimos que sim. Afinal, o negócio já funcionou e obteve lucro. E é melhor jogar com segurança e relaxar mais tarde do que perder clientes e lucros agora. Todos entendemos perfeitamente, então toda a equipe prestou a máxima atenção e tempo para introduzir um novo software no sistema de táxi. E levando em conta o tráfego de pedidos atual, em um mês, definitivamente eliminaremos todas as deficiências. Bem, os erros ocultos que podem permanecer certamente não terão consequências críticas no processo de negócios e, se necessário, podem ser corrigidos na ordem de funcionamento.
Aqui, vale ressaltar a ajuda inestimável dos diretores e líderes de equipe dos serviços de táxi, que, com o máximo entendimento da complexidade da situação da transferência de motoristas para um novo software, trabalhavam dia e noite com motoristas. De fato, depois de concluir a instalação de novos programas nos telefones, não perdemos um único driver. E eles não aumentaram criticamente a porcentagem de clientes não exportadores, que logo retornaram aos níveis normais.
Esta foi a primeira etapa do trabalho no projeto. E deve-se notar que o resultado não demorou a chegar. Ao automatizar a distribuição de pedidos aos motoristas sem intervenção humana, o tempo médio de espera de um táxi por um cliente foi reduzido em uma ordem de magnitude, o que naturalmente aumentou a lealdade do cliente ao serviço. Isso levou a um aumento no número de pedidos. A seguir, aumentou o número de motoristas de táxi. Como resultado, o número de pedidos concluídos com sucesso aumentou. E, como resultado, o lucro da empresa aumentou. Claro, aqui estou um pouco à frente, pois todo esse processo não foi instantâneo. Dizer que a administração foi suficiente é não dizer nada. Eu era ilimitado no financiamento adicional do projeto.
Para ser continuado ..