Archivo de la categoría ‘project management’

El Arte del Desarrollo de Software

Me he revuelto en mi asiento leyendo un par de posts acerca del Desarrollo de Software o Ingeniería de Software y su control y gestión a propósito de una publicación de Tom DeMarco, un antiguo gurú en esto del Software, que se retracta de la visión sobre la gestión de los proyectos de software que escribió hace muchos años, especialmente en la parte de control y medición.

El Control de Software, dice Tom DeMarco, cuesta dinero y esfuerzo. Para un proyecto de 1 millón de dólares que va a producir 1.1 millones de facturación, el control es importatisimo. Para un proyecto de parecido coste que va a producir 50 millones, el control no es tan importante. Entonces: deberíamos enfocarnos sólo en el segundo tipo de proyectos. No dice que el control y la medición no sean necesarios, pero es cierto que en la mayoría de los proyectos, sobretodo en los mejores, el control, teniendo en cuenta el coste que tiene en todos los sentidos, puede no ser importante.

Es evidente que el control es necesario en el mundo actual, los proyectos de software se integran en el mundo empresarial… pero hay que saber qué hay que controlar, y cuanto menos sea necesario ese control, mejor.

Quizá está en los genes del ser humano querer controlar. O quizá esté en el propio raciocinio el miedo a perder el control de lo que le rodea que se convierte en obsesión en ciertos individuos. Quién no ha visto alguna vez al típico jefazo, normalmente sin idea de software ni intención de tenerla, perdiendo su propio control y blasfemando acerca de los desarrolladores.

Hemos tratado de encapsular los proyectos de software bajo los parámetros clásicos de gestión de proyectos, tiempo, coste y calidad, nos hemos roto la crisma y posiblemente haya sido un error y hayamos perdido el tiempo miserablemente.

Echando la vista atrás, viendo los proyectos en los que he participado y cuáles han sido los más exitosos, me salen una serie de factores básicos comunes que hablan de gente más que de otra cosa:

  • Contar con buenos desarrolladores a los que les guste su trabajo, mejorar, aprender, disfrutar de la tecnología.
  • Contar con un ambiente en el que haya confianza entre los desarrolladores y la gente de negocio, capaces de comunicarse y entender posiciones.
  • Contar con desarrolladores que sean capaces de ver más allá del código, que entiendan los objetivos finales y se impliquen con ellos.
  • Contar con gente de negocio que sepan comunicar esos objetivos y ser flexibles a cambios según avance el desarrollo de software, abiertos a encontrar limitaciones y soluciones alternativas.
  • Contar con desarrolladores con experiencia, que sepan estimar esfuerzos, expectativas, anticipar problemas, en base muchas veces a “feeling” y experiencias pasadas.
  • Contar con gente de negocio que se preocupe por entender la tecnología, con experiencia desde el punto de vista de usuario.

En resumen, se me ocurre que un proyecto de software está destinado al fracaso si:

  • El coste y tiempos de desarrollo es crítico para el éxito del proyecto.
  • Hay que ahorrar a toda costa, mejor becarios y personal junior a tutiplén que gastarse el presupuesto en gente buena.
  • No hay tolerancia a tiempos y margen.
  • No hay interés por entender la tecnología.

Realmente el control de software, la predicción precisa y la anticipación del resultado final del producto, es ciencia ficción, como se concluye en el artículo. Siempre tendrá un componente experimental. Algunos de mis profesores de gestión de proyectos, admitían, como hace Tom DeMarco, que a lo mejor han acertado una o dos veces con la planificación de un proyecto en toda su vida (esto se llama casualidad).

Cada día estoy más convencido de que el desarrollo de software se acerca más a un arte. Nunca dos desarrolladores escribirían el mismo código, posiblemente ni parecido. Nunca se acertará en el tiempo ni el coste, y la calidad dependerá más de quién lo hace y las circunstacias del momento. ¿No suena esto a algo artístico?. Ya lo dice el eslogan de Wordpress: Code Is Poetry.

