El código que perdura: código limpio, arquitecturas limpias y DDD

9 · DDD estratégico: el lenguaje es el sistema9 min read

Historia — La palabra «abono»

Marta llegó el lunes con una caja de cartón llena de papeles, y con una frase que valía un máster:

—He traído mis chuletas. Quince años de chuletas.

Sobre la mesa de la sala pequeña fue desplegando su arsenal secreto: hojas de cálculo impresas y anotadas a boli, un cuaderno de anillas con pestañas de colores, y una lámina plastificada, sobada de uso, con una tabla hecha a mano. La levantó para que la vieran bien.

—Esta es la piedra Rosetta. La hice en 2019, harta de discutir. —La tabla tenía tres columnas, tituladas: LO QUE DIGO YO, LO QUE DICE VESTA, LO QUE HACE ATLAS—. Cada vez que en una reunión alguien dice una palabra de dinero, yo miro aquí para saber qué está entendiendo cada uno. ¿Empezamos por «abono», que es el que os ha traído?

Durante las dos horas siguientes, Júlia y Denís hicieron algo que ningún curso de programación les había enseñado a hacer: callarse y apuntar.

El paisaje que emergió era mucho peor — y mucho más interesante — de lo que Júlia había imaginado en la cocina. «Abono», para Marta y su equipo comercial, era un compromiso: «te compenso con 400 € por el error del mes pasado», pactado de palabra o por correo, que existía desde el momento del pacto aunque no hubiera papel. Para contabilidad de Vesta, un abono era un documento: la factura rectificativa, con numeración legal, que anula o corrige otra; sin documento no había abono, había una promesa. Y para ATLAS, un abono era una línea con importe negativo en la siguiente factura — ni compromiso ni documento: un apaño aritmético que Silvia no había diseñado, que venía «de siempre», y que obligaba a Marta a mantener aparte, en sus hojas de cálculo, el registro real de qué compromisos existían, cuáles estaban aplicados y cuáles pendientes, porque el sistema no distinguía un abono de un simple descuento puntual.

—Espera, espera. —Denís levantó la mano, con cara de estar sufriendo un pequeño derrumbe interno—. ¿Me estás diciendo que los abonos de verdad, la lista de verdad, con sus estados y sus saldos… vive en tus Excel? ¿Desde 2019?

—Desde antes. Los Excel son la versión moderna. —Marta lo dijo sin dramatismo, como quien informa del tiempo—. El sistema no tiene dónde ponerlos. Yo no puedo esperar a que lo tenga. Vesta liquida trimestres cada tres meses, cariño, con sistema o sin él.

Júlia miraba la lámina plastificada y sentía vértigo. No era un bug. Era peor que un bug: el sistema entero llevaba años modelando mal una palabra, y alrededor del agujero había crecido un ecosistema invisible de hojas de cálculo, memoria personal y dos días trimestrales de cuadre manual. El coste no salía en ningún monitor de errores. Se pagaba en horas de Marta.

—¿Y por qué nunca lo habéis pedido? —preguntó—. Que ATLAS gestione los abonos de verdad, digo.

Marta se rio, y por primera vez la risa tuvo un fondo de cansancio antiguo.

—Lo pedí. —Dobló la lámina con cuidado—. Lo pedí en 2016, a un proyecto muy grande que ibais a hacer los informáticos. Vino un chico muy majo, me hizo una entrevista de media hora, apuntó cosas en un portátil. Nunca más se supo. Luego aquello se canceló y ya no estaba el horno para bollos. —Se encogió de hombros—. Los informáticos siempre estáis muy ocupados con los informáticos, hija. Es lo que hay.

Júlia y Denís cruzaron una mirada. Un proyecto muy grande. 2016.


Encontraron a Gabriel en la sala de servidores, etiquetando cables, y Júlia le hizo la pregunta por segunda vez, tal como él le había pedido meses atrás en el bar:

—Gabriel. ¿Fénix entendía mejor el dominio?

Gabriel terminó de enrollar una brida con una calma infinita, la dejó en la bandeja, y se apoyó en el rack.

—Has llegado al capítulo ocho.

—He llegado a Marta. —Júlia le sostuvo la mirada—. Media hora, Gabriel. En dos años de proyecto, ¿cuánto tiempo pasó el equipo de Fénix hablando con Marta, o con quien fuera entonces Marta?

—Media hora te lo contesta bastante bien. —Se frotó los ojos con dos dedos—. Éramos programadores, Júlia. Los mejores de la casa, eso nos decían. Teníamos el convencimiento de que el problema de ATLAS era técnico: código viejo, tecnología vieja. Así que hicimos un proyecto técnico: framework nuevo, capas nuevas, todo nuevo. ¿El negocio? El negocio ya lo conocíamos, ¿no? Llevábamos años programándolo. —Sonrió sin nada de alegría—. No se nos ocurrió que llevábamos años programando una traducción defectuosa del negocio. Copiamos a limpio los malentendidos. Con mejor sintaxis.

