Las últimas semanas he recomendado y enviado en PDF varias veces La Catedral y el Bazar, ensayo de Eric. S. Raymond publicado en 1997 que va de la gestión de proyectos de desarrollo de software. Un texto que no debería faltar en la lista de lecturas de nadie que quiera entender el enfoque lean startup de hoy pues es un antecedente del mismo. De paso lo he releído. Esta vez me llevó a The Mythical Man-Month, libro de ensayos en el mismo tema de Frederick Brooks publicado en 1975, cuyo capítulo del mismo título encontré en PDF.
Este capítulo explica lo que se llegó a conocer como la Ley de Brooks: añadir más personas a un proyecto de software en retraso lo retrasará más (Adding manpower to a late software project makes it later). En otras palabras, como el proceso de desarrollo es secuencial, el proyecto no se puede dividir entre un número mayor de personas que el número de subtareas independientes. Dicho con la metáfora que emplea Brooks: un embarazo dura 9 meses por más que se añadan más mujeres.
Otro detalle del ensayo que me ha interesado es la proporción del tiempo que recomienda para las distintas fases del proyecto: un tercio para diseñar, un sexto para programar y la mitad para pruebas.
Dedicar tanto tiempo más a diseñar y probar que a programar es necesario porque, como se explica en los siguientes cuatro párrafos, estamos creando «de la nada», directamente desde nuestra cabeza, sin medio físico que ponga límites. Sólo podemos encontrar los límites escribiendo y reescribiendo los planes, experimentando con el producto, programándolo y reprogramándolo según los resultados de los experimentos.
The pervasiveness of optimism among programmers deserves more than a flip analysis. Dorothy Sayers, in her excellent book, The Mind of the Maker, divides creative activity into three stages: the idea, the implementation, and the interaction. A book, then, or a computer, or a program comes into existence first as an ideal construct, built outside time and space, but complete in the mind of the author. It is realized in time and space, by pen, ink, and paper, or by wire, silicon, and ferrite. The creation is complete when someone reads the book, uses the computer, or runs the program, thereby interacting with the mind of the maker.
This description, which Miss Sayers uses to illuminate not only human creative activity but also the Christian doctrine of the Trinity, will help us in our present task. For the human makers of things, the incompletenesses and inconsistencies of our ideas become clear only during implementation. Thus it is that writing, experimentation, «working out» are essential disciplines for the theoretician.
In many creative activities the medium of execution is intractable. Lumber splits; paints smear; electrical circuits ring. These physical limitations of the medium constrain the ideas that may be expressed, and they also create unexpected difficulties in the implementation. Implementation, then, takes time and sweat both because of the physical media and because of the inadequacies of the underlying ideas. We tend to blame the physical media for most of our implementation difficulties; for the media are not «ours» in the way the ideas are, and our pride colors our judgment.
Computer programming, however, creates with an exceedingly tractable medium. The programmer builds from pure thought-stuff: concepts and very flexible representations thereof. Because the medium is tractable, we expect few difficulties in implementation; hence our pervasive optimism. Because our ideas are faulty, we have bugs; hence our optimism is unjustified.
Muy interesante, como siempre, y lo digo como persona que se acerca a la informática desde fuera. Me apunto lo de 1/3+1/6+1/2
Saludos!
Creo que la lección es aplicable en proyectos de cada vez más ámbitos, conforme el conocimiento y su generación continua en sintonía con el mercado pasa a ser el principal activo de las empresas. Por ejemplo, con las cadenas de montaje convirtiéndose en parte importante del bucle de realimentación la fabricación industrial se parece cada vez más al desarrollo de software.