El aumento de funciones es la expansión o adición excesiva y continua de nuevas funciones en un producto, [1] especialmente en software de computadoras , videojuegos (donde no debe confundirse con el aumento de potencia ) y productos electrónicos de consumo y comerciales . Estas funciones adicionales van más allá de la función básica del producto y pueden dar como resultado una sobrecarga y una complicación excesiva del software , en lugar de un diseño simple.
La definición de lo que se considera "expansión de funciones" varía entre los usuarios finales , donde lo que algunos usuarios perciben como tal puede ser considerado una funcionalidad práctica por otros. [2] La expansión de funciones es una de las fuentes más comunes de sobrecostos y sobrecostos. [3] [ verificación necesaria ] Por lo tanto, pone en peligro e incluso puede matar productos y proyectos.
La proliferación de funciones puede surgir del deseo de proporcionar al consumidor un producto más útil o deseable para aumentar las ventas o la distribución. Una vez que un producto hace todo lo que está diseñado para hacer, el fabricante puede agregar funciones que algunos usuarios podrían considerar innecesarias (a veces a costa de la eficiencia) o continuar con la versión original (a costa de una percepción de falta de mejora).
El aumento de características también puede surgir como resultado del compromiso de un comité que implementa varios puntos de vista o casos de uso diferentes en el mismo producto, incluso por razones oportunistas. [4] A medida que se agregan más características para respaldar cada enfoque, las características de conversión cruzada entre los múltiples paradigmas pueden complicar aún más las características totales.
Existen varios métodos para controlar el aumento de características, entre ellos: límites estrictos para las características permitidas, variaciones múltiples y eliminación de características en exceso.
La proliferación de funciones posteriores se puede evitar basando el diseño inicial en fundamentos sólidos de software, como la separación lógica de la funcionalidad y el acceso a los datos, por ejemplo, utilizando submenús a los que pueden acceder de forma opcional los usuarios avanzados que desean más funcionalidad y una mayor cantidad de información. Esto se puede controlar de forma activa con una gestión rigurosa de los cambios y retrasando los cambios a fases de entrega posteriores de un proyecto. [5]
Otro método para controlar la proliferación de funciones consiste en mantener múltiples variaciones de productos, en las que las funciones se limitan y reducen en las variaciones más básicas, por ejemplo, las ediciones de Microsoft Windows . Para las interfaces de usuario de software , se pueden utilizar modos de visualización o modos de operación (por ejemplo, modo básico o modo experto), entre los cuales los usuarios pueden seleccionar el que se ajuste a sus propias necesidades.
Tanto en muchas interfaces gráficas de usuario como en interfaces de línea de comandos , los usuarios pueden optar por un nivel de detalle más alto de forma manual. En este último caso, en muchos programas de línea de comandos, agregar una opción -v
o --verbose
de forma manual muestra información más detallada que puede ser menos relevante para usuarios con un uso mínimo, pero útil para usuarios avanzados o para fines de depuración y resolución de problemas.
Debido a que la incorporación de nuevas funciones, que es cada vez mayor y más amplia, puede exceder los recursos disponibles, se puede mantener por separado una versión "básica" básica mínima de un producto para garantizar su funcionamiento en entornos operativos más pequeños. Si se utiliza la "regla 80/20", las variantes más básicas del producto pueden satisfacer las necesidades de la mayoría (por ejemplo, aproximadamente el 80 %) de los usuarios, de modo que no estén sujetas a la complejidad (o al gasto adicional) de las funciones solicitadas por el 20 % avanzado de los usuarios. Las funciones adicionales siguen estando disponibles, pero son opcionales y están listas para que las utilicen quienes las soliciten, pero no se han implementado en las versiones básicas de los productos.
Otra solución para la proliferación de funciones es la modularidad . Los usuarios avanzados que requieren más funcionalidad pueden adaptar las funciones necesarias descargando módulos de software, complementos , extensiones (también conocidos como add-ins) y temas personalizados para que se ajusten a sus requisitos personales.
En algún momento, el costo de mantener un subconjunto particular de características puede volverse prohibitivo, y se puede recurrir a la poda. Una nueva versión del producto puede omitir las características adicionales, o tal vez se utilizaría un período de transición, en el que las características antiguas se descontinuarían antes de su eliminación final del sistema. Si hay múltiples variaciones de productos, entonces algunas de ellas podrían dejar de usarse gradualmente. Un ejemplo importante es el Samsung Galaxy S6 , lanzado en marzo de 2015, del cual se eliminaron significativamente muchas características de software/menú y también algunas características de hardware. No se ha lanzado una variación "más funcional" de este. [ cita requerida ]
En ocasiones, la ampliación descontrolada de las características puede dar lugar a productos que superan el alcance de lo que se pretendía originalmente; esto se conoce como ampliación del alcance . Una consecuencia común de la ampliación de las características es el retraso o la cancelación de un producto, que puede resultar más costoso de lo que se pretendía originalmente. [ cita requerida ]
A menudo, un proyecto de software con características razonablemente completas, o con cantidades moderadas de características adicionales, puede sobrevivir e incluso prosperar a través de muchas iteraciones, pero su versión sucesora puede sufrir retrasos sustanciales una vez que se toma la decisión de reescribir toda la base de código además de introducir nuevas tecnologías. Por ejemplo, Windows Vista de Microsoft estaba planeado para ser una versión menor entre Windows XP y su sucesor con nombre en código Windows "Blackcomb" (lanzado como Windows 7), pero después de adaptar cada vez más características de Blackcomb (muchas de las cuales finalmente se cancelaron), Vista resultó ser una versión importante que llevó cinco años de desarrollo.
Un destino similar corrió Netscape 6 , que originalmente se suponía que sería Netscape 5. La decisión de 1998 de Netscape Communications de publicar en código abierto su navegador Netscape Navigator y la suite de Internet Communicator (ambos con nombre en código Mozilla) pronto hizo evidente que el código subyacente era demasiado difícil y requirió una reescritura completa de Mozilla, lo que fomentó la creación del marco de aplicaciones Mozilla . Esto causó retrasos significativos, se omitió Netscape 5 y la compañía fue comprada por AOL. El lanzamiento posterior de Netscape 6.00 en 2000 fue ampliamente criticado como código de nivel alfa, y el proyecto alcanzó la estabilidad con Netscape 6.1 en 2001, tres años después de la decisión de rehacer la suite de Internet. En ese momento, el navegador Internet Explorer de Microsoft había eclipsado a Netscape en participación de uso, que se había reducido a un solo dígito.
Incluso después de haber alcanzado la estabilidad y de haber incorporado algunas nuevas funciones necesarias, la suite de aplicaciones de código abierto Mozilla Application Suite (en aquel entonces denominada simplemente Mozilla), sobre la que AOL construyó Netscape, se consideraba " inflada ". Tan solo un año después, un grupo de desarrolladores de Mozilla decidió separar el componente del navegador, que finalmente se convirtió en Firefox .
Broken Age , el proyecto Kickstarter de Double Fine Adventures , es otro ejemplo de un proyecto que se ha retrasado debido a la ampliación de funciones. Originalmente, se suponía que su fecha de lanzamiento sería octubre de 2012, pero la primera mitad del juego se lanzó en enero de 2014, mientras que la segunda mitad se lanzó a fines de abril de 2015 y requirió dos rondas de financiación independientes para completarse. [6]
La expansión de funciones combinada con plazos cortos a menudo conduce a una "solución chapucera" . El cambio deseado puede ser lo suficientemente grande como para justificar un rediseño de la base del proyecto existente, pero la presión de los plazos obliga a los desarrolladores a apresurarse y sacar un producto menos refinado. El término "creaturism feeping" (criatura que se queja) se acuñó para enfatizar el desagrado de los desarrolladores por esta situación [7] , personificando el producto que se ha expandido en el alcance como "una criatura deforme de hacks... rondando en la oscuridad", [8] y el presagio de más expansión por venir [9] ("Feeping" es un sinónimo en la jerga de "beeping"). [10]