Mostrando entradas con la etiqueta desarrollo. Mostrar todas las entradas
Mostrando entradas con la etiqueta desarrollo. Mostrar todas las entradas

jueves, enero 21, 2010

We Are Developers!

jueves, enero 21, 2010 por Martín

Se me pasa Enero y todavía no he escrito ningún post serio. Y esto no puede ser. En Diciembre tuve la suerte de ser invitado a las III Jornadas Java de Alicante donde hablé un poco sobre mi experiencia en el desarrollo ágil. Las transparencias de mi charla están aquí, pero como tuvimos mala suerte no hubo manera de recuperar el audio. Así que como hay una serie de diapositivas que necesitan su explicación, voy a ver si tengo la constancia para mantener una serie de posts sobre el tema.

La primera imagen que mostraba en la charla era super llamativa:



Es un cartel de la película 300. Esta es una de las cosas que he aprendido desde que soy desarrollador. Y es que un equipo pequeño puede hacer las cosas mucho mejor que un equipo 50 veces mayor. Parece una barbaridad, pero al menos a mi la experiencia me ha mostrado que es así. En mi caso personal tengo a Jobsket. No nos quiero tirar flores. Somos tres personas y hacemos lo que podemos, lo mejor que podemos. Pero todos los clientes a los que vamos se quedan alucinados con el producto y con el hecho de que seamos tres personas en el equipo. Técnicamente todo el mundo coincide en que somos mucho mejores que las alternativas. El aspecto comercial ya es otra historia, claro :)

Pero no quiero ser egocentrista aquí. En la charla hablaba de otra historia. Una historia de tres amigos que fueron capaces de hacer un producto mejor y más querido que el desarrollado por una empresa con más de cien personas dedicadas al mismo. Mis amigos tenían el software funcionando a los pocos meses, mientras que a la empresa en cuestión le llevó años ponerlo en marcha, y creo que aún están en ello. Cuando lo puso en producción causó el caos absoluto: pésimo rendimiento y consumo de memoria y recursos, falta de usabilidad, quejas de los usuarios, vamos que casi causan una huelga general.

Por el contrario todos los usuarios del software de mis amigos lo quieren con locura. ¿Cómo lo consiguieron? Pues siguiendo una serie de medidas muy simples y de mucho sentido común:

  • Desarrollo iterativo.

  • Despliegue de versiones cada poco tiempo.

  • Implementar sólo las funcionalidades que quieren los usuarios.

  • Reunirse frecuentemente con los usuarios y que sean ellos los que decidan como quieren que funcione el interfaz.

  • Evitar el desarrollo en cascada. No perder el tiempo con arquitecturas mastodónticas que tardan meses en materializarse.

  • No perder demasiado el tiempo en documentación. Es necesaria, pero al estar los usuarios tan metidos en el diseño del sistema, lo cierto es que todos ya sabían como se usaba la aplicación. Evitar documentar al principio.

  • Trabajo. No hace falta ser los mejores para que todo funcione. Normalmente con dedicación, empeño y disciplina todo se consigue.



Son unos cracks. La gran clave por la que los usuarios querían la aplicación artesanal y no la llamémosla industrial era sin duda la involucración de los usuarios. En realidad el equipo de mis amigos no eran tres personas, sino que eran ellos tres más los cientos de usuarios que participaron en su desarrollo. Usuarios que fueron construyendo ellos mismos la aplicación. Usuarios a los que se les tuvo muy en cuenta a la hora del desarrollo. Y a la hora de la verdad, los usuarios sienten esa aplicación como suya. Es algo en lo que han participado y que se ha desarrollado tal y como a ellos les es más útil para ahorrarse trabajo. Trabajando de esta manera, es muy difícil que los usuarios prefieran otro proyecto, lo desarrollen, 3, 30 o 300 personas.

No sé si soy yo pero para mi el cartel y la película de 300 me recuerda un montón a un departamento de desarrollo. Me imagino que otros departamentos pueden pensar lo mismo del suyo, pero el hecho de que somos un tipo de trabajadores que suele estar aislado, que sufre la ira de managers y usuarios :), y ahí estamos, resistiendo, intentando ser profesionales y hacer las cosas bien mientras los comerciales nos asedian con nuevos marrones y funcionalidades. No sé como lo veis vosotros, pero a mi se me asemeja la historia bastante. Eso sí, al final los espartanos siempre pierden. mmmm, da que pensar :)

lunes, julio 14, 2008

Algunas notas sobre el proceso de desarrollo en Linkedin

lunes, julio 14, 2008 por Martín


Tenía por aquí entre las cosillas pendientes de publicar unas transparencias sobre el proceso de desarrollo en LinkedIn que presentaron en la JavaOne de este año.



