Se dice que un buen desarrollador de software debe ser vago, sobre todo en cuanto a evitar repetir manualmente procesos similares una y otra vez. A la hora de escribir código tratamos de evitar duplicar código y aplicar convenciones que nos permitan escribir menos código repetitivo.
Este afán por evitar hacer lo mismo una y otra vez es algo muy saludable y podemos debemos llevarlo más allá de la escritura de código. Durante el proceso de desarrollo existen multitud de tareas que realizamos muchas veces y que podemos automatizar para ahorrar tiempo y evitar cometer errores.
Crea aplicaciones para facilitarte el desarrollo
Es curioso que muchas veces el objetivo de informatizar un proceso es justo ese, ahorrar tiempo y evitar cometer errores, y eso es algo que la mayoría de los que nos dedicamos al desarrollo tenemos muy claro, pero a la hora de aplicarnos eso mismo, la cosa cambia y acabamos por tener interminables procesos manuales para generar los paquetes de instalación de la aplicación o subir a producción la nueva versión de un sitio web.
Seguramente resulte menos divertido escribir un script en powershell o un nuevo Target para MSBuild que añadir una nueva pantalla llena de animaciones con WPF o jQuery, pero es importante dedicar un poco de tiempo a crear aplicaciones que nos ayuden a tener un proceso de desarrollo más ágil, cómodo y menos sensible a errores.
Estas otras aplicaciones podrán ser desde simples scripts hasta aplicaciones completas, pero muchas veces el tiempo invertido en su desarrollo se recupera con creces cuando estamos trabajando en un proyecto medianamente largo.
En una de las aplicaciones que desarrollo en el mi trabajo del Mundo Real™ tenemos aplicaciones o scripts para crear bases de datos vacías o inicializadas con datos de ejemplo, para generar los paquetes de instalación, para preparar los changelogs, para recuperar backups de bases de datos, para analizar logs de errores, para desplegar a QA los instaladores, para generar la documentación…
Cada una de ellas ha ido surgiendo poco a poco y cada una de estas aplicaciones supone más comodidad a la hora de desarrollar, permitiéndonos centrarnos en lo que genera valor (y nos gusta), que es añadir funcionalidad a la aplicación principal, sin perder el tiempo en tareas aburridas que no aportan valor.
Crea aplicaciones para comercializar y mantener el producto
La misma idea que aplicamos durante el desarrollo es extrapolable al siguiente paso: la comercialización del producto y el mantenimiento de la aplicación en producción.
Muchas veces el cliente, product owner, o quien sea que asume el rol de dirigir el desarrollo, ve sólo la parte funcional, pero cuando una aplicación entra en producción hay que tener en cuenta muchos más aspectos.
Es necesario atender incidencias de los usuarios y contar con herramientas adecuadas para ayudar al personal de soporte a hacerlo. Esto puede requerir cosas puramente técnicas, como el análisis de logs de errores, pero también puede ser necesario cubrir áreas más mundanas como conocer el nivel de contrato de mantenimiento que tiene cada cliente o las versiones de producto que están desplegadas.
También puede ser necesario satisfacer necesidades más comerciales, como tener versiones de demostración de la aplicación o controlar licencias de uso. No olvidemos que en la mayoría de los casos dependemos de que las aplicaciones generen ingresos para poder cobrar por desarrollarlas.
Generalmente todas estas tareas son ignoradas al principio del desarrollo y no se tienen en cuenta a la hora de planificar el desarrollo de la aplicación, pero son fundamentales desde el punto de vista del producto. Centrarse en arquitecturas, patrones de diseño y calidad de código no sirve de nada si acabas con una aplicación maravillosa que no se puede comercializar o mantener porque no cuentas con las herramientas adecuadas para ello.
Conclusiones
A veces es bueno aplicar las mismas técnicas de análisis y consultoría que apicamos a nuestros clientes a nuestros propios procesos. Igual que detectamos ineficiencias en la manera en que un cliente gestiona su proceso de facturación y creamos aplicaciones para ayudarle a paliarlas, debemos buscar las formas de mejorar el ciclo de vida de nuestras aplicaciones, desde el desarrollo hasta la comercialización y mantenimiento.
En muchos casos será posible encontrar soluciones en el mercado que solucionen estas ineficiencias (que a nadie se le ocurra desarrollarse su propio bugtracker), pero otras veces no quedará más remedio que remangarnos y crearnos nuestras propias herramientas.
Estoy totalmente de acuerdo con el post, el problema radica cuando te piden cotizar el tiempo que te llevaría el desarrollo de la funcionalidad de la aplicación, en donde no puedes meter ni cobrar el tiempo que te va a llevar desarrollar aplicaciones alternas que le ayuden a la aplicacion principal (explotar datos de logs, cancelación de procesos automáticos, generación de reportes dinámicos, etc;).
Excelente articulo.