En el mundo de los equipos software es bastante habitual que se produzcan malentendidos entre lo que se quería y lo que finalmente se crea o entre lo que el usuario necesita y lo que realmente recibe. Este tipo de malentendidos pueden provocar que perdamos mucho tiempo rehaciendo trabajo, o peor aún, generando desconfianza que acabe por matar nuestro trabajo. A continuación quería compartir 12 ideas para mejorar el desarrollo software:
1. Principal objetivo: la satisfacción del usuario final
Lo primero que tenemos que hacer con nuestro cliente es que nuestra mayor prioridad es satisfacer al usuario final mediante la entrega de software de manera contínua. Hoy en día este concepto se conoce como “customer centric” y es fuertemente defendido por cualquier UX. Hacer esta aclaración ayuda muchísimo a generar confianza, a enseñar a tu cliente a que lo importante es contrastar tus requisitos contra el mercado porque son hipótesis de lo que cree que quiere. Aclarar que esta es nuestra prioridad ayuda mucho a eliminar malentendidos.
2. El software es cambiante
La segunda idea es aceptar por todas las partes que los requisitos van a cambiar, y que esto pasa incluso en etapas tardías. Si todos aceptamos esto, evitamos frases como “esto no fue lo que acordamos” evitaremos muchas discusiones y frustraciones. Tenemos que entender que aceptar cambios es una ventaja competitiva que damos a nuestro cliente; eso sí, tenemos que eliminar la exigencia de fechas y a cambio hacer entregas continuas.
3. Entregas continuas y cortas
Si queremos evitar malentendidos entre lo que creemos que necesita el cliente, lo que pide y lo que realmente hacemos lo mejor es hacer entregas funcionales frecuentes. Al hacer pequeñas entregas de trabajo ayuda a corregir rápido y ser ágiles. Esto es lo que muchos autores llaman “fallar rápido para aprender”.
Hace 20 años la recomendación que daban los expertos era hacer entregas como mínimo cada dos semanas y como máximo 2 meses, eso sí, se prefería lo antes posible que permitiera nuestro negocio. Hoy en día, entregas a nivel funcional donde cada nueva funcionalidad se puede poner en producción incluso a diario nos permite más flexibilidad. El objetivo de las entregas es contrastar que estamos yendo por el camino correcto o cambiarlo si nos estamos equivocando. ¡Esto nos permite ser ágiles!. Hemos llegado a ver equipos que han esperado 18 meses por imposición de nuestro cliente y después ha sido un desastre cuando hemos ido al mercado a contrastar nuestro desarrollo.
4. Negocio y Desarrollo, de la mano
Una idea que nos suele costar mucho es poner a negocio y a desarrolladores a trabajar juntos la mayor parte del tiempo posible.
Esta medida por mi experiencia es vital. Por un lado permite ahorrar tiempo en llamadas o desplazamientos. Otra gran ventaja es que genera empatía entre ambas partes, por un lado los desarrolladores descubren las dificultades del negocio y las presiones y el negocio suele comprender mejor las dificultades y la naturaleza empírica del software.
Un ejemplo que yo he vivido fue en un equipo en el que el Product Owner incluso venía a comer con nosotros. Un día estuvimos dando un paseo tras el almuerzo una compañera se tropezó y se lastimó un tobillo. A raíz de la caída estuvo unos días de baja y no pudo completar una funcionalidad que era importante.
El Product Owner fue capaz de explicarlo al haber estado delante y al haber sido testigo de que el resto de compañeros estaban liados con otras partes también críticas. Estoy convencido de que de no estar delante podrían haber dicho “¡Pues que lo hubiera hecho otro!”.
Por tanto, el hecho de trabajar codo con codo nos permite generar empatía entre Development Team y Product Owner lo que ayuda a gestionar problemas como un equipo.
5. Equipos motivados
Otra de las mejores decisiones que podemos tomar es trabajar la motivación de las personas que componen los equipos de trabajo. Las personas deben disponer de entornos y el apoyo necesario para desempeñar lo mejor posible su trabajo además de darles la confianza necesaria.
Tomar medidas en este sentido ayuda a varios aspectos, por un lado a su autoorganización, evita excusas y ayuda a que el equipo ponga foco en el trabajo al que se deben enfrentar. Por otro lado, las personas motivadas siempre dan más a la hora de conseguir objetivos, lo que ayuda a evitar situaciones como “yo me ciño a lo que pone este documento”, “mi trabajo no es hablar con el cliente” o “a mi no me pagan por pensar”.
6. La importancia de la comunicación en los equipos
Otra idea para evitar malentendidos es fomentar la comunicación cara a cara por encima de otro tipo de comunicación. Es verdad que la comunicación escrita es muy buena para recordar detalles, sin embargo, la comunicación cara a cara es esencial para tener un diálogo entorno a los problemas que tenemos que resolver.
Siempre que sea posible es esencial tener los equipos unidos en el mismo sitio y evitar medidas como factorías o deslocalizaciones, al ahorro en coste se paga en malentendidos que acaban por provocar baja calidad, incidencias, deuda técnica y arreglar todo eso conlleva dinero que supera el que te has ahorrado.
Una vez participé en un equipo en el que no parábamos de discutir sobre las actas de las reuniones. Con retrospectiva entendí que era absurdo, ninguno de esos debates ayudó a que nuestros usuarios tuvieran un mejor software. El origen de todo era la ausencia de confianza en que una conversación cara a cara nos comunicaría mejor porque queríamos protegernos por encima de hacernos entender.
Puedes ver la segunda parte de este post aquí.