Cada vez, era una sorpresa. Cada vez, costaba tiempo. Y cada vez, lo parcheábamos y seguíamos adelante porque aún no entendíamos lo que realmente estábamos viendo.
Estábamos viendo la Deriva, mismo dominio, diferentes formas. Los costos no aparecen en tus registros de errores. Aparecen en tu calendario. Un desajuste en tiempo de ejecución que tomó tres días rastrear porque no fue un fallo.
Simplemente eran datos incorrectos renderizados silenciosamente en la pantalla. Interfaces TypeScript duplicadas a través de proyectos, divergiendo lentamente de maneras que nadie rastreaba. Cada característica multiplataforma requiriendo una reunión de coordinación antes de que alguien escribiera una línea de código.
Un nuevo ingeniero pasando sus primeras dos semanas solo tratando de entender por qué el mismo concepto tenía un nombre diferente en cada lugar que miraban. Nada de esto se sentía catastrófico. Simplemente se sentía lento. La velocidad se ralentizó no por la complejidad, sino por la desalineación.
El ejemplo más claro de esa desalineación es toda nuestra aplicación móvil. La API no solo devolvía datos. Devolvía decisiones de UI. Y nada de esto fue malicioso. Evolucionó de esa manera porque no había un acuerdo compartido sobre cuál era realmente el trabajo de una API.
En ausencia de un contrato, la API se convierte en lo que el cliente pide en el momento. Y luego se queda así para siempre. Cada pantalla era un array de descriptores de componentes que el backend devolvía. Tipo header con ranuras izquierda, medio, derecha. Tipo linear player. Tipo navigation card list.
El backend necesitaba qué renderizar, decidía qué renderizar, en qué orden, en qué disposición. El frontend era un motor de renderizado, nada más. Una vez que tienes un patrón así en toda una aplicación, las consecuencias son predecibles. Acoplamiento estrecho. Frontend y backend bloqueados en una dependencia estructural, ningún equipo puede cambiar de manera independiente.
Comments