En los últimos años, las plataformas para asambleas virtuales y votaciones digitales crecieron considerablemente. Sin embargo, detrás de una experiencia aparentemente simple para el usuario, existen retos técnicos complejos relacionados con sincronización, persistencia de información, control de estados y manejo concurrente de sesiones.
Uno de los proyectos más interesantes en los que trabajamos consistió en desarrollar una solución integral para administración de asambleas, votaciones y encuestas digitales, donde coexistían dos entornos diferentes funcionando al mismo tiempo:
El principal reto no era únicamente mostrar preguntas o registrar votos. El verdadero desafío estaba en garantizar consistencia, continuidad y control preciso del proceso completo de votación incluso bajo condiciones inestables de conexión.
Actualmente muchas plataformas recurren inmediatamente a tecnologías realtime como:
Sin embargo, en este proyecto existían restricciones importantes relacionadas con infraestructura, estabilidad de red y control operativo. Por esta razón se tomó la decisión de no utilizar ninguna arquitectura realtime tradicional.
En lugar de eso, toda la plataforma fue diseñada utilizando un modelo controlado mediante:
Esto obligó a diseñar una arquitectura extremadamente precisa.
La plataforma administrativa permitía al moderador:
Mientras tanto, los usuarios desde dispositivos móviles o navegadores ingresaban a una interfaz simplificada donde podían responder las preguntas habilitadas.
El problema comenzaba cuando ocurrían situaciones reales como:
En sistemas mal diseñados, estos escenarios suelen provocar:
La solución consistió en diseñar un modelo de persistencia extremadamente detallado.
Cada interacción importante del usuario generaba registros específicos relacionados con:
En lugar de depender del frontend para recordar el estado del usuario, toda la lógica crítica permanecía centralizada en el servidor.
Esto permitía que, si un participante respondía dos preguntas y perdía conexión antes de la tercera, al volver a ingresar:
Sin reiniciar el proceso.
Sin perder información.
Sin afectar integridad de la votación.
Uno de los errores más comunes en sistemas de votación consiste en delegar demasiado control al frontend.
En nuestro caso, las reglas sensibles jamás dependían únicamente de la interfaz visual.
Todas las validaciones importantes se realizaban desde backend:
El frontend únicamente representaba el estado autorizado por el servidor.
Esto permitió mantener estabilidad incluso cuando:
Otro problema complejo surgía cuando el moderador avanzaba la asamblea mientras algunos usuarios aún presentaban retrasos de sincronización.
La plataforma debía impedir:
Para solucionarlo se implementó un sistema de validación de secuencia mediante identificadores de control y estados transaccionales que garantizaban que cada participante únicamente pudiera interactuar con la etapa exacta autorizada en ese momento.
En sistemas de votación, la integridad de la información es más importante que la velocidad visual.
Por esta razón, gran parte del esfuerzo técnico estuvo orientado hacia:
Muchas veces, desde afuera, los usuarios únicamente ven botones y preguntas.
Pero internamente, este tipo de plataformas requieren un nivel de control similar al utilizado en sistemas financieros o transaccionales.
Uno de los aprendizajes más importantes de este proyecto fue entender que no siempre la solución más moderna es necesariamente la correcta.
Aunque hoy existen múltiples tecnologías realtime muy eficientes, en ciertos escenarios una arquitectura basada en:
puede ofrecer resultados igual de sólidos, más controlables y más fáciles de mantener operativamente.
Desarrollar plataformas de votación digital implica mucho más que mostrar preguntas en pantalla.
Detrás de una experiencia fluida existe:
En nuestro caso, construir una solución estable sin depender de tecnologías realtime representó un reto técnico importante, pero también una demostración de cómo una arquitectura bien pensada puede resolver problemas complejos utilizando fundamentos sólidos de ingeniería de software.