Este es un proyecto cancelado que no recibe actualizaciones. No obstante, puedes acceder a su archivo como referencia.

Versión Cero

Overdelivery

Sergio Montoro

El exceso de funcionalidades es un error común en el que se cae en el desarrollo de software. Pero menos es más, y es mejor un programa que hace dos o tres cosas muy bien y nada más.

por Sergio Montoro Ten, 30 enero 06

Hace unos días hablaba con un responsable técnico de la empresa Tecsidel quien me decía “aquí odiamos los proyectos pajareros”. Quería decir esa clase de proyectos donde hay toneladas de requisitos sin orden ni concierto claros.

Los buenos programas hacen a los sumo dos o tres cosas muy bien y NADA MÃ?S. WinZip: Comprimir arcivos y punto. WinAmp: reproducir cualquier archivo de audio. Skype: hablar por Internet.

Hay una conocida regla en los proyectos que dice que “todas las aplicaciones crecen en funcionalidad hasta que enventualmente son capaces de enviar y recibir e-mails”.

En muchos casos este hipercrecimiento en funcionalidades es un gran error. Por cuatro motivos :

1º) El número de bugs de un programa es directamente proporcional al número de funcionalidades.
Por consiguiente, para que el programa tenga menos errores ¡Basta con quitarle cosas! Si uno lee los informes de errores de Apache de los últimos años, es fácil darse cuenta de que gran parte de los errores están localizados en oscuros módulos periféricos.
Otro ejemplo muy claro de la relación directa entre bugs y funcionalidad es el agujero de seguridad de los archivo Windows Meta File La historia de Windows sería probablemente la misma si el format WMF no existiera. Se trata de una funcionalidad que ha pasado sin pena ni gloria y que hubiese sido mejor para Microsoft que nunca hubiese existido.

2º) El coste total de desarrollo de una funcionalidad se extiende a toda la vida del producto.
Para ilustrar este hecho es muy interesante leer el artículo de Eric Lippert How many Microsoft employees does it take to change a lightbulb? en el que explica cuanta gente hace falta en Microsoft para añadir una hipotética función ChangeLightBulbWindowHandleEx al runtime de VBScript.

•Cinco minutos de un desarrollador para implementar ChangeLightBulbWindowHandleEx
•Un analista/programador para escribir la especificación
•Un experto en localización para escribir la especificación
de internacionalización
•Un experto en usabilidad para revisar la especificación de accesibilidad y usabilidad
•Un desarrollador, un técnico de testeo y un analista de seguridad para evaluar las posibles vulnerabilidades
•Un gerente de proyecto para escribir la especificación del modelo de seguridad
•Un especialista para escribir el plan de pruebas
•Un jefe de etsteo para organizar el plan de pruebas
•Un especialista para jecutar los casos de pruebas
•Tres o cuatro beta testers para hacer pruebas ad hoc
•Un documentalista técnico para escribir la documentación
•Un revisor estilístico para validar la documentación
•Un editor para formatear la documentación
•Un jefe de documentación para integrar la nueva documentación con la ya existente
•Veinticinco traductores para traducir la documentación a todos los idiomas
•Un gerente senior para coordinar a todas las personas anteriores, así como para justificar su coste ante el vicepresidente.

Y todo esto es sólo para implementar la funcionalidad. Cuando el producto crece mantener la funcionalidad es a veces más caro que escribirla. Sobre todo si se trabaja con un producto multiplataforma. Cada vez que se introduce una funcionalidad es preciso tener en cuenta que se está añadiendo un coste fijo adicional perpétuo al mantenimiento del programa.

3º) Los clientes no siempre pueden absorber el ritmo de innovación del desarrollador.
En la carrera por diferenciarse de sus competidores, los proveedores añaden frenéticamente funcionalidades a sus productos. Esto es porque si no las añaden, empiezan a recibir críticas de la competencia argumentando que su producto no hace suficientes cosas. Tomemos el ejemplo de Internet Explorer. Ahora existe cierta presión sobre Microsoft porque Firefox 1.5 incorpora tabbed browsing e Internet Explorer 6.0 no. ¿Qué debería hacer Microsoft? ¿Sacar a toda prisa una versión 6.1 que incorporase esta característica? Este fenómeno de exceso en el ritmo de producción de nuevas funcionalidades ocurre en casi todos los fabricantes. Oracle, por ejemplo, es uno de esos productos donde los clientes usan habitualmente el 20% de las funcionalidades y el restante 80% a duras penas saben si existe. Hubo un tiempo en que Oracle presumía de habar incorporado nuevas características de orientación a objetos en la base de datos, un sistema de colas de peticiones, o más recientemente Java ejecutable dentro de la base de datos como si fuese PL/SQL, pero ¿cuanta gente utiliza realmente esto? ¿son de veras ventajas competitivas para Oracle todas estas características?

4º) Las funcionalidades extra ralentizan el programa y añaden complejidad.
A mi me encantan los programas que caben en un diskette de 1,44Mb, si, ya sé, ningún programa actual cabe en 1,44Mb y de todas formas ya nadie usa diskettes de 3,5”. Por eso sigo fiel a tantos programas antiguos. Cada vez que un programa crece y lo complican, lo fastidian.

Comentarios
1 Lucas Rodríguez Cervera
30 enero 2006, 11:58

Totalmente de acuerdo. Hay incluso una compañía muy exitosa (37signals.com) tiene este principio como paradigma de gestión.

We’re a privately-held Chicago-based company committed to building the best web-based software products possible with the least number of features necessary. Our products do less than the competition — intentionally


2 Carlos M Pérez
30 enero 2006, 12:13

Completamente de acuerdo, al menos en lo que a software comercial (“shrinkwrap”, como diria Spolsky). Ahí tenemos el ejemplo de AcdSee: de ser un programa que hacía increíblemente bien cuatro cosas, pasó a intentar competir con Photoshop… sin serlo, claro. Otra cosa es el software a medida, en el que los clientes siempre quieren más.


3 Francesc
1 febrero 2006, 21:01

Otra cosa a tener en cuenta es que la aplicación se integre lo máximo posible con el resto (al más puro estilo Unix).


4 nacho
6 febrero 2006, 15:34

Estoy de acuerdo contigo y te comento sobre el primer punto:

Cada programa sirve para lo que sirve... quieres muchas funcionalidades, ten muchos programas…

Para muestra un boton.

Microsoft en su office tenía un programa que se llamaba photoed.exe (photo editor) era un programa sencillo que a mi particularmente me servia para hacer tan solo dos cosas:

A) pulsar el boton de imprimir pantalla y pegar dicha imagen en el programa, o cualquier imagen obtenida en la web y al imprimir seleccionar la opcion de 100%

B) sobre una imagen pegada, seleccionar un color determinado y hacer que este fuera trasparente, y despues guardar dicha imagen como gif.

Ahora en su version de Office XP 2003 trae el microsoft office picture manager, que hace muchas cosas que no quiero utilizar y ha eliminado las dos cosas para las que utilizaba el programa…

Hay programas como eclipse y mozilla firefox, que hacen lo que hacen y para añadir funcionalidades extras, puedes agregarles plugins que son extremadamente buenos cuando se dedican a una sola cosa.

Por ejemplo colorzilla, es un plugin de firefox que sirve para saber que color tiene un pixel, si

mueves el puntero te dice el color que señala el puntero…

Respecto al cuarto punto: suelo utilizar un programa parecido al notepad, llamado editplus

y lo que mas me gusta es que entra en un disquete…


Acerca - Contacto - Información legal y técnica - Condiciones de uso - Noticias sobre el mundo del Desarrollo de Software.