La palabra
YAGNI es un acrónimo de la expresión anglosajona
You Ain't Gonna Need It, que en Ingeniería del Software viene a decir a los desarrolladores que no implementen aquellas funcionalidades que realmente no son necesarias.
No sé en otras ingenierías o en otras profesiones si tienen este frecuente problema de los desarrolladores de software: Nos gusta tanto nuestro trabajo (hay gente que prefiere traducir por "somos tan frikis") que cuando tenemos que implementar una aplicación para solucionar un determinado problema, acabamos por añadirle un lote de funcionalidades extra que nos parecen maravillosas, pero que no eran necesarias y que generalmente acaban por sobredimensionar las tareas de desarrollo.
Pongamos un ejemplo: Digamos que tenemos que desarrollar una aplicación para gestionar los números de teléfono en nuestro teléfono móvil, es decir, que podamos asociar a un nombre, por ejemplo María, un número de teléfono, por ejemplo el 555-123123. Podemos llamar a nuestra aplicación "Libreta de Contactos"... para ser original ;)
Habitualmente, el equipo de desarrollo que se dedique a implementar esta aplicación no descansará con implementar únicamente la sencilla funcionalidad pedida. Seguro que Juan propone que para buscar los contactos podemos incluir una funcionalidad de compleción de texto, esto es, cuando escribamos "Ma", el móvil nos completa la palabra "María". Uhmmmm... interesante.
Para Pedro, que pincha tecla a una velocidad increíble, y que no quiere soltar su teclado, le parecería muy bueno incluir una funcionalidad tal que si él dice "María", el móvil automáticamente inicia la acción de llamar a María. Si, si, muy interesante.
Ya que Pedro ha dicho esto, Elena piensa que a lo mejor lo que queremos es mandarle un mensaje a María, con lo que es posible que si Pedro dice "Mensaje a María", pueda redactar el mensaje a viva voz.
No sé si os habréis contagiado de la imaginación creativa de nuestros amigos... no os preocupéis, es fácil contagiarse. Yo ya casi tengo una lista infinita de funcionalidades en mi cabeza que no voy a seguir escribiendo. Pero lo importante es recordar que lo que nos habían pedido era una agenda telefónica.
Aunque es posible que parezca que incluir todas estas funcionalidades a la aplicación generará una potencia incalculable, también acarrea una serie de problemas que es posible que no compensen por diferentes razones. La más importante es que
NO necesitábamos esas funcionalidades extra y
SI necesitábamos la agenda de teléfonos. Por otra parte, incluir esta funcionalidad acarrea incremento de costos de desarrollo, ampliación de los plazos de entrega, aumento de la complejidad de uso, etcétera. Es necesario tener claro cual es la necesidad real y proponer las funcionalidades extras para futuras iteraciones en el desarrollo del producto.
El
principio de KISS (
Keep It Sweet and Simple) nos dice que hagamos las cosas cortas y sencillas. Simples.
En una planificación para el desarrollo de una determinada aplicación,
desarrollamos las funcionalidades pedidas, de forma que los costos para nuestros clientes sean los mínimos y que la aplicación responda a sus necesidades de forma completa.
De cualquier forma, nunca dejaremos de dar rienda suelta a nuestra imaginación para
proponer a nuestros clientes funcionalidades extras que podrían suponerle ciertas comodidades o mejoras en sus procesos, siempre asesorándoles en la forma en la que debemos incluir el desarrollo de estas funcionalidades en la planificación. Nunca hay que matar a la imaginación porque de ella se nutre la ingeniería, y de ella se nutren nuestros productos y nuestro quehacer diario.