Reaper: cuando eliminar código es tan importante como escribirlo
5 min de lectura

Reaper: cuando eliminar código es tan importante como escribirlo

893 palabras

En mi experiencia con desarrollo móvil, he visto cómo las apps se vuelven cada vez más complejas y los proyectos crecen sin control. Recuerdo perfectamente esa sensación de tener miles de líneas de código y no estar seguro de qué se estaba usando realmente y qué no.

Por eso me ha llamado tanto la atención esta herramienta que ha liberado Sentry (que antes era de Emerge Tools): Reaper. Un SDK de código abierto que hace algo que suena simple pero es tremendamente útil: encontrar código muerto en tus aplicaciones móviles.

¿Qué es exactamente código muerto?

Código muerto es ese código que está ahí, ocupa espacio, pero nunca se ejecuta. Es como tener una habitación en casa llena de cosas que “algún día voy a usar” pero que llevan años acumulando polvo. En el mundo del desarrollo móvil esto es especialmente problemático porque:

  • Aumenta el tamaño de la app: Cada KB cuenta, especialmente en mercados donde las conexiones lentas son comunes
  • Complica el mantenimiento: Más código que revisar, más superficie de ataque para bugs
  • Ralentiza los builds: Más código que compilar y procesar
  • Confunde a los desarrolladores: Es fácil perderse en código que parece importante pero no se usa

Cómo funciona Reaper

Lo interesante de Reaper es que no usa análisis estático (como Periphery u otras herramientas), sino análisis en tiempo real. Es decir, monitoriza cómo los usuarios realmente usan tu app para identificar qué código nunca se toca.

El proceso es elegante en su simplicidad:

  1. Primer paso: Un script analiza tu binario y genera un set de todos los tipos que Reaper puede trackear
  2. Segundo paso: Recopilas datos de usuarios reales usando la app en producción
  3. Resultado: La diferencia entre ambos sets te dice qué código nunca se ha usado

En iOS

En iOS, Reaper se aprovecha de metadatos que ya existen en el runtime de Objective-C y Swift. Usa el bit RW_INITIALIZED que se activa la primera vez que se accede a una clase. Es brillante porque no añade overhead al runtime de tu app.

Puedes encontrar más detalles técnicos en el repositorio de Reaper para iOS.

En Android

En Android el approach es diferente porque no tienen acceso a esos metadatos del runtime. Así que instrumentan las clases en tiempo de build, añadiendo llamadas a logMethodEntry en los métodos <clinit> y <init> de cada clase.

El código completo está disponible en el repositorio de Reaper para Android.

Por qué me parece fascinante

Llevo años diciendo que “por cada minuto que dediques a planteamiento y estudio, necesitarás 2 minutos menos de desarrollo”. Reaper encaja perfectamente en esta filosofía, pero aplicada al mantenimiento del código.

En mis tiempos desarrollando para móviles, esta herramienta me habría ahorrado dolores de cabeza. Recuerdo proyectos donde teníamos features que creíamos que se usaban, pero que en realidad los usuarios nunca tocaban. O clases que quedaron huérfanas después de refactorings.

La ironía del desarrollo moderno

El artículo original de Sentry menciona algo que me ha hecho reflexionar: las herramientas de IA están acelerando la velocidad de desarrollo, pero también están aumentando la duplicación de código y afectando la estabilidad. Estudios como el Impact of Generative AI in Software Development de Google DORA muestran mejoras en productividad, pero también impactos negativos en la estabilidad.

Es como si estuviéramos escribiendo código más rápido, pero mantener la calidad se está volviendo más difícil.

Por eso herramientas como Reaper me parecen tan importantes. No se trata solo de eliminar código muerto, sino de entender realmente cómo se usa tu aplicación en el mundo real.

Mis reflexiones personales

Después de casi 30 años desarrollando, he aprendido que:

  • Los usuarios siempre harán cosas que no te imaginas: Pero también dejarán de hacer cosas que creías esenciales
  • “Posible” es “económicamente viable”: Y mantener código que no se usa no es viable
  • Los errores siempre ocurren: Incluido el error de asumir que todo tu código es necesario

Reaper me recuerda a una de mis premisas favoritas: probar, probar, probar. Pero llevado al siguiente nivel: no solo probar que tu código funciona, sino probar que tu código se usa.

¿Vale la pena implementarlo?

Si estás desarrollando para móviles, especialmente en equipos grandes o apps con mucho historial, yo diría que sí. Es código abierto, tanto para iOS como para Android, y puedes usarlo con tu propio backend.

Incluso han creado un servidor de ejemplo para que puedas empezar rápidamente con tu propia implementación.

Empresas como Duolingo ya lo han usado para eliminar el 1% de su codebase de iOS. Puede parecer poco, pero en aplicaciones grandes, ese 1% puede ser la diferencia entre una app ágil y una que se tambalea bajo su propio peso.

Conclusión

Aunque yo esté ahora más centrado en el backend y sistemas, herramientas como Reaper me siguen pareciendo fascinantes. Nos recuerdan que escribir código es solo la mitad del trabajo; mantenerlo, entenderlo y limpiarlo es igual de importante.

Como dice el clásico dicho del desarrollo: “El mejor código es el que no existe”. Y Reaper te ayuda a encontrar exactamente qué código no debería existir.

¿Has usado herramientas similares? ¿Te planteas implementar algo así en tus proyectos móviles? Me encantaría escuchar tu experiencia.


Si te ha gustado este artículo, puedes seguir mis reflexiones sobre desarrollo y tecnología en mi blog. Y si trabajas con desarrollo móvil, definitivamente échale un vistazo a Reaper - es una herramienta que habría deseado tener hace años.

Comentarios

Artículos relacionados

05
Jul 2025
4 min

821 palabras

He visto cómo ciertos estándares y herramientas se convierten en imprescindibles cuando trabajas con datos. Y si hay algo que hemos aprendido en estos años es que JSON está en todas partes: APIs, logs, configuraciones, bases de datos NoSQL… La pregunta ya no es si trabajarás con JSON, sino cuándo te enfrentarás a esa estructura anidada de 15 niveles que te hace suspirar.

El problema que todos hemos vivido

¿Cuántas veces has tenido que escribir algo como esto?

5 min

955 palabras

A lo largo de mi carrera he visto cambiar muchas cosas. He pasado de Borland a Visual Studio, de vi a Sublime Text, de Sublime a VS Code… Y créeme, cada cambio fue una decisión meditada que me costó semanas de adaptación. Pero lo que está pasando ahora con las herramientas de IA es algo completamente diferente.

Me he encontrado usando Copilot por la mañana, probando Cursor por la tarde, y echando un vistazo a Claude Code antes de irme a dormir. Y no soy el único. Los desarrolladores hemos pasado de ser fieles como perros a nuestras herramientas a ser… bueno, promiscuos.