Durante mis más de 16 años de experiencia en el manejo de una agencia de desarrollo de software y alrededor de 32 años en el desarrollo de software, me han hecho la misma pregunta en numerosas ocasiones: ¿Por qué las empresas necesitan invertir continuamente tanto dinero en el desarrollo de software?
Una de las razones es que no puedes congelar el desarrollo de tu producto, ni siquiera por medio año. Por ejemplo, uno de nuestros clientes anteriores se presentó recientemente para realizar actualizaciones después de cinco años de no tocar el código. Todo necesitaba ser reescrito desde cero para satisfacer su solicitud. Estas son algunas de las principales razones por las que el desarrollo de software no tiene una línea de meta.
Hardware nuevo
Las fallas de software causadas por el nuevo hardware son fáciles de ilustrar con aplicaciones móviles. Mire el mercado de dispositivos Android: este último viene con diferentes tamaños de pantalla, resoluciones, configuraciones de hardware y arquitecturas de chips.
Es natural que las aplicaciones optimizadas para dispositivos más antiguos sean incompatibles con los nuevos y, por lo tanto, pueden fallar, teniendo una interfaz de usuario distorsionada o un tiempo de carga terrible. La alta granularidad de los teléfonos Android y las versiones del sistema operativo (SO) crea la necesidad de adaptar o rediseñar completamente el software para que coincida con el comportamiento cambiante del usuario.
Pero no son solo las aplicaciones móviles. Tome cualquier aplicación de escritorio o juego: ambos se basan en los mecanismos de interacción originales de hardware y software. Con el lanzamiento de Apple de una nueva generación de computadoras portátiles con el chip M1, por ejemplo, compañías como Blizzard, Microsoft y Adobe tuvieron que hacer lo mismo y adaptar sus aplicaciones para ejecutarse de forma nativa en las Mac M1.
Actualizaciones del sistema operativo
Tenga en cuenta que cada dispositivo en el que se ejecuta su software, ya sea un servidor, PC, tableta o teléfono inteligente, tiene un sistema operativo que se actualiza regularmente. Cada nueva versión del sistema operativo puede dañar potencialmente su código.
Con el tiempo, los sistemas operativos maduran, introducen nueva semántica y deprecian algunos de los métodos SDK en los que se basó su aplicación para ciertas funciones. Si el sistema operativo usa nuevas convenciones de interfaz de usuario, es posible que su aplicación aún permanezca completamente operativa, pero se verá extraña, como tener elementos superpuestos o espaciados incorrectamente, lo que lleva a una experiencia de usuario catastrófica.
Además, no todas las actualizaciones del sistema operativo garantizan la compatibilidad con versiones anteriores. ¿Recuerdas lo que sucedió cuando Apple eliminó la compatibilidad con aplicaciones de 32 bits en macOS Catalina? Los usuarios que actualizaron ya no podían usar sus aplicaciones heredadas, como Photoshop prenube.
Actualizaciones del navegador
Los navegadores de escritorio, móviles y tabletas difieren. Se actualizan regularmente y todas esas actualizaciones deben probarse. Si bien los navegadores actuales son más o menos consistentes en la representación de sitios, aún pueden aparecer defectos visuales menores después de un lanzamiento masivo. En 2018, Google silenció los juegos basados en navegador cambiando su política de reproducción automática de Chrome.
En 2020, para mejorar la seguridad del usuario, Chrome eliminó las ventanas de alerta del navegador y otras indicaciones creadas a través de iframes de origen cruzado. Debido a que el cambio se comunicó solo a una pequeña comunidad de desarrolladores, se rompieron muchas aplicaciones que dependían de esta funcionalidad. Nuestro equipo en Redwerk se enfrentó al mismo destino: parte de una plataforma de aprendizaje electrónico que dependía de iframes para mostrar contenido de terceros también se rompió.
Bibliotecas y marcos de terceros
Difícilmente encontrará alguna pieza de software que no dependa de bibliotecas y marcos de trabajo de terceros. ¿Por qué reinventar la rueda? Si bien son indudablemente útiles, crean una capa adicional de dependencias de software y requieren actualizaciones continuas para eliminar errores y problemas de seguridad o arquitectura.
Hablando de actualizaciones, migrar de una versión de framework a otra no es gran cosa. Los problemas surgen cuando esas actualizaciones contienen cambios en la interfaz o la arquitectura o cuando se altera el comportamiento y el estilo de los componentes existentes. Se tendría que reescribir una parte importante del código, precisamente lo que hicimos cuando actualizamos Material UI v3 a v4 en uno de nuestros proyectos.
Cambios a las API
Al igual que las bibliotecas y los marcos, las API evolucionan y se actualizan de vez en cuando. En caso de cambios importantes en una API, ya sea eliminando un parámetro o cambiando el nombre de la URL del punto final, el propietario de la API está obligado a notificar a los integradores con anticipación.
Los cambios de API no disruptivos a menudo se publican sin previo aviso. ¿Un cambio continuo garantiza que su aplicación no se verá afectada? No. ¿Recuerdas cuando Facebook introdujo un cambio menor en su SDK y causó que miles de aplicaciones de iOS que usaban el inicio de sesión de Facebook fallaran?
Deuda técnica
Suponga que adapta su software a todos los factores anteriores. Incluso bajo esta condición, aún enfrentará al menos un problema más. Con cada edición de código para mantener su producto compatible con las últimas actualizaciones, acumulará más y más deuda técnica. Y ni siquiera estoy incluyendo lanzamientos de funciones aquí. Con el tiempo, las soluciones alternativas se acumularán y la edición del código se convertirá en una pesadilla. Por eso es tan importante asignar el presupuesto y los recursos humanos para las pruebas continuas, la refactorización y el mantenimiento de la documentación del proyecto.
Mantenerse por delante de la curva
Dejando a un lado todos los matices técnicos, exploremos las razones comerciales que impulsan a los empresarios a continuar invirtiendo en el desarrollo de software.
- Demandas cambiantes de los usuarios. Con el tiempo, el comportamiento y las necesidades de los usuarios cambian inevitablemente. Las empresas deben ser rápidas para reflejar eso en sus productos.
- Nuevas tendencias en diseño de interfaces. Las interfaces de usuario también evolucionan bastante rápido: el skeuomorfismo fue reemplazado por un diseño plano en unos pocos años, y ahora los diseños minimalistas están de moda. Los avances en AR, VR, interfaz de usuario holográfica y basada en gestos, junto con la aparición de nuevas tecnologías, requieren un desarrollo continuo.
- Mantenerse al día con los competidores. Ya sea que sea el primero en crear funciones pioneras o que sus competidores lideren el cambio, las actualizaciones de software son inevitables. Nadie se ha mantenido relevante sin hacer nada.
Una vez que ha comenzado el desarrollo, no hay vuelta atrás. Es imposible desarrollar software perenne, estimar con precisión todo el esfuerzo de desarrollo o mantener el costo dentro del presupuesto inicial.
Porque las cosas cambian, surgen nuevas condiciones y el desarrollo nunca termina realmente. Mi consejo para todos los emprendedores: si no pueden reconocer esta simple verdad, no comiencen ningún desarrollo de productos a gran escala. El software exitoso requiere un cuidado incondicional.
*CEO y fundador de Redwerk & QAwerk, entregando soluciones SaaS sólidas y asegurando la calidad del software desde 2005.