- La afirmación es que la mayoría de los desafíos clave del desarrollo de software surgen no dentro del código, sino en los límites (Boundary) donde se encuentran código con código y sistema con sistema
- Límite = punto donde se encuentran distintos intereses, responsabilidades y contextos
- Casi todas las acciones del desarrollo, como separar funciones, modularizar o usar microservicios, son actos de crear límites
- La ironía: creamos límites para manejar la complejidad, pero el límite en sí se convierte en una nueva fuente de complejidad
Límites que surgen en el código
- Límite llamador-invocado: ambigüedad del contrato, como devolver
null vs lanzar una excepción
- Límite de interfaz: ley de la filtración de abstracciones; la complejidad oculta tarde o temprano atraviesa el límite
- Límite de dependencias: las API y bibliotecas externas pueden cambiar sin previo aviso
- Límite de transformación: como en la incompatibilidad de impedancia objeto-relacional, cada cruce de límite distorsiona o pierde información
- Límite de confianza: frontera entre datos validados y no validados → vulnerabilidades de seguridad como recibir webhooks sin firma
- Límite entre diseño e implementación: de requerimientos → diseño → implementación → operación, la pérdida de información se acumula en cada etapa
Límites físicos
- Límite de orden: el estado puede cambiar entre puntos asíncronos; en sistemas distribuidos es aún más grave
- Límite de escala: al superar un punto crítico, no ocurre un cambio cuantitativo sino cualitativo
- Límite de entorno: ocurren situaciones como “en mi máquina sí funciona”
- Límite de infraestructura: al separar servicios, no se puede garantizar la atomicidad
Límites que surgen entre personas
- Límite organizacional: ley de Conway; la estructura organizacional determina la estructura del sistema. Cuando se reorganizan equipos, los límites del código y de la organización se desalinean
- Límite de comunicación: como en el juego del teléfono descompuesto, la intención se deforma cada vez que se transmite un requerimiento, y el conocimiento tácito ni siquiera se transmite
- Límite usuario-desarrollador: los límites que el desarrollador crea por seguridad se vuelven barreras molestas para el usuario
Cómo gobernar los límites
- Reconoce los límites ocultos: presta atención a acoplamientos que no se ven en el código, como cuando dos servicios comparten la misma tabla de base de datos
- Los patrones no son la respuesta: un patrón es solo una “solución efectiva bajo ciertas condiciones”; no debe aplicarse a ciegas
- Tres preguntas para hacer frente a un límite:
- ¿Qué cruza este límite?
- ¿Qué pasa si este límite se rompe?
- ¿Quién administra este límite?
- No trazar un límite también es una opción: mantener un monolito, evitar separaciones apresuradas, etc.
- Los límites evolucionan: se separan y luego se vuelven a unir, o se unen y luego se vuelven a dividir → hace falta una revisión consciente y periódica
Aún no hay comentarios.