Expediente Técnico: Syma.pe
Objetivos Técnicos
Como CTO y co-fundador de Syma.pe, lideré la creación y evolución de una solución integral de Punto de Venta (POS) para empresas peruanas, con un enfoque particular en la facturación electrónica conforme a los estándares de la SUNAT.
Este proyecto tenía como objetivo resolver los desafíos del mercado local y ofrecer herramientas tributarias eficientes. A continuación, se detallan las cuatro etapas del proyecto Syma.pe, describiendo los Objetivos Técnicos, Retos Técnicos, Tecnologías Usadas, Limitaciones Técnicas y Detalles Técnicos.
Fecha: 2018-2023
Etapa 1: MVP
Objetivos Técnicos
- Desarrollar funcionalidades básicas de un POS.
- Implementar la facturación electrónica utilizando SOAP APIs con WSDL.
- Iterar rápidamente en base al feedback de los clientes.
Retos Técnicos
- Comprender y aplicar UBL 2.1 para facturación electrónica.
- Empaquetar un producto web para uso local.
- Mantener versiones consistentes entre múltiples clientes.
Tecnologías Usadas
- CodeIgniter: Framework PHP que facilitó la implementación rápida mediante su estructura MVC, permitiendo separar la lógica de negocio de la presentación.
- jQuery: Biblioteca JavaScript para manipulación del DOM y eventos, proporcionando una interfaz de usuario dinámica y responsiva.
- MySQL: Base de datos relacional empleada para almacenar datos transaccionales e inventarios, optimizada con índices y consultas preparadas para mejorar el rendimiento.
Limitaciones Técnicas
- Desconocimiento inicial de SOAP APIs y UBL 2.1, lo cual implicó una curva de aprendizaje considerable.
- Actualizaciones manuales del software, causando inconsistencias entre versiones de clientes.
- Dependencia de la disponibilidad del servicio de SUNAT para el envío de documentos electrónicos, generando problemas durante caídas del servicio.
Detalles Técnicos
- SOAP APIs con WSDL: Implementación de servicios web XML para la integración con SUNAT, utilizando herramientas como SoapUI para pruebas y depuración. Se diseñaron e implementaron las clases PHP para generar y consumir estos servicios, manejando errores comunes y excepciones.
- Distribución y Empaquetado: El software se empaquetaba usando instaladores personalizados para Windows y Linux, empleando scripts de Bash y archivos batch para automatizar el despliegue. Las actualizaciones eran manuales, realizadas mediante instaladores distribuidos a los clientes, lo que resultaba en inconsistencias de versión.
Etapa 2: Monolito
Objetivos Técnicos
- Ampliar las funcionalidades del software para incluir gestión de inventarios, control de gastos y manejo de usuarios.
- Migrar a una arquitectura monolítica más robusta y estructurada.
- Introducir el concepto de SaaS y gestionar suscripciones.
Retos Técnicos
- Asumir el rol de Tech Leader y liderar un equipo de desarrollo.
- Realizar las primeras integraciones con servidores en la nube (primero Linode y luego AWS).
- Optimizar el envío de documentos a SUNAT utilizando colas asincrónicas.
Tecnologías Usadas
- Laravel: Framework PHP que proporcionó una estructura MVC sólida, utilizando Eloquent ORM para interactuar con la base de datos y Blade para la generación de vistas.
- Redis: Base de datos en memoria utilizada para caching de sesiones y datos frecuentemente accedidos, mejorando significativamente el rendimiento del sistema.
- Vue.js: Framework JavaScript para crear una interfaz de usuario reactiva y modular, con gestión de estado mediante Vuex.
- Nginx: Servidor web y proxy inverso configurado para manejo eficiente de conexiones concurrentes, balanceo de carga y caché de contenido estático.
Limitaciones Técnicas
- Reentrenamiento en nuevas tecnologías como Laravel y Redis.
- Desafíos en la gestión y liderazgo de un equipo de desarrolladores.
- Migrar clientes de un modelo de pago único a uno de suscripción mensual.
Detalles Técnicos
- Colas Asincrónicas en Laravel: Uso de Redis como backend para Laravel Queue, manejando tareas en segundo plano como el envío de documentos a SUNAT y la generación de informes. Se configuraron workers en servidores separados para procesar colas de manera eficiente, utilizando Horizon para monitorear las colas.
- Integración en la Nube: Despliegue en Linode utilizando un único servidor (Single Server Deployment) y luego migración a AWS, utilizando EC2 para la infraestructura principal y RDS para la base de datos. Se emplearon scripts de Terraform para gestionar la infraestructura como código, permitiendo una gestión reproducible y escalable. Además, se implementaron prácticas de CI/CD para desplegar automáticamente las actualizaciones.
Etapa 3: Microservicios
Objetivos Técnicos
- Desacoplar el monolito en microservicios para mejorar la escalabilidad y el mantenimiento.
- Implementar servicios específicos utilizando lenguajes y tecnologías óptimas para cada caso.
- Adoptar metodologías ágiles para mejorar la eficiencia del desarrollo.
Retos Técnicos
- Coordinación de múltiples lenguajes y tecnologías.
- Migraciones de bases de datos (de MySQL a PostgreSQL y MongoDB).
- Asegurar la consistencia y disponibilidad de servicios distribuidos.
Tecnologías Usadas
- Python: Utilizado para la generación de documentos electrónicos para SUNAT, empleando Flask para construir microservicios ligeros y eficientes.
- Node.js: Desarrollo de servicios backend adicionales, utilizando Express.js y Koa.js para gestionar rutas y middleware de manera eficiente.
- PostgreSQL: Base de datos relacional avanzada, configurada con replicación y particionamiento para manejar grandes volúmenes de datos y mejorar la disponibilidad.
- MongoDB: Utilizada para el almacenamiento de documentos emitidos, configurada con sharding y clústeres replicados para alta disponibilidad y rendimiento.
- ElasticSearch: Motor de búsqueda para indexación y búsqueda rápida de documentos y productos, utilizando índices invertidos y capacidades de análisis en tiempo real.
- AWS Lambda: Funciones serverless para procesamiento en la nube, utilizando Step Functions para coordinar flujos de trabajo complejos.
Limitaciones Técnicas
- Complejidad en la gestión y despliegue de múltiples microservicios.
- Requiere conocimiento avanzado en diversas tecnologías y herramientas.
- Necesidad de una infraestructura sofisticada para soportar la arquitectura de microservicios.
Detalles Técnicos
- Desacoplamiento del Monolito: Identificación de dominios de negocio clave y reestructuración de estos en microservicios independientes. Se implementaron APIs RESTful para la comunicación entre servicios, utilizando JWT para autenticación y autorización.
- Orquestación y Contenedores: Uso de Docker y Kubernetes para el despliegue y orquestación de microservicios, facilitando la escalabilidad horizontal y la gestión eficiente de recursos. Se configuraron CI/CD pipelines con Jenkins y GitLab CI para despliegue automatizado. Se utilizó Prometheus para monitoreo y Grafana para visualización de métricas.
Etapa 4: Venta de la Propiedad Intelectual
Objetivos Técnicos
- Preparar la plataforma para su transferencia y adecuarla para el nuevo entorno del comprador.
- Asegurar que todos los procesos de negocio y técnicos estén documentados y sean transferibles.
- Mantener la integridad y operatividad del software durante y después de la transferencia.
- Proporcionar soporte técnico y conocimiento experto durante el período de transición.
Retos Técnicos
- Documentar completamente el código, arquitectura y procesos operativos para facilitar la transferencia.
- Asegurar la compatibilidad de la infraestructura con el entorno del comprador.
- Migrar los datos y servicios sin interrupciones significativas para los usuarios.
- Proporcionar soporte técnico post-venta para asegurar la continuidad del servicio y la satisfacción del comprador.
Tecnologías Usadas
- Git: Sistema de control de versiones para gestionar el código fuente y coordinar la colaboración entre múltiples desarrolladores. Uso de GitFlow para organizar el flujo de trabajo y mantener la estabilidad del código.
- Docker: Contenerización de la aplicación para asegurar que sea portátil y fácil de desplegar en el entorno del comprador.
- Terraform: Herramienta de infraestructura como código utilizada para definir y provisionar la infraestructura en la nube de forma reproducible y escalable.
- Jira: Plataforma de gestión de proyectos para coordinar las tareas relacionadas con la transferencia de propiedad intelectual, asegurando que todos los hitos y entregables sean alcanzados de manera oportuna.
- Confluence: Herramienta de documentación colaborativa para mantener y compartir toda la documentación técnica y operativa de manera accesible y organizada.
Limitaciones Técnicas
- Complejidad en la migración de datos y servicios a la infraestructura del comprador.
- Necesidad de asegurar que todos los aspectos de seguridad y cumplimiento normativo se mantengan durante la transferencia.
- Gestión de la transición de clientes y soporte post-venta para asegurar continuidad del servicio.
- Coordinación efectiva entre los equipos técnicos del vendedor y del comprador para evitar malentendidos y asegurar una transferencia sin problemas.
Detalles Técnicos
- Documentación Exhaustiva: Creación de documentación técnica detallada que abarca desde diagramas de arquitectura y flujos de datos hasta especificaciones de API y procedimientos operativos estándar. Se utilizó Confluence y ReadTheDocs para mantener la documentación accesible y actualizada. Esta documentación incluye guías de instalación, manuales de usuario, y procedimientos de mantenimiento.
- Contenerización y Orquestación: Uso de Docker para contenerizar todos los servicios, asegurando que sean fácilmente desplegables en cualquier entorno. Kubernetes fue utilizado para orquestar estos contenedores, facilitando la gestión y escalabilidad de la aplicación.
- Migración de Infraestructura: Planificación y ejecución de la migración de la infraestructura existente a la del comprador, utilizando herramientas de migración de AWS para asegurar una transición sin interrupciones. Se realizaron pruebas de aceptación del usuario (UAT) para validar la funcionalidad del software post-migración y asegurar que cumpla con los requisitos del comprador.
- Seguridad y Cumplimiento: Revisión exhaustiva de todas las políticas de seguridad y cumplimiento normativo para asegurar que el software transferido cumpla con todas las regulaciones aplicables. Se implementaron medidas de seguridad adicionales, como la encriptación de datos en tránsito y en reposo, para proteger la información sensible durante la transferencia.
- Soporte Post-Venta: Establecimiento de un período de soporte post-venta durante el cual se proporcionará asistencia técnica y resolución de problemas. Se asignó un equipo dedicado para manejar las consultas del comprador y garantizar una transición sin problemas, minimizando el impacto en los usuarios finales.