Software Craftsmanship: una visión distinta de nuestra profesión

Recientemente terminé de leer el libro Software Craftsmanship: The New Imperative de Pete McBreen. Es un libro que trata conceptualmente, o incluso podría decir filosóficamente, sobre la profesión del desarrollador de software. Creo que no hay muchos libros sobre esta temática, rápidamente se me vienen a la mente los tres que tengo en mi biblioteca: The Pragmatic Programmer (Thomas & Hunt), Soft Skills(Sonmez) y The Software Craftsman (Mancuso). Pero ninguno de estos libros tiene un enfoque filosófica tan profunda.

Es un libro que tiene casi 20 años y tal vez por ello hay cuestiones que hoy en día suenan como obvias pero que sin duda en su momento resultaron innovadoras y/o polémicas. El libro fue publicado en agosto de 2001, esto es apenas un par de meses después de la publicación del manifiesto ágil. Muchos de los puntos planteados en el libro suenan muy alineados con el manifiesto, cosa muy común hoy en día pero posiblemente muy llamativa en aquel momento.

Hace un par de semanas escribí sobre la idea de Good Enough Software que se expone en este libro. En línea con esa idea el autor hace una fuerte crítica al modelo de desarrollo propuesto por la ingeniería de software. A mi parecer algunas de esas críticas han quedado sin efecto en la actualidad por el simple hecho de que la ingeniería de software ha «evolucionado» incorporando, entre otras cosas, muchas ideas de los métodos ágiles. Sin embargo, hay algunas críticas que me parece siguen vigentes. En la visión del autor, la ingeniería de software propone una forma de trabajo basada en «hordas de programadores promedio» en contraposición con la propuesta de craftsmanship que sostiene «equipos pequeños de programadores muy buenos». Y no termina ahí, dice que muchos de esos «programadores promedio» están «sobre remunerados». Ante esto cree que las organizaciones, en lugar de contratar 15 programadores promedio sobre remunerados, deberían utilizar ese mismo presupuesto pero para contratar 3 programadores muy buenos (craftsmen). Esto haría que estos 3 programadores estuvieran muy bien remunerados y colateralmente esto ayudaría a elevar el nivel y de la profesión y la calidad del software generado.

EL libro me encantó y creo que es una lectura muy recomendada para aquellos profesionales de sistemas (no solo desarrolladores) que tengan ganas de reflexionar sobre el desarrollo de software.

