Saltar al contenido

Experiencia

Software empresarial desde 2019: banca, logística y comercio. Empecé arreglando sistemas y terminé diseñándolos.

años de experiencia
7
empresas
3
  1. Actual

    oct 2025 — hoy

    1 año y 1 mesRemoto · EE. UU.

    MikMak (by Spins)

    Senior Software Engineer

    Software de marketing y comercio para marcas.

    Entré en octubre de 2025, completamente remoto para una empresa de EE. UU. desde Ecuador. Spins adquirió MikMak a comienzos de 2026. Desde el principio me pusieron en un proyecto nuevo: la nueva app principal para los empleados, que reemplaza a un par de apps viejas llenas de errores y difíciles de mantener. La empresa tiene más madurez en arquitectura y diseño que las anteriores, y desde el primer día estábamos en AWS.

    La app es un monolito modular en .NET con una interfaz en Vue 3. Hay un equipo grande y soy parte de él. No soy el líder del equipo, pero la mayoría de las decisiones sobre esta app son mías y reviso casi todo su código, así que en la práctica es mi responsabilidad. Aquí las decisiones de diseño son la parte principal del trabajo, no algo que ocurre junto a los tickets. También gestiono su infraestructura, que es sencilla pero importante: Route 53, un ALB, Fargate, ElastiCache (Redis), S3, MongoDB y MySQL, con Auth0 para la autenticación. Todo está escrito en OpenTofu y se aplica con Spacelift.

    Tras la adquisición nos fusionamos con Destini, otra empresa de Spins y un competidor más pequeño con funciones muy parecidas. Yo abrí el camino con el software que convierte a los clientes de Destini en clientes de MikMak. Es un módulo completo dentro de la app principal, con mucho código asíncrono y orientado a eventos, y ya ha migrado a cientos de clientes.

    No toco las bases de datos SQL directamente, hay un equipo para eso, pero uso EF. Eso significa asegurarme de que las consultas no pasen de 30 segundos y no tengan problemas N+1. Es el mismo tipo de problema que antes arreglaba en tickets, y ahora el trabajo es no escribirlo desde el principio.

    También estoy a cargo de una biblioteca de componentes compartida. Hoy cada app de UI tiene su propio estilo, así que los componentes se están moviendo a un solo paquete de npm que pueda usar cualquier app.

    Llevo cerca de un año aquí, casi todo en esta misma app. Abarca varios microservicios y va a seguir creciendo hasta ser la app interna principal de la empresa, así que las decisiones clave pasan por mí.

    Logros

    • 100s

      Clientes de Destini pasados a MikMak por el módulo de migración que lideré, un proceso asíncrono y orientado a eventos que ya se ha ejecutado para cientos de ellos.

    • 4 módulos

      Pasados de las apps viejas al nuevo monolito modular, más un par de módulos nuevos. Las apps viejas estaban llenas de errores y eran difíciles de mantener.

    • < 30 s

      El límite al que someto cada consulta de EF, sobre bases de datos que son de otro equipo, sin N+1. En Logiztik arreglaba esto después. Aquí intento no escribirlo.

    • .NET
    • Vue 3
    • AWS
    • Fargate
    • MongoDB
    • MySQL
    • Redis
    • Auth0
    • OpenTofu
    • Spacelift
    • Datadog
  2. ago 2023 — ago 2025

    2 años y 1 mesRemote · Ecuador

    Logiztik Alliance Group

    Senior Software Engineer

    Logística de importación y exportación para Ecuador.

    Entré en agosto de 2023 como desarrollador junior y me subieron a senior poco después, cuando la empresa vio que había evaluado mal mi nivel. Logiztik maneja importaciones y exportaciones desde y hacia Ecuador. Un cliente quiere mucho de un producto, un productor quiere exportarlo, y ninguno sabe cómo moverlo. Logiztik se encarga de todo eso para cientos de exportadores y clientes, con millones de dólares en mercadería moviéndose cada día. Los sistemas detrás eran un desorden.

    Con el tiempo el trabajo pasó de arreglar el sistema a darle forma. Todo corría on premises, y ahí tomé decisiones de arquitectura. Ayudé a añadir observabilidad a varios servicios, empecé un application gateway, separé monolitos en microservicios y traje Docker, que luego usamos con el equipo de infraestructura para los servicios nuevos. Cuando me fui se hablaba de usar Azure Kubernetes.

    Mi primer proyecto grande fue el backend de una app móvil antigua para clientes. Era una API en .NET Framework sin arquitectura, difícil de mantener y de desenredar. La pasé completa a .NET 8 con Clean Architecture, yo solo y con un líder revisando el trabajo.

    Contabilidad usaba un servicio viejo que convertía nuestros datos financieros a algo que SAP entendía. Se congelaba seguido, y TI tenía que reiniciar todo el servidor varias veces por semana o contabilidad no podía trabajar. Nuestra licencia de SAP limitaba el número de conexiones, y cuando había suficientes abiertas, SAP no rechazaba la siguiente, la dejaba colgada para siempre. Reiniciar el servicio no ayudaba, porque las conexiones colgadas seguían bloqueando la base de datos. Al pasar el servicio a .NET actual añadí un semáforo alrededor del SDK de SAP para que nunca abra más conexiones de las permitidas. Los congelamientos se acabaron por completo.

    Enviar facturas era una operación bloqueante. Un clic mandaba miles de correos y dejaba al usuario atado durante horas. Puse los correos en una cola y un microservicio aparte los envía uno por uno, así la gente sigue trabajando y los fallos aparecen en una página de errores. Fue un proyecto pequeño, pero el primer trabajo asíncrono de la empresa.

    Conectarse a APIs externas significaba que un desarrollador escribiera un conector nuevo cada vez, y las APIs cambiaban o llegaban nuevas todo el tiempo. La mayoría sigue los mismos estándares, así que lo rehíce con parámetros: URLs, códigos de autenticación y similares. Si llega una API con un estándar nuevo, soportarla es una implementación más de una interfaz (el patrón Strategy) en vez de más if.

    En paralelo corregí cientos de errores. En mi segundo año me pusieron a cargo del equipo de tickets, hasta tres personas corrigiendo errores a tiempo completo mientras otros equipos construían funcionalidades. Ese no era el trabajo que quería hacer, así que me fui.

    Logros

    • Reinicios → 0

      El servicio de SAP del que dependía contabilidad se congelaba y exigía reiniciar todo el servidor varias veces por semana. Un semáforo que limita las conexiones a SAP lo resolvió para siempre.

    • Meses → config

      Conectarse a una API externa nueva implicaba que un desarrollador escribiera un conector nuevo, lo que podía tomar meses. Ahora es una entrada nueva con los parámetros correctos.

    • 5 min → ms

      Consultas lentas que encontré al resolver tickets. Casi siempre problemas N+1, resueltos con tablas temporales, CTE o mejores consultas de EF.

    • .NET
    • SQL
    • Entity Framework
    • Docker
    • SAP
    • Azure DevOps
    • Next.js
  3. ago 2019 — jul 2023

    4 añosRemote · Ecuador

    CloudStudio

    Junior Software Engineer

    Software bancario para cooperativas de ahorro y crédito de Ecuador.

    Empecé como pasante en agosto de 2019 y me contrataron unos dos meses después. El producto era un sistema bancario usado por unas 30 cooperativas de ahorro y crédito de Ecuador. Cubría ahorros, créditos, inversiones y más, con un gran motor de parámetros que permitía a los administradores configurar productos y flujos. Era una aplicación en .NET Framework con un frontend en Silverlight.

    Casi todo mi trabajo allí fue dentro de decisiones de diseño que otros habían tomado. Las primeras que fueron mías eran pequeñas: un escritor por lotes para las importaciones y un trabajo en segundo plano para los usuarios lejos del servidor.

    Los primeros tres años trabajé tickets: reportes con DevExpress, mantenimiento de base de datos y código en .NET, EF y Silverlight. Di soporte directo a unas diez de las cooperativas.

    Los reportes salían directamente de la base de datos de producción, así que acelerarlos significaba optimizar procedimientos almacenados, consultas y EF. Los más difíciles reconstruían el saldo de una cuenta de ahorros desde su primera transacción, para comprobar que la contabilidad y las finanzas seguían cuadrando.

    Cuando otro equipo pasó la aplicación a un .NET más nuevo y WPF, dediqué cerca de un mes a corregir los errores que dejó la migración, hasta que se convirtió en la versión estándar.

    Logros

    • min → s

      Reportes contables y financieros pesados, de 5–10 minutos a hasta 30 segundos. Optimicé procedimientos almacenados, consultas y EF, sin un data warehouse en el que apoyarme.

    • 30 → 2 min

      Cargas masivas de archivos con millones de registros. Reemplacé una extensión de EF de pago con mi propio escritor por lotes y añadí un trabajo en segundo plano para usuarios lejos del servidor.

    • 6×

      Capacité a los equipos de cooperativas que compraron el código, para que pudieran operar el sistema por su cuenta.

    • .NET
    • SQL
    • Entity Framework
    • DevExpress
    • Silverlight