Una forma se repite en mis proyectos: algo existe, es útil y no te va a decir cómo funciona. Escribí un keygen para Balsamiq Mockups como ejercicio de investigación —un estudio en C# de cómo se derivaban sus claves de licencia, sin distribuir nada—. Construí un scraper que extrae estadísticas de países de las fichas de Wikipedia, que codifican el mismo dato de quince maneras distintas. Construí un trabajo serverless que respalda mis listas de SoundCloud, lo que implicó sacar a la fuerza un client ID de una página porque no había una vía documentada de entrada. Tres proyectos sin relación, una sola actividad por debajo: observar qué hace el sistema, formular una teoría, probarla, anotar lo aprendido.
Hablamos de la ingeniería inversa como si fuera cosa de investigadores de seguridad y de gente que rompe DRM. Pero si te integras con cualquier cosa que no construiste tú, estás haciendo una versión de eso todo el tiempo. La documentación está desactualizada. Los mensajes de error mienten. El campo marcado como obligatorio es opcional y el opcional es el que sostiene el peso. Toda integración es en parte arqueología, y las que salen mal suelen ser aquellas en las que alguien dio por hecho que no lo sería.
El método no tiene nada de sofisticado. Cambias una entrada y observas qué se mueve. Mantienes abierta la pestaña de red y lees todas las peticiones que hace la página, no solo la que esperabas. Guardas una respuesta antes y después de una acción y las comparas. Cuando un endpoint te rechaza, lees el rechazo como un dato: acaba de darte una regla que no conocías. Casi todo el esfuerzo es acotar: este campo importa, ese otro es decorativo, el orden de estas dos llamadas es lo que sostiene todo y nadie lo escribió.
La parte que la gente se salta es anotarlo sobre la marcha. Una teoría que llevas en la cabeza se degrada entre una sesión y otra; una teoría en un archivo de texto, junto a la petición que la demostró, sobrevive. La mitad de mis scrapers son en realidad ese archivo con código alrededor: una lista creciente de «si tiene esta pinta, significa esto», acumulada de sorpresa en sorpresa. Cuando el sistema de origen cambia seis meses después, ese archivo es la diferencia entre una tarde y una reescritura.
También aprendes dónde parar. No necesitas un modelo completo del sistema, solo el suficiente para terminar la tarea que tienes delante y para notar cuándo se rompe una suposición. Perseguir la comprensión total de algo que vas a tocar una sola vez es su propia forma de desperdicio.
Parte del trabajo en el que esto más importó es trabajo que no puedo detallar aquí: hecho para otras personas, bajo condiciones que mantienen los detalles en privado. La técnica era la misma que todo lo anterior; solo falta el relato.
Vale la pena apoyarse en ello porque es la vía de entrada del que viene de fuera. No necesitas permiso, una alianza ni un contrato de soporte: necesitas paciencia y tolerancia a equivocarte unas cuantas veces antes de acertar. Una vez que te sientes cómodo con ello, toda una categoría de «no podemos, no tienen API» se convierte discretamente en «dame una tarde».
Hay una línea, y rara vez es difusa en la práctica: estudiar cómo funciona algo —una copia con licencia en tu propia máquina, una respuesta en tu propio navegador— no es lo mismo que colarte en un sistema que no tienes permiso para tocar, ni que repartir por ahí lo que construiste con lo aprendido. Yo me quedo del lado de acá. Todo lo anterior trata de hacer legible lo permitido, no de hacer alcanzable lo prohibido.
Los cimientos están puestos; ahora toca construir.