Les dejo aquí algunos títulos/frases del libro:

  • Good developers are more valuable than their managers
    (totalmente de acuerdo, pero pocas veces reflejado en las remuneraciones)
  • Software Engineering forces us to Forget the individual
    (este planteo parece muy bueno, pero creo que en la actualidad es más preciso decir «software factories forces us to forget the individual»)
  • Craftsmanship is personal
    (de acuerdo)
  • Mastery implies taking responsibility for passing on the craft
    (esta idea me pareció muy buena)
  • Let your Software Craftsman pick the rest of the development team
    (esto me parece conceptualmente fantástico aunque nunca lo viví)
  • Avoid bleeding-edge technology is at all posible
    (muy de acuerdo, aunque dependiendo del contexto no siempre es posible)
  • Think applications, not projects
    (me gusta, muy en linea con ideas de equipos de producto y #noProjects)

«Good enough» Software Engineering

Por estos días me encuentro leyendo el libro «Software Craftsmanship: The New Imperative» de Pete McBreen. Es un libro que tiene casi 20 años y que a mi entender no ha tenido gran difusión. De hecho yo lo encontré por casualidad. No es mi idea en este artículo resumir el libro sino simplemente detenerme en esta idea de «Good Enough Software Engineering» que es una de las ideas que menciona el autor en la primera parte del libro y que recientemente me resonó mucho a partir de un intercambio de mensajes con mi colega Carlos Peix.

McBreen pone en tela de juicio el «enfoque formal» propuesto por la ingeniería para el desarrollo de software. Argumenta que la ingeniería de software resulta sin duda un enfoque apropiado para ciertos tipos de sistemas que implican el desarrollo conjunto de hardware + software y que ponen en juego la vida humana. En este sentido menciona proyectos militares y aeroespaciales. Sin embargo cree que el enfoque de ingeniería de software no es apropiado para el desarrollo de lo que llama «software comercial», cuyo desarrollo no requiere del desarrollo de un hardware particular y que no pone en juego vidas humanas, pero que tiene ciertas restricciones de mercado. Dicho de otra forma: los trade-offs que pueden hacerse en cada uno de estos dos tipos de proyectos son distintos y eso da lugar a distintos enfoques. Según MeBreen el desarrollo de software comercial va mejor con un enfoque de «good enough software» que con un enfoque de «Ingeniería».

Creo que somos varios a los que nos resuenan estos cuestionamientos que hace McBreen. De hecho recuerdo un artículo de David Parnas publicado en IEEE Software: Software Engineering – Missing in Action: A Personal Perspective, en el cual también se cuestiona el enfoque de ingeniería para el desarrollo de software. McBreen insiste en que para muchos contextos (la mayoría según él) hay enfoques más apropiados que el de ingeniería de software. Más aún, cree que hay varios enfoque posibles pero se inclina a hacia un enfoque de «artesanía».

Estas reflexiones plantean interesantes dilemas para practicantes y académicos. Como practicantes debemos entonces ante cada nuevo proyecto decidir que enfoque utilizar. Como académicos aparecen algunos cuestionamientos profundos:

  • ¿está bien que las carreras de informática sean ingenierías o deberían ser licenciaturas y de esa forma despegarse de la «carga conceptual/cultural» que la ingeniería impone?
  • ¿es posible/conveniente cubrir dentro de una misma carrera enfoques de ingeniería y de «no ingeniería»?
  • ¿deberíamos tener carreras más específicas en línea con distintos enfoque de desarrollo?

Mi sensación es que en la actualidad muchas carreras, independientemente de su nombre, proponen un enfoque ingenieril pero luego una importante porción de sus egresados terminan trabajando en proyectos que podrían resultar más afines a un enfoque de artesanía.

Un detalle importante aquí es que un enfoque de ingeniería no es más completo ni abarcativo que un enfoque de «no-ingeniería» sino que es divergente. Esta divergencia que yo veo no es necesariamente conceptual sino «operativa» en un punto: las carreras tienen un límite de tiempo, enseñar un enfoque de ingeniería trae de entrada toda una base de conocmiento que reduce el espacio/tiempo para estudiar otras cuestiones. Esto queda muy en evidencia cuando en la actualidad vemos «ingenieros de software» que no buenos desarrolladores. Mi percepción es que muchas de las carreras actuales de «Ingeniería» (más allá de que sean formalmente ingenierías o licenciaturas) no forman buenos desarrolladores.

En fin, creo que este tema da para mucho, continuaré.

Iniciativa de Software Craftsmanship en Buenos Aires

El movimiento de Software Craftsmanship (SC) surgió hace un par de años y al igual que ocurre con el movimiento ágil cuesta poner una fecha «de fundación». Si bien el manifiesto de Software Craftsmanship data de 2009, algunas publicaciones al respecto son bastante anteriores: Software Craftsmanship: The new Imperative (2001) y The Pragmatic Programmer (1999).

El movimiento de SC ha tenido un gran crecimiento en los últimos años y varias conferencias han potenciado su difusión. Entre estas conferencias destaca sin duda SoCraTes (Software Craftsmanship and Testing Conference) la cual desde 2010 se ha replicado en distintos países (Alemania, UK, Bélgica, Francia, España)

En paralelo con el crecimiento de este movimiento han surgido también algunas críticas/debates que han sido muy resumidos por Martin Fowler en su artículo Craftsmanship and the Crevasse.

Hasta donde tengo conocimiento no existe hoy por hoy en Buenos Aires un espacio comunitario que trate sobre este movimiento. Al mismo tiempo dada la cercanía de este tema con agile, creo que podría ser interesante reflotar los encuentros mensuales de Agiles@BuenosAires para hacer algunas actividades de Software Craftsmanship. Manos a la obra.

Continuará…