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:
- Primer paso: Un script analiza tu binario y genera un set de todos los tipos que Reaper puede trackear
- Segundo paso: Recopilas datos de usuarios reales usando la app en producción
- 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