viernes, 18 de julio de 2014

Coding Kata - Procesamiento de Ordenes de Compra

Definición inicial de la necesidad de negocio

Imagina que estas escribiendo una aplicación para procesar ordenes de una gran compañía. En el pasado esta compañia usaba una mezcla aleatoria de reglas manuales y automatizadas (Ad hoc) para manejar las ordenes. Ellos ahora quieren hacer de una sola forma el manejo de la ordenes: Tu aplicación. Sin embargo ellos y sus clientes están muy apegados a la diversidad de sus reglas de negocio por lo que quieren que se incluyan todas esas reglas en el nuevo sistema. 

Cuando conoces a las personas que hoy manejan las ordenes descubres que sus practicas de negocio se acercan al caos: No hay dos lineas de producto que tengan las mismas reglas. Peor aún. Muchas de sus reglas no están escritas: Muchas veces te dirán cosas como esta: "Oh, carol en el segundo piso se manejan este tipo de ordenes".

Durante el primer de reuniones decidiste enfocarte en los pagos y particularmente en el procesamiento requerido cuando un pago ha sido recibido por la compañía. Llegas a casa exhausto con una carpeta llena de pedazos de reglas como: 

- Si el pago es para un producto físico, generar una orden de entrega para la compra.
- Si el pago es por un libro, crear un duplicado de la orden de entrega para el departamento  de libros.
- Si el pago es para una membresía. Activarla
- Si el pago es para actualizar una membresía. Aplicar la actualización
- Si el pago es para una membresía o actualización, enviar un mail al dueño e informando de la activación o actualización.
- Si el pago es por el video "Aprendiendo a eskiar", agregar un video primeros auxilios gratis al paquete de entrega (Resultado de una decisión legal en 1997).
- Si el pago es por un producto físico o libro, generar un pago de comisión al agente.

Y cada día para tu horror obtienes mas y mas paginas de estas reglas cambiantes.

Ahora te enfrentas a implementar este sistema. Las reglas son complicadas y arbitrarias. Aún mas, tu sabes que van a seguir cambiando: Una vez el sistema este funcionando aparecerán todo tipo de casos especiales.

OBJETIVO: Como puedes domesticar estas reglas de negocio salvajes?. Como puedes construir un sistema lo suficientemente flexible para manejar tanto la complejidad como la necesidad de cambio?. Como puedes hacerlo sin condenarte a años y años de soporte?

Traducido de codekata.com