En una 2da. opinión, TDD y varias metodologías similares para generar "aplicaciones testeables" tienen cierta utilidad práctica (le sirven al developer para entender mucho mejor su código, sin dudas), sin embargo al momento en que una aplicación compleja corre, ejecuta en un ambiente de producción, las variables de contexto que no son código se suman al código "en movimiento", que interactúa con input real y datos pre-almacenados - en gran volumen en gral. - y las cosas cambian rápidamente.
Una tendencia sobre la que estuve leyendo implica que algunos sitios "grandes" - Etsy? - están experimentando con "quitar testing" y "quitar QA" en tiempo de desarrollo y en cambio trabajan la solución de problemas al estilo "hacker-Facebook", poniendo el código en producción limitada, solamente para algunos usuarios.
Ese código nuevo se monitorea detalladamente para detectar errores (claro, hay que incluir niveles de generación de información de debugging en el código: en webapps hablamos de más logs casi siempre), a la vez se monitorea el contexto: comentarios volcados por los usuarios luego de tener contacto con el código nuevo, buscando quejas en los sistemas de soporte (tickets), verificando que un cliente - usuario con password - que se conecta a un webserver siempre obtiene códigos de peticiones correctas (2xx) y si obtiene códigos de error (4xx), el ciclo completo del uso de la aplicación desde el login hasta el código de error se analiza y desglosa, integrándolo con qué es lo que hace el código del lado del servidor, se cruza esos datos con el comportamiento del SQL corrido por la aplicación, etc. etc.
Por ejemplo, de allí se puede extrapolar timeouts ocultos entre componentes que pueden estar causando que código que funciona correctamente en testings, falle en ambientes de producción. Algo que puede ocurrir cuando los sistemas - front, back, etc. - están distribuídos en colo (servers propios hosteados en algún datacenter), infra propia, y servers en alguna infra cloud.
Es fácil ver que estas técnicas van a terminar "llegando" al ámbito privado local en Argentina: porque muchas empresas y organizaciones, aunque no usen infraestructura externa alguna (ni cloud, ni hosteen hardware), sí suelen tener varios datacenters o racks de servidores geográficamente distribuídos, y cada vez es más común que los sistemas organizacionales estén distribuídos entre ellos.
Desde el punto de vista de administración de sistemas, devops, la implementación limitada a producción y el monitoreo de aplicaciones no son "tan" complejos de implementar (por ejemplo, "si alguien se conecta desde X rango de IPs, direccionarlo exclusivamente a X servidor web (vs. direccionarlo a la "granja local"/CDN) > donde está el código nuevo), sí lleva tiempo integrar el código customizado de análisis de logs, y extrapolación de datos de las métricas obtenidas (es decir, qué es lo que le vamos a pedir a Graphite que grafique).
Leí bastante sobre este tema en Code as Craft, el blog de Etsy, pero no es una metodología "formal", sino más bien una filosofía técnica de cómo encarar el trabajo.
4 Retailers Supercharging Development with DevOps
Code as Craft
Sldos.
Dardo