Cómo un pequeño programa convirtió una pequeña oficina en una empresa federal con un beneficio de más de 100 millones de rublos al mes

A finales de diciembre de 2008 me invitaron a uno de los servicios de taxi en Perm con el objetivo de automatizar los procesos comerciales existentes. En general me asignaron tres tareas fundamentales:


  • Desarrollar un paquete de software para un call center con una aplicación móvil para taxistas y automatizar procesos internos de negocio.
  • Todo debía hacerse en el menor tiempo posible.
  • Tenga su propio software, en lugar de comprarlo a desarrolladores externos, que en el futuro, a medida que se desarrolle el negocio, podrá escalarse de forma independiente a las condiciones del mercado en constante cambio.

En ese momento no entendía cómo funciona este mercado y sus matices, pero sin embargo dos cosas me resultaban obvias. El centro de llamadas debe construirse sobre la base del software PBX de código abierto Asterisk. El intercambio de información entre el call center y la aplicación móvil es esencialmente una solución cliente-servidor con todos los patrones correspondientes para diseñar la arquitectura del futuro proyecto y su programación.

Después de una evaluación preliminar de las tareas, plazos y costes del proyecto, y habiendo acordado todas las cuestiones necesarias con el propietario del servicio de taxi, comencé a trabajar en enero de 2009.

De cara al futuro, lo diré de inmediato. El resultado fue una plataforma escalable que se ejecuta en más de 60 servidores en 12 ciudades de Rusia y 2 de Kazajstán. El beneficio total de la empresa fue de más de 100 millones de rublos al mes.

La etapa uno. Prototipo

Como en ese momento no tenía experiencia práctica en telefonía IP y solo conocía superficialmente el asterisco como parte de experimentos "domésticos", se decidió comenzar a trabajar en el desarrollo de una aplicación móvil y una parte del servidor. Al mismo tiempo, cerrar lagunas de conocimiento sobre otras tareas.

Si con la aplicación móvil todo quedó más o menos claro. En ese momento, solo se podía escribir en Java para teléfonos con botones simples, pero escribir un servidor que sirviera a clientes móviles era un poco más complicado:

  • Qué sistema operativo de servidor se utilizará;
  • Partiendo de la lógica de que se elige un lenguaje de programación para una tarea, y no al revés, y teniendo en cuenta el punto 1, qué lenguaje de programación será óptimo para la resolución de problemas;
  • Durante el diseño, fue necesario tener en cuenta las altas cargas previstas en el futuro en el servicio;
  • Qué base de datos puede garantizar la tolerancia a fallos bajo cargas elevadas y cómo mantener un tiempo de respuesta rápido de la base de datos a medida que aumenta el número de solicitudes;
  • El factor determinante fue la velocidad de desarrollo y la capacidad de escalar rápidamente el código.
  • El costo del equipo y su mantenimiento en el futuro (una de las condiciones del cliente es que los servidores deben estar ubicados en el territorio bajo su control);
  • Costo de los desarrolladores que se necesitarán en las próximas etapas de trabajo en la plataforma;

Así como muchas otras cuestiones relacionadas con el diseño y desarrollo.

Antes de comenzar a trabajar en el proyecto, le propuse al propietario de la empresa la siguiente decisión estratégica: dado que el proyecto es bastante complejo, su implementación llevará una cantidad considerable de tiempo, así que primero creo una versión MVP, que no llevará mucho tiempo y dinero, pero que permitirá a su empresa obtener una ventaja competitiva en el mercado ya “aquí y ahora”, y también ampliará sus capacidades como servicio de taxi. A su vez, una solución intermedia de este tipo me dará tiempo para diseñar más cuidadosamente la solución final y tiempo para experimentos técnicos. Al mismo tiempo, no se garantiza que la solución de software implementada esté diseñada correctamente y puede ser rediseñada o reemplazada radicalmente en el futuro, pero definitivamente realizará la funcionalidad mínima necesaria para "separarse de la competencia". Al fundador del taxi le gustó la idea, así que al final lo hicieron.

Las dos primeras semanas las pasé estudiando los procesos de negocio de la empresa y estudiando el funcionamiento de un taxi desde dentro. Se realizó un análisis comercial de dónde, qué y cómo se puede automatizar y si es necesario. ¿A qué dificultades y problemas se enfrentan los empleados de la empresa? Cómo se solucionan. Cómo se organiza la jornada laboral de los empleados de la empresa. ¿Qué herramientas utilizan?

Al final de la tercera semana, después de comenzar a trabajar y estudiar temas de interés en Internet, teniendo en cuenta los deseos del empresario, así como mis propios conocimientos y capacidades en ese momento, se decidió aplicar la siguiente pila :

  • Servidor de base de datos: MsSQL (versión gratuita con límite de archivos de base de datos de hasta 2 GB);
  • Desarrollo de un servidor que atiende a clientes móviles en Delphi bajo Windows, ya que ya existía un servidor Windows en el que se instalaría la base de datos, así como el propio entorno de desarrollo facilita un rápido desarrollo;
  • Teniendo en cuenta las bajas velocidades de Internet en los teléfonos móviles en 2009, el protocolo de intercambio entre el cliente y el servidor debe ser binario. Esto reducirá el tamaño de los paquetes de datos transmitidos y, como resultado, aumentará la estabilidad del trabajo de los clientes con el servidor;

