Fácil, intuitivo, con la máxima calidad y seguro. Estos quizás sean los cuatro principales atributos que busca una empresa en un software o aplicación para su negocio. Seguramente, además, lo necesite con la máxima rapidez posible. Para dar respuesta a esta demanda, los equipos de desarrollo son conscientes de que deben seguir unas buenas prácticas para no perderse en el camino y lograr soluciones sustentadas en código limpio, fácil de mantener y de actualizar, sin errores, ni costes añadidos ni retrasos. Todo con el objetivo de ofrecer el servicio más eficiente posible al usuario. Con la ayuda de profesionales técnicos de referencia en el sector y el equipo de desarrollo de Cuatroochenta hemos identificado las 10 principales prácticas de programación para garantizar el mejor servicio o producto digital.
1 · La tecnología no es un fin sino un medio
“Cuando consigues alinear los intereses o las necesidades tecnológicas de la compañía con los intereses del equipo técnico es un cañón” según Carlos Buenosvinos, con una amplia trayectoria en dirección de equipos como CPO y CTO en empresas como Atrápalo, SEAT o Qualifyze. En el episodio del podcast de Cuatroochenta ‘Del open source al código sostenible’, Buenosvinos defiende que los y las programadoras deben tener presente que están desarrollando tecnología para ayudar a un negocio y no por capricho individual.
«Lo importante es conseguir un equilibrio entre el equipo técnico y el cliente. Los equipos no pueden perder de vista que deben resolver o cubrir una necesidad y el cliente, que muchas veces impone velocidad, tiene que ser consciente de que deben garantizar soluciones mantenibles, seguras y de calidad»
Aunque entender que la “tecnología es un medio para un fin y no un fin en sí misma” es a veces complicado, es precisamente un gran reto para los equipos de desarrollo. Así, la formación y aprendizaje continuo son clave para mantener a los equipos motivados ante un proyecto. Al final, se trata de comprender que no se cambia, por ejemplo, el lenguaje de programación de una compañía por un antojo personal, sino por necesidad. Según el CTO de Desarrollo a Medida de Cuatroochenta, Iván Sorribes, a los equipos les suele gustar mucho dedicar tiempo a preparar buenas arquitecturas y eso está muy bien, pero siempre que cubran la necesidad del cliente. Es conviente que tanto dirección como personal sean conscientes de que todo eso tiene un impacto económico y, al mismo tiempo el cliente, debe tener presente que el desarrollo de soluciones requiere de unos tiempos.
2 · Seleccionar la tecnología adecuada
La formación es importante pero no se trata tanto de saber mucho de tecnología sino de saber elegir la más idónea para cada momento. Se trata de encontrar la tecnología justa para cada proyecto en función de la situación del negocio. Los y las responsables técnicos deben entender cuáles son las circunstancias de la empresa para saber cómo optimizar resultados, porque no es lo mismo una startup que está probando el modelo de negocio que una compañía que está escalando u otra que está obteniendo beneficios.
«Para mí la verdadera maestría es saber elegir la tecnología mínima necesaria para cubrir un proyecto y no poner más tecnología simplemente por capricho o por exceso»
Así, por ejemplo, hay arquitecturas de software muy complejas que usan las grandes compañías tecnológicas, pero que no tiene sentido aplicar en empresas más pequeñas o iniciales. Eso deben tenerlo en cuenta los responsables técnicos porque si apuestan por utilizarlas pueden añadir un sobrecoste innecesario, aparte de arrastrar una complejidad extra que sea difícil de eliminar con posterioridad. Y lo mismo pasa a la inversa, porque los y las tech leaders que se quedan cortos en la elección de tecnología puede que estén desaprovechando una oportunidad para el negocio. Por tanto, es primordial saber qué factor pesa más en una organización, si es la velocidad de desarrollo o si es el coste de mantenimiento, para apostar por la tecnología más apropiada.
Además, los equipos deben mantenerse al día de las diferentes tendencias para saber elegir la mejor tecnología y explotar todo su potencial. ¿Cómo? A través de:
3 · Agilidad en equipo
Las metodologías ágiles, que en realidad son la base de este decálogo, son un conjunto de prácticas de ingeniería de software que permiten adaptar la forma de trabajo a las condiciones del proyecto, para incrementar la velocidad de desarrollo y hacerlo de la forma más eficaz y productiva posible. Aunque empezaron a aplicarse en la década de los 90, acabaron formalizándose en el Manifiesto por el desarrollo ágil de software, impulsado en 2001 por 17 expertos en programación que querían mejorar el desarrollo de software y atender mejor a las necesidades de los clientes. Son prácticas pensadas para soluciones que se conocen como de alta incertidumbre, como son los productos digitales, en los que es necesario un proceso de desarrollo iterativo de prueba-error. Algunas de la metodologías ágiles más conocidas son:
Scrum para desarrollo de producto
Kanban para proveer servicio
Extreme programming para el detalle del código
«También hay que ser realistas y saber relajar y adaptar las metodologías ágiles. Aunque estén implantadas en una compañía, utilizarlas de forma estricta puede ser inviable, entre otras cosas, por el encarecimiento de los procesos de desarrollo»
Aunque es una importante medida de control de riesgo, los y las tech leaders son conscientes de la dificultad de aplicar algunas de las prácticas que recomiendan estas metodologías y aceptan que debe existir cierta flexibilidad. Extreme programming (XP), por ejemplo, plantea la programación de software en pareja (pair programming). Se trata de aplicar el principio de los “cuatro ojos” y que, en la práctica, se traduce en que dos personas trabajan de forma conjunta y revisan y releen el código del proyecto. Esta parte de doble revisión también ha comenzado a apoyarse en los sistemas de inteligencia artificial como Chat GPT, que es capaz de encontrar y corregir errores y sugerir mejoras en el código.
4 · Análisis: punto de partida esencial
Esas metodologías ágiles ayudan a abordar la complejidad de la creación de soluciones, acortando los ciclos de vida de desarrollo de software (Software Development Life Cycle). Es el tiempo que pasa entre que un equipo inicia el planteamiento de un desarrollo, lo analiza, lo diseña, lo implementa, lo prueba y, finalmente, ve el resultado. Esa velocidad de desarrollo, en la que también se incluye el mantenimiento, es mucho más rápida en el mundo startup y se ralentiza cuando las compañías crecen y se imponen algunos trámites u obligaciones burocráticas.
«El tiempo de análisis es para mí la principal variable que marca la gestión de un proyecto de desarrollo de software. Necesitemos tiempo suficiente para analizar cuál es la idea, cómo la queremos llevar a cabo y evaluar si hay algo que puede impedirnos llegar a ese fin»
Pero esa celeridad y agilidad no debe perjudicar la calidad de la solución. Para gestionar un proyecto de desarrollo, según el ingeniero de software y divulgador tecnológico, Brais Moure, la pieza fundamental es el análisis para saber plantear todos los pasos posteriores. Puede haber una buena idea, pero si no se profundiza en ella, puede estar llena de defectos, con alta competencia y costes de desarrollo y tiempos desmesurados. Para ello es importante incluir el análisis en el presupuesto del desarrollo del proyecto. En esa fase, trabajan de la mano con el cliente el personal técnico, el Business Analyst y el Product Manager para ver cómo aterrizan las necesidades y cómo se pueden cubrir.
5 · Delivery first: entregar valor al usuario
“Nuestra mayor prioridad es satisfacer al cliente mediante la entrega temprana y continua de software con valor”. Así reza uno de los 12 principios de ese Manifiesto Ágil de 2001, que hemos mencionado anteriormente. El equipo técnico debe tener presente, en todo momento, ese concepto que Carlos Buenosvinos bautiza como “delivery first” y que debe priorizar la entrega de valor al cliente, ya que está haciendo una inversión aunque no tenga en producción el software.
Para conseguirlo se suele fragmentar la entrega del producto en diferentes etapas. Si, por ejemplo, se está desarrollando un canal de venta online, en una primera fase se podría diseñar la interfaz de usuario, en otra permitir que el cliente pudiera dar de alta los productos y, en una tercera, incluir la funcionalidad de compra y pago. De esta manera, el cliente puede evaluar y probar cada etapa, obteniendo:
6 · Arquitectura limpia: código sostenible
Escribir código que sea fácil de mantener, cambiar y adaptar a lo largo del tiempo y, por tanto, sea eficiente. Es otra de las buenas prácticas que deben incorporar los equipos, aunque a veces pueda ir reñida con la velocidad. Para Carlos Blé, desarrollador de software y autor del libro Código sostenible, la guía para escribir software fácil de mantener, es tan sencillo como escribir código fuente pensando que debe ser entendido por otra persona humana y no solo por máquinas. Se trata de poder modificarlo “sin romper millones de cosas por el camino”. La rapidez que se exige al desarrollo de soluciones juega en contra de esta práctica y hace que el código, a veces, se convierta en una “maraña” difícil de mantener y actualizar y sea caldo de cultivo de defectos o soluciones frágiles.
Eso es, precisamente, lo que se debe evitar para que, cuando se tenga que modificar el código de un proyecto, no se tenga que reescribir desde cero y tenga la mínima afectación posible. Este concepto de arquitectura limpia es un cambio de paradigma que está impregnando en los equipos de desarrollo. Está demostrado que estas prácticas permiten reducir el tiempo dedicado al mantenimiento del código para destinarlo a la eficiencia y la productividad del proceso de desarrollo.
Beneficios de la adopción de código sostenible:
«La principal ventaja es que esa velocidad tan ágil que tenemos al principio del desarrollo de un proyecto nuevo se va a mantener a lo largo del tiempo. Y esto lo cambia todo, porque competitivamente esa empresa, ese producto va a ir mucho más rápido que cualquiera de la competencia»
7 · Automatización de testeos
Una de las reglas básicas para conseguir tener ese código sostenible y garantizar el buen funcionamiento de un producto de software es la de contar con una batería de testeos automáticos, que permitan detectar problemas o fallos cada vez que se cambia alguna cosa del código o se implementa una nueva función, por ejemplo, en una app. El testing es una de las prácticas más comunes y útiles dentro del ciclo de desarrollo y su automatización permite realizar pruebas de forma repetitiva reduciendo el riesgo de error.
«Los testeos automáticos nos permiten asegurarnos de que el producto no falla y de que no rompemos nada en una nueva iteración. En definitiva, se trata de garantizar la calidad de la solución»
Las pruebas manuales, que se encargan de validar y revisar el correcto funcionamiento de software, pueden llegar a ser lentas, caras y propensas a los errores. Según el Head of Applied Innovation Cuatroochenta, Nicolás Manero, automatizar este proceso, a través de herramientas de integración continua de software, permite ganar eficiencia y tiempo para que los equipos técnicos se centren en otras funciones prioritarias. En el caso de Cuatroochenta, por ejemplo, hay perfiles no técnicos que están asumiendo estas tareas de automatización de testeos a través de soluciones low code y no code.
8 · Uso de protocolos estándares y ‘open source’
Los protocolos son procedimientos y formatos que definen, entre otras cosas, el intercambio de paquetes de información para lograr comunicar dos servidores o más dispositivos de una red. El uso de protocolos estándares y no propietarios garantiza, por ejemplo, la interoperabilidad entre diferentes sistemas y la calidad del producto final, según destaca Eduardo Peña, Tech Leader de CheckingPlan, plataforma inteligente para la gestión del Facility Services. Se trata de utilizar algo que ya funciona y no de querer inventar la rueda. Un ejemplo sería el estándar informático Security Assertion Markup Language (SAML) que permite intercambiar información de autenticación y autorización en diferentes aplicaciones y que se utiliza en soluciones de autenticación única (SSO). Es lo que permite utilizar las mismas credenciales para acceder a diferentes servicios digitales.
«La principal ventaja que tiene el open source es que detrás de un proyecto hay muchas personas que pueden detectar errores, informar, actualizar, mantener e incluso crear documentación para enseñar cómo se utiliza»
Al uso de protocoles estándares para facilitar la integración de soluciones, se añade el software open source, código diseñado de forma colaborativa para que sea leído, modificado y distribuido libremente. Se utiliza en múltiples aplicaciones, sistemas operativos y bases de datos y sigue ganando terreno en detrimento del software propietario. La accesibilidad, el coste, la flexibilidad y la cooperación son sus principales ventajas. Linux y Kubernetes son un claro ejemplo de este tipo de soluciones. La desarrolladora frontend y divulgadora para la comunidad tech, Miriam González, apuesta firmemente por el código abierto, tanto por su calidad como por su mantenimiento colaborativo que hace enriquecer a los proyectos.
9 · Finalidades claras y nada de sorpresas
Cuando estás utilizando un editor de texto, esperas que al hacer clic en “Guardar”, el documento se guarde y no se cierre la aplicación sin avisar. Si lo hiciera y se cerrara, la solución estaría violando “el principio de menor sorpresa de software”. Es decir, se estaría comportando de una manera inesperada y, por tanto, la aplicación no sería ni intuitiva ni fácil de usar.
Ese principio de mínima sorpresa, acuñado por el programador Howard G. Cunningham, también conocido por haber creado el primer sitio wiki, establece básicamente que un usuario debe poder anticipar el resultado de una acción sin verse sorprendido por el resultado. El código bien escrito, por tanto, debe comportarse, tal y como está previsto, sin dar sustos o frustrar al usuario. Para ello es importante proporcionar órdenes claras y minimizar la complejidad.
10 · UX/UI poner en el centro al usuario
Entender cuáles son las necesidades de las personas usuarias e intentar cubrirlas. El objetivo debe ser poner al usuario en el centro, en equilibrio con los objetivos de negocio. Con esa filosofía debe trabajar cualquier equipo dedicado al diseño y desarrollo de productos y servicios digitales. “Al trabajar para la persona usuaria obtenemos productos realmente útiles" explica la Head of UX&UI de Cuatroochenta, Arancha Martínez, quien defiende que es fundamental analizar el comportamiento de la persona usuaria.
«Al final, el usuario es nuestro cliente principal, por el que velamos para que el producto que ofrecemos sea lo que espera y necesita, teniendo siempre en cuenta sus habilidades y limitaciones. Si logramos esto, el producto tendrá éxito: se usará y se recomendará»
La experiencia de usuario (UX) y el diseño de la interfaz (UI) garantizan el equilibrio entre la parte estética y la parte funcional de cualquier proyecto digital. Por ello es fundamental que los equipos de programadores trabajen, codo con codo y desde el primer minuto, con los y las diseñadoras para que analicen, conjuntamente, cómo las personas usuarias interactúan con un producto, para asegurarse que encuentran lo que necesitan de forma rápida y fácil y que su uso es sencillo, intuitivo y coherente.
A pesar de los ritmos acelerados de desarrollo que impone la industria, seguir unas buenas prácticas, aceptando cierta flexibilidad, garantizan la calidad, la innovación y la seguridad de un producto o servicio digital.
¿Necesitas desarrollar una solución para tu empresa?