Mis abstracciones ocultaron las cosas que necesitaba ver

Me encanta una abstracción limpia. Hay un placer estético genuino en tomar algo desordenado y complicado y envolverlo en una interfaz pulcra que oculta el desorden, de modo que puedas pensar en un nivel más alto y olvidarte de los detalles que hay debajo. Así que recurría a las abstracciones constantemente: pronto, con avidez y demasiado a menudo. Y en un número sorprendente de esas veces, la abstracción a la que recurrí no gestionaba la complejidad en absoluto. Ocultaba exactamente las cosas que más necesitaba ver, y me cobraba una nueva capa de confusión por el privilegio.

Esta fue una lección dura precisamente porque la abstracción es genuinamente buena y genuinamente poderosa. El error no fue usarla. El error fue usarla mal, y confundir mi amor por la superficie limpia con buen criterio de ingeniería.

Para qué se supone que sirve una buena abstracción

Vale la pena tener claro para qué sirve la abstracción, porque todo el fracaso es una distorsión de algo real. Una buena abstracción oculta el detalle en el que no necesitas pensar ahora mismo, para que puedas razonar a un nivel más alto sin tener que sostener todo el desorden en la cabeza a la vez. Es una de las herramientas más poderosas de toda la ingeniería: posiblemente la herramienta, lo que te permite construir sistemas demasiado complejos para comprenderlos de golpe.

Cuando una abstracción funciona, es casi invisible. La usas sin pensar en lo que hay debajo, igual que conduces un coche sin pensar en la combustión. Libera tu atención limitada para el nivel que de verdad te importa. Ese es el sueño, y es un buen sueño, y es real. También es exactamente lo que hace que el modo de fallo sea tan seductor: cada abstracción promete esto, y solo algunas cumplen.

Lo que hace en cambio la abstracción equivocada

Una mala abstracción hace lo contrario que la buena, y lo hace pareciendo casi idéntica vista desde fuera. En lugar de ocultar el detalle que no necesitas, oculta el detalle que sí necesitas. Traza su frontera en el lugar equivocado, de modo que las cosas mismas sobre las que necesitas razonar acaban al otro lado de un muro que tú mismo construiste, de repente fuera de tu alcance.

Y comete un segundo pecado sobre el primero. En realidad no elimina la complejidad subyacente: esa complejidad sigue ahí, intacta, haciendo su trabajo bajo la superficie. La abstracción simplemente añade una nueva capa encima. Así que ahora, en lugar de una cosa complicada que entender, tienes dos: la realidad desordenada de abajo y la abstracción no del todo correcta que colocaste encima, más la relación siempre confusa entre ambas. Te propusiste reducir aquello sobre lo que tenías que pensar y lograste aumentarlo.

Abstracción prematura: comprometerse antes de entender

La forma más común de mi error era abstraer demasiado pronto. Construía la estructura limpia, general y elegante antes de entender realmente el problema lo bastante bien como para saber cuál era siquiera la estructura correcta. Parecía un diseño bueno y previsor. Solía ser lo contrario.

Una abstracción es, fundamentalmente, un compromiso con una forma particular: una decisión sobre dónde van las fronteras, qué se oculta y qué se expone, cómo se relacionan las piezas. Y comprometerse con una forma antes de entender aquello que estás dando forma es una manera fiable de fijar la forma equivocada. Peor aún, una vez que está en su sitio, empiezas a construir encima, y cada cosa nueva que construyes profundiza tu inversión en una estructura que fue adivinada en lugar de aprendida. La abstracción prematura no solo corre el riesgo de ser equivocada; atrinchera activamente su propia equivocación.

Las abstracciones con fugas te obligan a depurar dos cosas

Hay un tormento especial reservado para las abstracciones que ocultan de forma imperfecta: las que funcionan casi siempre, hasta que dejan de hacerlo. Cuando algo sale mal allá abajo, en la realidad que la abstracción se suponía que debía ocultar, la fuga te obliga a entender ambas capas a la vez: la superficie limpia en la que te prometieron que podrías pensar, y el desorden de debajo que no logró ocultar del todo.

Esto es excepcionalmente agotador. Todo el propósito de la abstracción era dejarte pensar en una sola cosa. Ahora un fallo te ha arrastrado a pensar en dos, más la correspondencia entre ellas, más la cuestión de en qué capa vive realmente el error. Estás depurando la abstracción y aquello que abstrae simultáneamente, y la abstracción, que se suponía que ayudaba, es ahora un obstáculo adicional entre tú y el problema. Una abstracción con fugas puede ser peor que ninguna abstracción, porque al menos sin abstracción solo tenías una capa que te confundiera.

El coste de una capa que no necesitabas

Lo que no había contabilizado bien es que cada capa de abstracción es también una capa de indirección: una cosa más interpuesta entre tú y lo que de verdad está ocurriendo. Cuando todo funciona, esa distancia es el beneficio; es lo que te permite no pensar en el nivel inferior. Pero en el momento en que necesitas entender o depurar, esa misma distancia se convierte en puro coste. Cada capa es otro lugar donde tienes que mirar, otra traducción que tienes que realizar en tu cabeza, otra ubicación candidata para donde podría estar escondiéndose el problema.

Así que una abstracción que no se paga de verdad a sí misma no es neutra. Es un impuesto permanente, cobrado cada vez que tienes que razonar sobre el sistema, recaudado a cambio de una comodidad que resultó que no necesitabas. Yo había estado añadiendo estos impuestos con avidez, embelesado por las superficies limpias, sin darme cuenta de que estaba pagando por la mayoría de ellos y beneficiándome solo de algunos.

Gánate tus abstracciones a partir de lo concreto

La disciplina que finalmente me ayudó fue casi una inversión de mi instinto. No impongas abstracciones por adelantado, a partir de una conjetura sobre lo que acabarás necesitando. Gánatelas, a partir de la experiencia concreta y repetida. Construye primero la cosa específica, fea y particular unas cuantas veces. Siente dónde están las costuras reales: dónde caen de verdad las fronteras naturales, qué detalles se agrupan genuinamente y cuáles no. Y solo entonces, una vez que la realidad te haya mostrado sus articulaciones, abstrae siguiendo las líneas que de verdad trazó.

La buena abstracción, llegué a entender, se descubre a partir de lo concreto, no se le impone. Es una compresión de cosas que ya entiendes a fondo, no un atajo para esquivar entenderlas. Las que construí de esa manera —tarde, a regañadientes, después de que lo concreto me hubiera enseñado dónde encajaban— fueron las que de verdad se sostuvieron. Las que construí pronto, por ingenio y estética, fueron las que pasé los meses siguientes combatiendo.

La lección más profunda: la abstracción gestiona la complejidad, no reemplaza la comprensión

A lo que todo se reduce es a una confusión sobre para qué sirve la abstracción. La había estado usando como sustituto de entender el problema: como si una interfaz limpia pudiera permitirme saltarme el trabajo duro de comprender de verdad la cosa desordenada de debajo. No puede. La abstracción es una herramienta para gestionar la complejidad que ya entiendes, no para evitar el trabajo de entenderla.

No puedes abstraerte para salir de no entender algo. Solo puedes ocultar tu propia confusión bajo una superficie de aspecto más pulcro, donde esperará pacientemente para emboscarte más tarde, ahora vistiendo una interfaz limpia. Entiende primero la cosa. Abstrae después. Y cuando lo hagas, traza las fronteras siguiendo las costuras que la comprensión reveló, no las que simplemente parecían elegantes antes de que supieras dónde estaba realmente cada cosa.

— Sin señales, sin retornos, esto no es asesoramiento de inversión.