A mi LinkedIn es uno de los sitios que peronalmente me gusta más, especialmente desde que le dieron el cambio de imagen hace unos meses. Entre las cosas más destacadas de la presentación:


  • Ciclos de desarrollo de 2 a 4 semanas.

  • Los requisitos se dividen en pequeñas tareas con las que se rellenan tarjetas para cada desarrollador.

  • ¡¡Minimizar las reuniones!!

  • Test Driven Development

  • Más de 6500 tests de unidad e integración. Más de 500 tests de HTMLUnit.

  • El sistema de integración continua tiene más de 20 nodos. No se trata sólo de integración continua sino que ahí también se realizan los smoke tests.

  • El testing de integración puede llevar demasiado tiempo. Aquí easymock se muestra como una mejora importante.

  • 99% Java: Spring, ActiveMQ, Quartz, HTTPClient, Lucene, Grails, Jetty, DWR, jUnit, HTMLUnit, Hudson, Eclipse+Mylyn, EHCache. - Me llama la atención la ausencia de Hibernate o cualquier otro ORM. ¿JDBC Template "a pelo"?

  • Más de un millón de líneas de código, con ¡20 branches activas! Uso intenso de genéricos.

  • 50 ingenieros, 8 equipos. - Viendo el impacto de esta red y la importancia que ha adquirido, ¿no os esperaríais más?



La presentación sigue con notas sobre la arquitectura de LinkedIn, que también son interesantes para los que no conozcan los fundamentos básicos sobre los que se sustenta, es decir el mover la integridad a un segundo plano y el mantener toda la red de contactos de todo el mundo en memoria. El año pasado ya ponía algunos comentarios sobre el tema.

miércoles, enero 09, 2008

Dos documentos sobre software factories y costes de desarrollo

miércoles, enero 09, 2008 por Martín

Tenía pendiente publicar un artículo sobre un documento que vi en el blog de Kybele Consulting y Javier Garzás me lo ha puesto hoy todavía más fácil.

La entrada que quería publicar era sobre la ponencia consideraciones económicas sobre la fabricación de software que Javier publicaba en el blog de su compañía hace unas semanas. Se trata de una presentación muy interesante y que analiza algo que muchas veces los técnicos nos olvidamos de pensar que es el coste real que puede tener el aplicar una refactorización, buena práctica o patrón para el negocio.



Hoy mismo, también se puede encontrar en su blog otro documento muy interesante. Es un mindmap de los principales factores a tener en cuenta a la hora de mejorar o implantar un departamento, equipo o software factory.

Ambos documentos muy interesantes.

martes, abril 03, 2007

Eclipse: 5 años lanzando software a tiempo.

martes, abril 03, 2007 por Martín

Hoy he estado viendo la presentación que Eric Gamma realizó en la JavaPolis 2006. Me parece que es una referencia para cualquier persona que tenga que dedicarse a la gestión de procesos en una compañía de software, y desde luego de obligada visión para cualquiera que esté interesado en estos temas. En las siguientes líneas intentaré condensar los cuarenta minutoes a los que no llega la charla.

Y es que no muchas compañías pueden vanagloriarse de de haber estado liberando software en los plazos establecidos durante cinco años consecutivos. Como dice Eric, shipping matters, al menos si quieres hacer crecer una comunidad.

El proyecto Eclipse está actualmente distribuido a lo largo de todo el globo pero comenzó como un desarrollo cerrado en el que simplemente algo no existía si no había sido liberado previamente. Nadie podía hablar de proyectos que no habían sido liberados. Es fácil comprender que esto suponía una gran barrera entre los desarrolladores y los usuarios ya que era imposible recoger feedback hasta que el producto no se lanzaba.

Es muy interesante ver como Eclipse migró a una cultura orientada al lanzamiento de software. La regla es sencilla: "Si algo contribuye al lanzamiento de software, incluso indirectamente, entonces se considera bueno. Si algo no contribuye, entonces es malo". ¿Vamos a liberar enormes documentos de diseño? ¿No? Ok, entonces no los haremos. Dentro de la cultura se valora siempre la habilidad para liberar software. ¿Has liberado software? Bien, entonces puedes hablar.

En 2001 Eclipse realizó la transición a un proceso abierto de desarrollo. Pero un proceso abierto de desarrollo genera una comunidad, y una comunidad requiere atención. De repente los desarrolladores se encontraron con que los usuarios podían interactuar con su bugzilla, que en los newsgroups aparecían constantemente preguntas, etc. Para sobrevivir a este efecto, Eric señala como algo fundamental el invertir en interacción con la comunidad. Cada desarrollador de Eclipse puede invertir el 30% de su tiempo en interactuar con la comunidad. Se trata de romper las barreras entre los usuarios y los desarrolladores.

En un proceso de desarrollo abierto las dos partes se comprometen y las dos partes ganan. El proyecto le ofrece al usuario el compromiso de escuchar y reaccionar a su feedback, demostrar un progreso continuo y hacer transparente el proceso de desarrollo, es decir, mostrar los planes de desarrollo, permitir acceso a las diferentes milestones, etc. Por otra parte, como contrapartida los usuarios comenzarán a involucrarse y a resolver las preguntas fáciles (si la comunidad es saludable los desarrolladores sólo tendrán que gastar su tiempo en contestar las preguntas complejas), informarán sobre errores y defectos, validarán la tecnología escribiendo plug-ins, enviarán mejoras y parches, etc.