De recomendable lecura las reflexiones de Jeff Atwood y Ricardo Galli

Monday, August 3rd, 2009

Issue trackers

No concibo un departamento de tecnología o un proyecto medianamente serio y organizado sin un seguimiento de tareas e incidencias. Hay algunas herremientas, denominadas issue trackers, que sirven a este propósito. La herramienta sirve a un método o una forma de organizarse. Podrían ser post-it pegados en la pared en los que cada desarrollador pusiese el estado de la incidencia… no es lo mejor, pero preferiría eso a no tener nada.

Afortunadamente hay software de apoyo que permiten otganizar y hacer ese seguimiento, comento por aquí algunos que he usado y conozco. Por orden de preferencia.

- Bugzilla: Posiblemente el más versátil y completo, avalado por años de desarrollo open source. Lo tiene todo y bien. En Kelkoo y después en Yahoo! utilizábamos además una versión customizada y mantenida, una auténtica maravilla. La única pega puede ser la instalación y mantenimiento, nada triviales. Está desarrollado básicamente en Perl. [Sitio Oficial de Bugzilla]

- Jira: Viene con fuerza y está en pleno apogeo. Es el issue tracker de moda. Un interface muy bueno y la posibilidad de instalarse o desarrollar plugings. Se está postulando como base para seguimiento de proyectos usando Scrum. Las principales pegas: Es comercial y el reporting es algo limitado en algunos aspectos. Está basado en Java. [Sitio Oficial de Jira]

- Mantis: Uno de los más populares, muy ligero y sencillo de instalar. El proyecto es completamente open source y es bastante activo. Tiene algunos plugins que se pueden aplicar. Cada desarrollador tiene una zona personal donde tiene el resumen de su actividad, muy completo también, quizá la mejor alternativa libre a Bugzilla . Desarrollado en PHP. [Sitio Oficial de Mantis]

- Eventum: Es el issue tracker que usan los desarrolladores de MySQL. Extremadamente sencillo de instalar y empezar a utilizar, aunque al ser tan ligero tiene algunas limitaciones. La búsqueda es limitada y el reporting bastante estático. No tiene tipos de isses (tales como bug, enhancements, task…), aunque pueden ser suplidos por custom fields. Tiene features interesantes como asignar un issue a varias personas o asignarlo por Round Robin. En resumen, muy ligero, fácil de utilizar aunque algo limitado. Desarrollado en PHP. [Sitio oficial de Eventum]

- Trac: Viene con Wiki pre-instalado y es fácil de integrar con SVN. Es el que menos he utilizado, aunque parece prometedor. Quizá limitado para entornos multiproyecto. Desarrollado en Python. [Sitio Oficial de Trac]

Thursday, January 22nd, 2009

Programación Extrema

Esto me lo encontré ayer buscando recursos sobre Scrum y Extreme Programming. Me alegró la mañana :)

Wednesday, January 7th, 2009

¿Por qué fallan los proyectos de software?

La frustración es muchas veces una constante cuando se trata de abordar un proyecto de software, ya sea un proyecto grande o pequeños desarrollos, ya sea interno o externo. Es sorprendente que en un área aparentemente tan predecible, a base de combinaciones de unos y ceros, sea tan difícil hacer predicciones precisas, tanto en tiempo como en coste.

Lo cierto es que el desarrollo de software no es una ciencia tan nueva. Otras disciplinas, como la arquitectura o la fabricación naval, llevan desarrollándose milenios. Podríamos decir que el software comenzó sus andaduras alrededor de 1950, en la época en la que se construyó el Mark I y similares, que constituía el paso de máquinas de cálculo a lo que hoy conocemos por ordenadores modernos.

Hay un estudio basado en una encuesta de Standish Group que da una visión bastante clara de algunos factores que influyen en los problemas con proyectos de software.

(more…)

Sunday, September 23rd, 2007