Se dedicaron otras dos semanas a diseñar el protocolo y la base de datos. El resultado fueron 12 paquetes que garantizan el intercambio de todos los datos necesarios entre el cliente móvil y el servidor y unas 20 tablas en la base de datos. Hice esta parte del trabajo teniendo en cuenta el futuro, incluso si tengo que cambiar la pila de tecnología por completo, la estructura de los paquetes y la base de datos debería permanecer sin cambios.

Después del trabajo preparatorio, fue posible comenzar la implementación práctica de la idea. Para acelerar un poco el proceso y tener tiempo para otras tareas, hice una versión borrador de la aplicación móvil, esbocé la interfaz de usuario, en parte la UX, e involucré a un programador de Java conocido en el proyecto. Y se centró en el desarrollo, diseño y pruebas del lado del servidor.

Al final del segundo mes de trabajo en el MVP, la primera versión del prototipo de servidor y cliente estaba lista.

Y al final del tercer mes, después de pruebas sintéticas y pruebas de campo, correcciones de errores y mejoras menores en el protocolo y la base de datos, la aplicación estaba lista para producción. Que es lo que se hizo.

A partir de este momento comienza la parte más interesante y difícil del proyecto.

Durante la transición de los conductores al nuevo software, se organizó una guardia de XNUMX horas. Ya que no todos podían venir en horario laboral durante el día. Además, administrativamente, por decisión decidida del fundador de la empresa, se organizó de tal manera que el nombre de usuario/contraseña era ingresado por el gerente del servicio de taxi y no se comunicaba al conductor. Por mi parte, se necesitaba soporte técnico a los usuarios en caso de fallas y situaciones imprevistas.

La Ley de Murphy nos dice: "Todo lo que puede salir mal, saldrá mal". Y así es como las cosas salieron mal... Una cosa es que varios taxistas y yo probamos la aplicación en varias docenas de pedidos de prueba. Y es una cuestión completamente diferente cuando más de 500 conductores en la línea trabajan en tiempo real con pedidos reales de personas reales.

La arquitectura de la aplicación móvil era simple y presentaba notablemente menos errores que en el servidor. Por lo tanto, el principal foco de trabajo estuvo en el lado del servidor. El fallo más crítico de la aplicación fue el problema de la desconexión del servidor cuando se perdió Internet en el teléfono y se restableció la sesión. E Internet desapareció con bastante frecuencia. En primer lugar, en aquellos años Internet en el teléfono no era lo suficientemente estable. En segundo lugar, había muchos puntos ciegos en los que Internet simplemente no funcionaba. Identificamos este problema casi de inmediato y en XNUMX horas solucionamos y actualizamos todas las aplicaciones instaladas anteriormente.

El servidor presentaba principalmente errores en el algoritmo de distribución de pedidos y procesamiento incorrecto de algunas solicitudes de los clientes. Al identificar fallas, corregí y actualicé el servidor.

De hecho, no hubo muchos problemas técnicos en esta etapa. Toda la dificultad fue que estuve de guardia en la oficina durante casi un mes y sólo de vez en cuando regresaba a casa. Probablemente 4-5 veces. Y dormí a trompicones, ya que en ese momento estaba trabajando solo en el proyecto y nadie excepto yo podía arreglar nada.

Un mes, esto no significa que todo estuvo fallando constantemente durante un mes y estuve codificando algo sin parar. Simplemente decidimos eso. Al fin y al cabo, el negocio ya estaba funcionando y generando beneficios. Es mejor ir a lo seguro y descansar más tarde que perder clientes y ganancias ahora. Todos entendimos esto muy bien, por lo que todo el equipo dedicó colectivamente la máxima atención y tiempo a introducir nuevo software en el sistema de taxi. Y teniendo en cuenta el tráfico actual de pedidos, definitivamente eliminaremos todas las deficiencias en un mes. Bueno, los errores ocultos que puedan permanecer no tendrán consecuencias críticas en el proceso de negocio y, si es necesario, se pueden corregir de forma rutinaria.

Aquí cabe destacar la inestimable asistencia de los directores y capataces de los servicios de taxi, quienes, con la máxima comprensión de la complejidad de la situación de la transferencia de conductores al nuevo software, trabajaron con los conductores las XNUMX horas del día. De hecho, tras completar la instalación de nuevos programas en los teléfonos, no perdimos ni un solo controlador. Y no aumentaron críticamente el porcentaje de no eliminación de clientes, que pronto volvió a los niveles normales.

Con esto se completó la primera etapa de trabajo del proyecto. Y cabe destacar que el resultado no se hizo esperar. Al automatizar la distribución de pedidos a los conductores sin intervención humana, el tiempo medio de espera de un taxi por parte de un cliente se redujo en un orden de magnitud, lo que naturalmente aumentó la fidelidad del cliente al servicio. Esto provocó un aumento en el número de pedidos. A raíz de esto, aumentó el número de taxistas. Como resultado, también ha aumentado el número de pedidos completados con éxito. Y como resultado, las ganancias de la empresa aumentaron. Eso sí, aquí me estoy adelantando un poco, ya que todo este proceso no se produjo de forma instantánea. Decir que la dirección quedó satisfecha es no decir nada. Me dieron acceso ilimitado a financiación adicional del proyecto.

Continuará ..

Fuente: habr.com

Añadir un comentario