»Los céntimos que no cuadraban, ¿te acuerdas? Quince mil verdades que solo existían en el código viejo. Eso te conté. Lo que no te conté es la segunda mitad: cuando íbamos a buscar esas verdades, no teníamos a quién preguntar. No habíamos construido la relación. Los comerciales nos veían como los que nunca entregan, contabilidad como los que preguntan cosas raras en mal momento. Cada regla misteriosa eran dos semanas de arqueología en código de hace una década, en lugar de una conversación de veinte minutos con la persona que la pidió. —Señaló vagamente hacia arriba, hacia la oficina—. El conocimiento estaba ahí, ¿sabes? Paseando por los pasillos, tomando café. En la cabeza de Marta y de los de antes de Marta. Nosotros en el sótano, descifrando jeroglíficos, y arriba vivían los egipcios.

Júlia pensó en la lámina plastificada. LO QUE DIGO YO. LO QUE DICE VESTA. LO QUE HACE ATLAS.

—Silvia lo vio —dijo.

—Silvia lo vio tarde. Esa es la tragedia exacta de Silvia Roca, y me consta que preferiría que la aprendieras a que la admiraras. —Gabriel se despegó del rack y fue hasta la ventana pequeña que daba al patio de luces—. Los últimos meses de Fénix, cuando ya olía a quemado, empezó a hacer algo que entonces me pareció una excentricidad: bajaba a comercial con un cuaderno y pedía que le explicaran palabras. Palabras sueltas. «¿Qué es un abono para ti? ¿Y un rappel? ¿Y "liquidar"?» Volvía con listas. Una vez la vi tachar un diagrama entero, semanas de trabajo, porque descubrió que «cliente» significaba tres cosas distintas según el departamento, y nuestro modelo tenía una sola clase Cliente para las tres. —Se volvió—. ¿Sabes lo que me dijo? «Gabriel, llevamos veinte meses construyendo el sistema equivocado con una precisión exquisita.» Pidió tres meses para rehacer el modelo alrededor de lo que estaba aprendiendo. Dirección oyó «tres meses más» y firmó la cancelación. El resto ya lo sabes.

El silencio se llenó con el zumbido de los ventiladores de los servidores. Denís, que no había abierto la boca en todo el rato — un acontecimiento geológico —, la abrió:

—El capítulo ocho. ¿Lo escribió después de eso?

—El capítulo ocho es el único que reescribió. —Gabriel volvió a sus cables—. La versión primera era técnica, me la enseñó: contextos, mapas, no sé qué. La borró entera. Leed la que dejó.


La leyeron esa noche, juntos, en la sala del piloto, con la pizarra llena de la piedra Rosetta de Marta pasada a limpio.

He tardado veinte años en aprender lo que voy a escribir aquí, y me ha costado un proyecto, así que léelo despacio: El software no se construye con código. Se construye con lenguaje. El código es solo el lenguaje que hemos endurecido. Cada palabra del negocio que tu sistema modela mal es una deuda que no sale en ningún análisis: la pagan personas que no conoces, con horas que no ves, en hojas de cálculo que no sabes que existen. Y cada palabra que el negocio usa con dos sentidos sin que nadie lo note es una guerra fría entre departamentos esperando su incidente. Si vuelvo a construir un sistema — no volveré, pero si tú estás leyendo esto, quizá tú sí —, empezaré al revés. No por el código: por el diccionario. Sentaré en una mesa a los que venden, a los que cuentan y a los que programan, y no nos levantaremos hasta tener las palabras: qué significa cada una, exactamente, con ejemplos, con números de verdad. Y donde una palabra signifique dos cosas — siempre hay palabras que significan dos cosas —, no elegiré un bando: dibujaré una frontera. Aquí, en el país de los comerciales, «abono» es un compromiso, y el sistema de este lado lo modelará como compromiso. Allí, en el país de contabilidad, «abono» es un documento con número, y el sistema de aquel lado lo modelará como documento. Y en la frontera, una aduana que traduzca, escrita y vigilada, para que la traducción — que antes hacía una mujer con una lámina plastificada, sin que nadie se lo agradeciera — la haga el código, a la vista de todos. El nombre técnico de todo esto no importa mucho, pero existe, y el libro que lo explica es el que está en mi mesa la noche que escribo. Lo que importa es la ley que hay debajo, la única que no he visto fallar nunca: el sistema acaba pareciéndose a las conversaciones que lo construyeron. Si los programadores no hablan con el negocio, el sistema modelará ese silencio. Fénix modeló nuestro silencio durante veinte meses. Que el tuyo modele otra cosa.

Debajo, la última línea del capítulo, sola, como una firma:

A quien heredó mis errores: la deuda técnica se paga refactorizando. La deuda de conversaciones, conversando. Empieza por la segunda: es la única que el código no puede pagar por ti.

Júlia miró la pizarra: la tabla de Marta, las tres columnas, y a la derecha, en un rincón, el primer boceto que habían dibujado esa tarde sin saber que estaban dibujando una frontera — dos cajas, «FACTURACIÓN» y «ACUERDOS COMERCIALES», con una flecha en medio etiquetada «¿traducción?».

—Mañana reservo la sala grande —dijo—. Toda la mañana. Marta, alguien de contabilidad de Vesta si Ferrán nos lo presta, Óscar, nosotros. Y una pizarra limpia.

—¿Y qué hacemos con la palabra? —preguntó Denís—. «Abono». ¿Cuál de los tres gana?

Júlia recogió sus cosas, y se dio cuenta de que sonreía.

—Ninguno. Y los tres. Esa es la gracia. Cada uno gana en su país. Mañana lo que hacemos es dibujar el mapa.