Para conseguir un proceso de desarrollo abierto se requieren live betas, es decir, se requiere que el software se pueda probar pronto, conforme se va creando. Esto requiere que el proyecto sea saludable ya que se debe obtener calidad en todo momento. En Eclipse esto son las milestones. Eclipse lanza una versión mayor de su software por año, de otro modo sería demasiado estrés para el equipo, el resto son milestones.

El proceso de desarrollo comienza con una fase de calentamiento que dura un mes. En esta fase cualquiera puede hacer lo que desee y nadie le va a pedir cuentas por ello. Es una fase también en la que se analiza lo que se ha hecho en la versión anterior y se buscan posibles mejoras. Al final de esta fase se crea el plan inicial de lanzamiento.

Posteriormente se entra en el proceso de milestones. Eclipse lanza de siete a ocho milestones por año. Inicialmente una milestone duraba tres semanas pero pronto encontraron que a medida que el proyecto se hizo complejo esta medida no era suficiente, así que en la actualidad cada iteración consume seis semanas. El objetivo inicial es conseguir software saludable, y las milestones les ayudan a mantener la forma, es decir mantener siempre un ritmo de trabajo saludable. De este modo, cuando llega el momento de lanzar la versión final, el espacio que hay entre la última milestone y una versión de producción no es tan grande y el esfuerzo a realizar es menor. Una vez terminada cada milestone es firmada por los diferentes equipos.

Un proceso de desarrollo transparente requiere también planificación transparente, es decir, mostrar el plan al público. Este plan ya no será nunca más estático, sino dinámico, y se actualizará continuamente según la evolución del proyecto y el feedback de la comunidad. Para eso los elementos que forman el plan tienen estados: commited, proposed o deferred.

Una milestone saludable significa consumible, es decir, que pueda ser probada (testable) y que pueda ser demostrada (demo-able), y al mismo tiempo debe ser honesta, es decir, con un tiempo fijo de lanzamiento y un incremento en las funcionalidades. Con cualquier milestone de Eclipse los usuarios deben ser productivos. El software debe siempre ser continuamente consumible, continuamente interesante y debe continuamente escuchar el feedback.

Para conseguir estos objetivos los equipos de desarrollo tienen que consumir sus propios productos. Eclipse trabaja con un sistema de integración continua multi-componente (es decir cada componente, cada equipo, tiene su sistema de CI que se coordinan para dar el resultado final). La milestone se divide a su vez en dias y semanas. Cada dia un equipo debe consumir lo que ha creado el día anterior y comenzará a trabajar sobre esa base. A su vez, cada semana, los diferentes equipos comenzarán a consumir todo lo que el resto de equipos realizaron la semana anterior. Finalmente, el último gran salto es la milestone, en la que serán los usuarios finales los que consumirán el producto en el que se ha trabajado durante las últimas semanas. Todo esto lleva a un feedback continuo, primero el equipo, después el resto de equipos, para llegar finalmente al usuario final.

Finalmente el proceso termina con el end game. Este se divide en fases de pruebas y corrección de errores: test-fix-test-fix-test ... Eclipse no tiene una sección de testers. Todo desarrollador es un tester. El ritmo de hacer tests puede ser cansino, por ello no pasan más de dos días realizando tests y a continuación pasan a corregir errores. Una vez corregidos, se vuelven a los tests, y el ciclo continua. El ciclo se vuelve más duro y estricto conforme avanza el tiempo y se acerca la fecha definitiva. El número de bugs es menor, hay más revisiones y se controla mucho más el número de regressions.

Posteriormente Eric Gamma habla sobre la transición en productos comerciales hacia un Open Commercial Software Development, que según él (yo estoy de acuerdo) es el futuro del software comercial. El objetivo es conseguir la misma transparencia que hay en Eclipse pero en proyectos comerciales. Todo ello requiere que el proyecto comercial:

  • Ofrezca acceso directo al sitio web de los desarrolladores.

  • Ofrezca acceso al código fuente (o parte), que exista una comunidad, que los propios clientes puedan crear mejoras y parches, ...

  • Permita interactuar directamente con el equipo de desarrollo.

  • Ofrezca acceso a todas las versiones previas, milestones, betas o versiones de integración.



Creo que esto resume más o menos lo que es la charla de Eric. Parecen un conjunto de ideas muy a tener en cuenta, y que pueden ayudar a muchas organizaciones que realmente sufren para ser capaces de lanzar lo que inicialmente parece como una simple versión de producción pero que sin un proceso de desarrollo adecuado se puede convertir en un infierno que se alarga durante meses o incluso años.