Showing posts with label metodología agil. Show all posts
Showing posts with label metodología agil. Show all posts

Saturday, June 6, 2009

Entidades invisibles

En su última columna en el Scientific American, Michael Shermer se pregunta (y luego responde) cual es el origen de la tendencia a creer que nuestra vida está controlada por agentes misteriosos, invisibles y poderosos. La respuesta es más o menos la misma que se da desde los tiempos de Daniel Kahneman y que ha merecido ríos de tinta de autores muy recomendables como el mismo Shermer, Daniel Dennett, a veces Dawkins, Thomas Kida y seguramente se me pasan algunos (la respuesta corta es que los errores de tipo I son evolutivamente menos peligrosos en el corto plazo que los errores de tipo II, en todo caso, siempre se puede leer el artículo de Shermer completo, que es muy recomendable y explora las causas que nos han llevado no solo a reconocer patrones donde no los hay, sino a pensar que hay intenciones detrás de esos patrones).

El artículo abre con una enumeración de los agentes invisibles más populares:

Se cree normalmente que almas, espíritus, fantasmas, dioses, demonios, ángeles, extraterrestres, diseñadores inteligentes, conspiradores gubernamentales y agentes invisibles de
muchas otras naturalezas, poderosos y guiados por intenciones controlan nuestro entorno y nuestras vidas. Por qué?

Nota al margen para quienes no sigan el debate de la ciencia y el creacionismo en USA (y que se expande al resto del mundo). Copiando del diccionario escéptico, el diseño inteligente es una creencia anti-evolución que sostiene que las explicaciones naturales sobre el origen de ciertas entidades biológicas no son razonables y que el proceso de creación de estas solo puede ser explicado a través de la presencia de un diseñador inteligente (i.e dios)

Y me quedé pensando... no faltan los gerentes, los project managers y los ejecutivos en esa lista?. De los ejecutivos (y particularmente, ejecutivos de finanzas) ya se encargaron antes y mejor que yo muchos otros, así que me voy a detener en los gerentes operativos y de proyecto. Se podría decir que el primer motivo para no incluirlos en la lista es que éstos existen (bueno, los conspiradores gubernamentales también existen y cada tanto se anotan algún que otro éxito, pero ni tantos ni tan espectaculares como se les atribuyen).

Concedido, los gerentes existen, cierto. Pero mi impresión, basada en algo tan poco científico como mi experiencia personal, es que las personas en los grupos de trabajo tienden o bien a despreciar a sus gerentes de proyectos, o bien a sobreestimar el alcance de su capacidad para influir en los acontecimientos.

La primera alternativa (el desprecio a los gerentes) es fácil de explicar, incluso cuando no es justificada. Ahora, me intriga la segunda. Y me intriga más cuanto he sido su víctima, de un lado y del otro: a veces he supuesto que mi gerente o director era un mago que podía mágicamente arreglar cualquier problema con el que me enfrentaba, y otras me tocó ser considerado el Mesías (de más está decir que el tiempo se encargó de juntar evidencia para refutar ambas ilusiones, aunque, como sabemos, las ilusiones suelen ser resistentes a las evidencias). Hoy veo casi con cariño la ingenuidad que mostré al pensar que R. (mi director en esos momentos) podía resolver cualquier cosa y al sentirme halagado cuando se me consideró el Mesías.

Tengo una visión del gerente de proyecto (puesto que ocupo) más parecida a la de alguien que no controla nada, a lo sumo trata con buena fortuna de acomodar su proyecto a un entorno que cambia (más allá de su control), adaptándose a lo que pasa y, muy de vez en cuando, siendo capaz de saber qué va a pasar.

Existe la Economía Comportamental (espero que se perdone esta traducción tan chapucera de Behavioral Economics), que es, según dice la wikipedia, una rama de la economía que aplica el conocimiento científico sobre los factores cognitivos y emocionales para entender mejor las decisiones de consumidores, prestamistas, inversores y otros agentes económicos. Sería un ejercicio de optimismo esperar ver en los próximos años la Gestión de Proyectos Comportamental, que podría ser una serie de técnicas y herramientas para la gestión de proyectos que tengan en cuenta lo que sabemos del funcionamiento de nuestra mente?.

Y una última duda... si tal disciplina existiera... refutaría o apoyaría a las metodologías ágiles de desarrollo de software?. Yo creo que las apoyaría, pero en definitiva me gustaría ver los resultados.

Friday, February 27, 2009

Aprendiendo algo nuevo

El pensamiento Lean aplicado a la construcción de software me parece, al menos en forma general, un gran hallazgo. El origen oriental del pensamiento Lean explica por qué éste está cruzado de conceptos orientales. Como el pensamiento lean es una gran idea, en lo que podríamos llamar la inducción apresurada por proximidad geográfica, mucha gente se apresura a abrazar con entusiasmo todos estos conceptos orientales.

Yo soy escéptico. En particular, me causa cierta desconfianza la idea de ShuHaRi. Rápidamente, esta es guía de adopción de los principios Lean a la que subyace una teoría del aprendizaje. Según sus proponentes, los pasos del aprendizaje son tres:

  • En el primero, se aceptan las reglas tal cual han sido formuladas y se aplican sin modificarlas.
  • En el segundo paso, se intenta romper las reglas, por medio de una reflexión crítica y la búsqueda de excepciones.
  • En el tercer paso, una suerte de iluminación, ya no se piensa en términos de reglas.
Esta idea del ShuHaRi es esgrimida con frecuencia por los evangelizadores de algunas metodologías ágiles que, sostienen, uno debe, en una primera aproximación, tomar la metodología tal cual ha sido propuesta sin cambiarle una coma, para, luego, al ir ganando conocimiento y confianza, poder adaptarla a las propias necesidades.

Yo encuentro unos cuantos problemas con la idea del ShuHaRi. El primero es que no me gusta (sí, es una cuestión de gustos) que me digan "suspendé un rato el pensamiento crítico y aceptá sin cuestionamientos, necesitamos que pospongas un rato tus ganas de evaluar críticamente". Me resulta difícil de explicar por qué no me gusta, pero diría que me siento víctima de un asalto conservador: me piden tiempo a ver si, a fuerza de mostrarme solo un marco, me acostumbro a pensar que ese es el único marco posible.

Otro problema que no puedo dejar de ver es que presupone que la evolución de la idea (en este caso, la evolución de la metodología) ha alcanzado algo así como la perfección o un grado muy parecido: "no la cuestiones porque sirve en casi todo y vas a tardar en darte cuenta en que no sirve". Acepto que el conocimiento es indispensable para que la crítica constituya un aporte útil y no la expresión de un barrabrava, pero para la crítica muchas veces sirve el conocimiento del contexto o del dominio de la idea: me considero capaz de hacer una crítica demoledora de la astrología sin saber como hacen los astrólogos sus cartas natales.

El argumento de "no podés criticar las metodologías ágiles si no las seguiste al pie de la letra un tiempo" me recuerda a los astrólogos. Y no me predispone de muy buena manera, la verdad.

También pienso que la idea es una sobresimplificación: la pregunta sobre como aprendemos dista de ser una cuestión cerrada y todo apunta a que es bastante más complejo que lo que el ShuHaRi propone.

Lo que sabemos hoy del proceso de aprendizaje tampoco es demasiado. Este hecho me hace escéptico ante los métodos de enseñanza que sostienen estar basados en evidencia científica dura o que tienen pretensión de infalibilidad o superioridad frente al resto. Dentro de ese grupo no puedo dejar de ubicar a el ShuHaRi.

Sabemos, sí, que el proceso de aprendizaje no depende únicamente de la experiencia. La experiencia se elabora en procesos mentales que permiten desarrollar conexiones entre conceptos. Sabemos además que hay estilos de aprendizaje y que estos varían entre las personas.

Este trabajo desarrolla una escala para clasificar los estilos de aprendizaje en una única dimensión de intuición-análisis en los extremos. Hay unos cuantos problemas con esto (una única dimensión parece una sobre simplificación, se equipara el estilo analítico con el hemisferio derecho y el intuitivo con el izquierdo, o al revés, y aunque se aclara que eso es una "metáfora útil", se alimenta uno de los mitos más tontos que circulan por ahí), pero al menos apunta en una dirección clara: los estilos de aprendizaje varían. De acuerdo a Allinson y Hayes, el estilo de aprendizaje intuitivo se maneja mejor con enfoques globales y el analítico ve los detalles.

Por otra parte, parece ser que ciertas variaciones en el estilo de aprendizaje varían con cierta correlación con el background cultural. Incluso hasta los sesgos de percepción podrían variar con el background cultural ( cuidado! El estudio no dice nada sobre el orden causal )

El mundo está lleno de personas que sostienen que han sido capaces de entender como entendemos y que, al desenredar el problema, pueden darnos métodos infalibles para aprender, o,por lo menos, que si sus métodos no son infalibles, al menos son consistentemente mejores que el resto. Esta gente va desde Rousseau hasta los que me mandan spam ofreciéndome clases de inglés que 'neurologicamente' me enseñará a hablar en pocos meses por un proceso de programación neuro-lingüistica.

Yo esperaría más prudencia a la hora de adoptar teorías sobre el aprendizaje que lleven a desarrollar estrategias de enseñanza y adopción de conceptos y metodologías. Creo que la prudencia está justificada.

Tuesday, January 20, 2009

CMMI y la agilidad: el largo y sinuoso camino a la paz

Ya había escrito sobre el asunto, basado en lo que SEI había publicado alguna vez. Hace unos meses, el SEI publicó un artículo mucho más extenso sobre la relación de CMMI y Ágil, analizando la historia de CMMI y del enfoque ágil, los problemas de comunicación entre ambas comunidades, y de la posibilidad de coexistencia.

En el enfrentamiento (si es que se puede usar esta palabra) entre ambos paradigmas, es el SEI el que, desde hace un tiempo, se ha encaminado a mostrar que la confrontación es, no solo innecesaria, sino que perjudicial.

Por su parte, la comunidad ágil, en tanto comunidad, no tiene una voz unificada: las reacciones que he escuchado incluyen la declamación de victoria (el SEI se rinde ante la victoria de la agilidad y no quiere perder su base de cliente), la indiferencia, o el acuerdo con la visión del SEI. Yo tiendo a compartir esta última opinión.

En este artículo, que no es una excusa para no leer el documento original, recorro los puntos que me parecen más interesantes. El documento se defiende de las acusaciones que relacionan CMMI con cascada, diciendo algo que es cierto: CMMI es básicamente un conjunto de objetivos, y las prácticas no son más que puntos de partida que sirvan para guiar al que adopte CMMI en la forma de lograr esos objetivos.

CMMI no es un estándar, lo que hace que esas prácticas no sean obligatorias. CMMI está injustamente asociado con el desarrollo en cascada: las prácticas y los objetivos no son procesos, nada específica que se deban ejecutar en un determinado momento del proyecto. El documento desliza críticas a sus propios appraisals por no tener en cuenta que CMMI no establece requerimientos, sino un marco para organizar el análisis y las acciones de mejora, diciendo textualmente que:

"However, for people and organizations that do not have the skills or experience to understand, interpret, and implement the practices and goals to their specific contexts, the informative material takes on the mantle of requirements. This situation is also true for appraisal teams and lead appraisers. Thus, the over-emphasis on specific model examples, typical work products, and subpractices often results in prescriptive processes with little gain in quality or organizational performance. "

Salvando el hecho de que a pocos puede culpar el SEI más que sí mismo de este problema (tal vez debe revisar a quienes le da patente de appraiser) la frase me parece gran resumen: el problema es que se toma el marco de CMMI, pensado para guiar y ayudar a pensar, analizar y actuar como requerimientos que toman la fuerza de mandamientos.

Yo veo un problema adicional, e iría más lejos: veo valor en CMMI, pero no veo valor en la certificación de CMMI. El hecho de que el mismo SEI cuestione a sus appraisals en un documento público no mejora mi apreciación de la certificación precisamente. Pero el problema, emho, no es este (que es coyuntural) sino otro (más bien estructural): yo en mis procesos de desarrollo hago unas cuantas cosas, que tienen que ver con algunas áreas de proceso de CMMI (como por ejemplo Verificación, Validación y hasta Análisis y Resolución de Decisiones), pero no me detengo a dejar 'rastro' (documentos formales) de estas actividades porque decido que no aportan valor. Eso provoca que un SCAMPI juzgue que mi proyecto no cumple con los objetivos de esas áreas de proceso. Me encuentro con un problema: si bien el proceso aporta valor, para llegar a la certificación tengo que perder valor.

Definitivamente, y dejando de lado cuestiones comerciales, la certificación no agrega valor.

Otro aspecto interesante del documento es su análisis histórico. Se hace una recorrida por la historia del desarrollo de CMMI, partiendo de los problemas del DoD y su necesidad de resolverlos. Admite que la asociación Cascada/CMM está justificada, ya que CMM se focalizaba en una serie de procesos y actividades que intentan obtener la descripción acabada de lo que hay que hacer antes de comenzar. Es una pena que no pueda ver de primera mano esto, ya que nunca leí nada de CMM de primera mano del SEI y han retirado la especificación, dejando solo información para la actualización de una a otra.

Menciona, además, algunas características del entorno que vio nacer a CMM: se trataba de un entorno donde lo que se buscaba era cubrirse, no buscar la mejor solución. Esto estaba generado por la naturaleza de entidad estatal del DoD y su necesidad de registración y transparencia para cualquiera que preguntara que se estaba haciendo con el dinero público, la forma de contratar y la naturaleza de los problemas que resolvían: software relacionado al control de aviones, misiles, instrumental médico y cosas por el estilo. Este último punto (negar la agilidad para desarrollos donde esté en juego la vida humana) es discutible, y no lo tengo claro: aplicaría un método ágil para construir el software de control de un misil?.

Como dice el artículo, lo que puede aportarle CMMI a un enfoque ágil son métodos y prácticas para apoyar y guiar la adopción de metodologías ágiles en una organización: básicamente, foco en la definición e integración de los equipos y el proceso. No es que no se pueda guiar la adopción de un enfoque ágil en una organización grande y compleja sin CMMI, pero CMMI ayuda a que los esfuerzos de adopción y expansión del enfoque ágil no queden en el folclore oral de la organización.

Asimismo, se reconocen algunos puntos que ningún agilista está dispuesto a negar: en necesario acordar una visión global de la arquitectura, a veces es necesario escribir documentación y, en definitiva, sin algo parecido a un proceso nos vamos al demonio.

Es muy interesante la comparación que se hace entre el paradigma ágil y CMMI en una serie de puntos. En particular, me interesaron dos puntos:
  • El primero, que tiene que ver con el foco en la organización: mientras CMMI se focaliza en la organización completa, el paradigma ágil se focaliza en cada proyecto y en el equipo. Creo que vale la pena recordar que la focalización en la organización puede llevarnos al peligro de querer optimizar el funcionamiento de la operación de la organización y no del proyecto, y esto es, definitivamente, un peligro. Trato de explicarme: puestos a mirar la organización como un todo, nos podríamos sentir tentados de reducir los tiempos muertos de un equipo de analistas, cuando en realidad, desde el punto de vista de un proyecto complejo y particularmente sensible, es conveniente asumir esos tiempos muertos. No veo mayor problema aquí siempre que se recuerde que, a veces es conveniente que el foco esté en el proyecto antes que en la organización.
  • El segundo, es el que tiene que ver con la confianza: el paradigma ágil requiere la confianza casi como un prerrequisito. Yo veo esto como una debilidad, porque a veces, hay que hacer cosas aún cuando no hay confianza entre las partes. Vamos, en algún momento se empieza y uno no confía la primera vez.
Y por último, lo mejor: el SEI me da la razón a mí (ja) en que la evidencia de que la agilidad funciona es, hoy por hoy, puramente anecdótica. Esto no implica que la agilidad no funcione, sino que es necesario un esfuerzo de formalización de los resultados.

Friday, January 2, 2009

Setenta balcones y ninguna estadística

Estoy deprimido. Me siento triste, desengañado, defraudado. Supongo que es lo lógico cuando uno se creía un tipo lindo, alto, atlético y carilindo y se encuentra con la imagen que el espejo devuelve. Pero, ahora que lo pienso, lo que me ocurre es peor: siento la desdicha de haberme sentido parte de un grupo (profesional, en este caso) superior a otro y comprobar con amargura que no es así.

Siempre creí que las ciencias blandas deberían copiar varias cosas de las ciencias 'duras' (me cuesta decir ciencias blandas y ciencias duras y no decir ciencias y pseudociencias o protociencias) y eliminar sus fallas más notorias: proposiciones no verificables, especulaciones que confunden plausibilidad con certeza, palabrerío confuso y poco definido, mucha hermenéutica y poca experimentación y cosas así. Y por supuesto, siempre creí que mi actividad en la informática me ponía más cerca de las ciencias duras (o ciencias, a secas, aunque yo sea un tecnólogo y no un científico).


Sigo convencido de lo que digo en la primera frase del párrafo de arriba, pero dudo mucho de la segunda, esa que me pone a mí del lado de los buenos.


Pienso que hay mucho valor en las metodologías ágiles. Pero últimamente he notado que nuestras discusiones tienden a parecerse a las discusiones de los ... ejem... científicos sociales: mucha elucubración sobre los resultados de determinadas prácticas, alguna que otra anécdota, pero ni una sola estadística.


Vi las encuestas de Scott Ambler. No están del todo mal, pero tienen unos cuantos problemas metodológicos que no permitirían considerarlas estudios concluyentes: el primero es que se anuncian desde su columna dedicada al desarrollo ágil o en las listas de desarrollo ágil (lo que habla de un sesgo en la elección de quienes responden).


Eso, sumado a que no se le pide a la gente que definan 'éxito', que expliquen la forma de medir la productividad ni la calidad, sumado al sesgo en la elección de quienes responden, no veo como se pueda pensar que se ha evitado razonablemente el sesgo de confirmación.


De hecho, la pregunta "como afectó la adopción de metodologías ágiles a la productividad/calidad/costos" deja mucho lugar para una variante del sesgo de autoservicio (perdón, no se me ocurre una traducción mejor) : las metodologías ágiles siempre pueden llevarse el crédito por lo bueno y ser inocentes por lo malo que puede ser atribuido a problemas del entorno. O incluso, podría ocurrir lo contrario, si los sentimientos de quien responden son negativos hacia el enfoque ágil. Creo que una mejor redacción sería "como resultó la productividad, medida en (X), de los grupos que aplicaban enfoques ágiles frente a los que no los aplicaban?" donde, por supuesto, hay que encontrar alguna manera cuantitativa de medir la (X).


Y por último, deja a librado al sano arbitrio de quienes responden decidir si están siguiendo prácticas ágiles. Resumiendo, la encuesta puede dar ideas intuitivas de hacia donde vamos, pero dista de ser concluyente. Y no encontré otra cosa.


Aún así, yo encuentro que en mis evaluaciones en abstracto y en las anécdotas que puedo recoger, las metodologías ágiles son un buen enfoque allí donde se pueden aplicar. El problema es que, pese a todo, no hay evidencia concluyente. O al menos, no la conozco. Si alguien la conoce, me alegraría el día.

Wednesday, November 19, 2008

Escuchábamos ayer

"If we have learned anything throughout this year we have learned that this financial crisis is unpredictable and difficult to counteract", dijo Paulson estos días (un diario argentino, conocido por su exquisita redacción, tituló "Paulson: lo que aprendí de crisis es que es impredecible")

"Hace un año pensábamos que teníamos precios de commodities altos por diez años más, incluso hubo casi una guerra civil para ver quien se quedaba con la renta extraordinaria y hoy aquí estamos, con precios bajos", dijo (esta la escuché de primera mano) Juan Gabardini ayer mismo en una presentación de SPIN, para introducir su charla sobre Scrum mencionando una característica importantísima de este framework para desarrollo: no intenta predecir el cambio, sino adaptarse a él.

(Nota al margen: sí, también estoy podrido de usar la palabra framework para todo, pero sería mucho más difícil escribir sin esos sustantivos que a fuerza de uso indiscriminado ya no significan nada pero nos permiten, a quienes no somos el genial Georgie, terminar una oración más o menos de acuerdo a las reglas del idioma)

En mi actividad, el desarrollo de software, conocí mucha gente que, como Paulson, insisten en que el problema no es con intentar predecir el futuro, sino con la situación particular que estamos tratando: oigan, el sistema funciona, que esta vez nos haya salido mal no dice nada del sistema, sino de nosotros. Que la tasa de fallos sea tan alta, es un detalle que conviene ignorar.

Me gusta de Scrum (y de XP, y del enfoque ágil en general) que acepta que el futuro no se puede predecir, que lo que deberíamos hacer es prepararnos para el cambio, no intentar anticiparlo. Para los programadores, que gustamos de programar de la forma más genérica posible para asegurar el uso de lo que estamos desarrollando en el futuro, es un gran golpe. Tan grande, de hecho, que uno de los mayores promotores de las metodologías ágiles que conozco defendía, al menos hasta hace un tiempo, el desarrollo de módulos independientes del motor de base de datos para asegurar la posible futura portabilidad entre bases de datos (estábamos hablando de un sistema enorme, hecho a medida para una gran empresa, que dificilmente pudiera ser migrado a otro motor de base de datos)

Puedo pensar en algunas limitaciones de Scrum (por ejemplo, cuando la necesidad de fijar variables financieras de antemano es superior a la necesidad de asegurar que todos los aspectos del producto generado sean útiles) y ciertamente me parece que temas como la practica de arquitecture envisioning y las iteraciones cero y menos uno son una buena extensión, ya que necesitamos estar de acuerdo en algunas cuestiones básicas de arquitectura antes de comenzar a desarrollar algo, particularmente cuando lo hacemos desde cero.

Tampoco soy un gran fan de la postura absolutista que suelen tener los iniciadores de algo que sostiene que si no se sigue al pie de la letra sus sabias enseñanzas, te apartás de la verdad y el camino y lo que ya no sos un verdadero feligrés. Puedo entender que no tiene sentido hablar de la adopción parcial de un estandar (cosa que el imperio del mal continuamente hace y hará, al menos, hasta que logre dominar por completo al comité de estándares ), pero no me cierra que Scrum (o cualquier otra cosa) haya alcanzado su forma perfecta, o al menos, su mejor forma posible. Se podría decir que comete el mismo error que Kuhn, que pretende que su paradigma de la inconmensurabilidad de los paradigmas no cae víctima de lo mismo que pregona, pero voy a resistir la tentación de hacer de epistemólogo en pantuflas por esta vez.

A pesar de lo anterior, me parece que el balance es positivo en favor de las metodologías ágiles: aceptamos que no sabemos exactamente qué necesitamos, aceptamos que no sabemos exactamente cuanto nos costará construirlo y no pretendemos sostener que sabemos. Ese es un gran paso.

De la presentación de Juan Gabardini, me quedó dando vuelta un frase: "el Scrum master es el responsable por el éxito del proyecto, sin embargo, no tiene poder de mando sobre el equipo". A mí este concepto me hace ruido: que la responsabilidad por el resultado debe ir acompañada por capacidad para decidir es un concepto arraigado en todos nosotros, no solo en lo que refiere a proyectos (por ejemplo, no condenamos a asesinos que no tuvieran, al momento de cometer su crimen, la capacidad para entender que estaban haciendo) y no estoy seguro de que sea un concepto que deba ser revisado.

La presentación siguiente fue la de Santiago Ceria, que comentó sobre sus particularizaciones a Scrum. En una charla muy interesante comentó la lista de sus pecados: suele hacer minutas de reunión y algunos documentos adicionales. Al fin y al cabo, Scrum no hace a los humanos diferentes a lo que son hoy y el donde dije digo digo diego no se va a ir con ninguna met... digo framework de trabajo: los humanos somos muy buenos para eludir responsabilidad (incluso sin mala intención) y no alcanza con proponernos cambiar para cambiar.

Me aventuro a conjeturar que, en la mayoría de los ámbitos, las prácticas de las metodologías no ágiles ( o menos ágiles ) que apuntan a dejar rastro de las decisiones de cada uno, no van a desaparecer.

Monday, November 3, 2008

No solo qué, sino también cómo

No soy un fan de la teoría del justo medio, esa teoría que dice que si una persona sostiene que dos más dos da cuatro y otra dice que dos más dos da cinco, entonces la respuesta correcta debería ser cuatro coma cinco.

Aún así, me gustan las columnas de Scott Ambler en la Dr. Dobbs y su continua prédica sobre el 'agil revisado', donde argumenta a favor de un proceso agil con algunas prácticas agregadas para disciplinar el proceso.


No estoy siempre de acuerdo con enfoque de 'agil disciplinado', pero me parece impecable el punto que hace sobre los requerimientos funcionales y los no funcionales. Recuerda Ambler que la comunidad ágil ha hecho un esfuerzo mucho mejor con los RF que los RNF: estos últimos siguen dependiendo, en gran medida, de que el programador sea lo suficientemente bueno y despierto como para tenerlos en cuentas y saber como tenerlos en cuenta y son dificilmente implementables con la misma estrategia que las historias del usuario.


El problema con los RNF es que, por lo general, no son autocontenidos, y la idea del backlog priorizado del que se seleccionan historias para implementar completas dentro de un sprint requiere un cierto grado de independencia entre éstas. Se dirá que los RF no son totalmente autocontenidos e independientes, pero podríamos decir, para ser más rigurosos, que el grado de dispersión (inventemos la definición: cuantos componentes involucra un requerimiento) de un RFN tiende a ser mayor que la de un RF. Los RFN tienen que ver con cuestiones de rendimiento, disponibilidad, usabilidad que involucran, normalmente, a la solución como un todo., mientras que los RF son más autocontenidos.

No me cuesta estar de acuerdo con que sabemos como manejar los RF mejor que los RNF, pero no diría que es un problema de la agilidad, a lo sumo es un problema que venía de antes y la agilidad no resuelve, como sí resuelve el problema que el enfoque tradicional tenía con los cambios en las definiciones. De hecho, me parece que la mejor solución para la implementación de los RNF vino con UP (un proceso con cierta agilidad), aunque ya la esbozaba aquel que vió en la oscuridad en su mítico libro sobre los sucesos primigeneos: la construcción de la linea base de arquitectura, el proceso de diseño de la arquitectura (alguna buena palabra para decir 'envisioning'? http://www.thefreedictionary.co /envision ) o se desee llamar a esa tarea.

Me gusta la visión de UP, que llama a esa tarea la construcción de la linea base, por sobre la idea de llamarla architecture envisioning. El concepto de linea base incluye una característica que, para mí, lo hace superior: la construcción de software además del modelado de la arquitectura, mientras que el architecture envisioning, si bien no niega la posibilidad de hacer de sotfware que en realidad ande, no la adopta como central. Pienso, como argumenté en artículos anteriores, que toda cuestión delicada que pueda ser sometida a una prueba empírica, debe pasar por ella: una linea base nos da una mejor idea de cuan buena en la arquitectura de las que nos pueden dar un par de modelos.


Los modelos tempranos (inevitables, por otra parte) son promesas, más útiles para hacer una primera revisión crítica de las ideas que para representar las ideas en su forma final. Deberíamos tratar de validar esas promesas antes de construir demasiado sobre ellas.


Por cierto, y como nota Ambler, el asunto no se acaba ahí. La línea base de arquitectura da un excelente marco para que los desarrolladores entiendan las restricciones y los requerimientos no funcionales, así como la estrategia de resolución que se les dará en la solución que está siendo implementada.


La educación de los desarrolladores debe ser también parte de la solución. No soy un fan de los cursos de siete horas al día donde comemos mediaslunas en los breaks, pero me gustan las soluciones de elearning y me gusta esa habilidad que he visto en algunos arquitectos, líderes o gerentes de proyectos de motivar a su equipo a aprender.


Y por último, Ambler propone algo que me gustaría tener: un equipo de test independiente que pruebe todas las releases. Cuando he trabajado con un equipo de test independiente, este ha sido más un equipo de certificación que de prueba de software. El concepto era que el software debía llegar al equipo de testing sin errores, para que ellos certificaran que así fuera. Siempre pensé que un equipo de testing independiente del equipo de desarrollo pero integrado al proyecto, con la misión de encontrar los bugs y no de certificar su inexistencia, podía llegar a aumentar la velocidad de liberación y la calidad. Hasta ahora, parece que me quedará con las ganas de probar empiricamente si tengo razón.


Como quiero yo, un desarrollador, que funcione el equipo de test?. Tal vez sea un buen tema para otro post.

Tuesday, August 26, 2008

Escolástica y Positivismo

A veces me sorprendo a mí mismo pensando que la evolución, tal como ha sido descripta por el genial Charles Darwin (y ampliada o explicada a la luz de la genética por el neodarwinismo), explica todo. Es decir, explica el funcionamiento de nuestro cerebro, explica la tendencia a la xenofobia, nuestra irracionalidad, y además nuestras cosas buenas, como el amor a nuestras crías.

Incluso más, como propone Stanislav Lem en 'Invencible', creo posible ámbitos de evolución no biológica: el capitalismo de mercado sobrevivió porque es el sistema mejor adaptado a la forma de ser de nosotros los humanos ( lo que no quiere decir que nos tengamos que quedar con su forma actual ), las ideas sobreviven por su adecuación a nuestra idiosincracia, y así unas cuantas cosas. Bueno, también lo propuso, creo que después, Richard Dawkins con sus memes

El mismo fenómeno de evolución se da con el software. El software que detestamos, ese que legamos y que queremos tirar, ha estado sobreviviendo al medio durante mucho tiempo. Eso no quiere decir que sea perfecto, la evolución no encuentra la mejor solución: encuentra una solución que permita que el organismo viva. Y eso ha hecho, ha sobrevivido. Con sus problemas, claro: no sabemos si un determinado código anda de casualidad o no, no nos animamos a tocarlo, es poco claro, si se hubiese pensado de una para el uso actual sería más claro, la tecnología es vieja, y unas cuantas cosas más. Pero aquí esta, y eso es una señal de que tiene algo de conocimiento valioso.

Por eso me irrito cuando se empieza un proyecto de reingeniería y todo el mundo está convencido que el nuevo software será mejor que el anterior, simplemente porque el anterior era una bosta. El anterior vivió muchos años, sobrevivió y se adaptó: el que no hicimos, todavía no demostró tanto mérito y no va ser fácil prepararlo para que lo haga, o, al menos, no lo haremos sin esfuerzo simplemente porque somos más vivos que los anteriores.

Por supuesto que parte de nuestros problemas para hacer algo bueno tiene que ver con las imperfecciones adaptativas del sistema anterior (que si no las tuviera, no lo estaríamos cambiando): no hay documentación, la tecnología es vieja y el código es poco claro, incluso subóptimo (a veces no es subóptimo, nos parece subóptimo porque lo evaluamos con poca información)

Y acá llegamos al punto donde quería llegar: la documentación. Estos sistemas legados no tienen documentación, o si la tienen, no podemos confiar en ella porque está desactualizada. Este es el estado general de las cosas, y creo que vale la pena preguntarse por qué con inexorable fatalidad la documentación falta o está desactualizada. Voy a hipotetizar algunos puntos:

  • La documentación se desactualiza porque no se percibe como útil. Y no se percibe como útil porque muchas veces no lo es: antes de documentar algo deberíamos preguntarnos si es más fácil leer la documentación que el código (he visto 'documentación' que ha sido el mismo programa hecho en pseudocódigo).
  • Aún cuando la documentación no esté desactualizada, siempre nos inunda la sospecha sobre su pertinencia al estado actual del sistema. Esto es, en parte, porque sabemos que la documentación tiende a desactualizarse, pero hay una causa subyacente ahí: cuando leemos documentación no tenemos más que el auxilio de la fe. Es decir, creemos que la documentación está actualizada porque alguien nos los aseguró, no porque podamos comprobarlo.

Diría que la misma presión del entorno que ha moldeado el sistema a su forma actual ha presionado para que la documentación se abandone. Bueno, y entonces qué? dejamos que el código se comente solo?. Yo creo que tenemos que adoptar una solución basada en criterios robados: es mejor almacenar experimentos que descripción de los resultados del experimento. Los físicos no lo pueden hacer: por ejemplo, el CERN no puede dejarnos jugar con su LHC un rato para ver lo que finalmente salga, pero nosotros tenemos una ventaja: podemos empaquetar el software junto con los experimentos que permitan ver si el mismo anda: test unitarios (como junit, nunit) y de regresión (como jmeter, selenium).

En mi opinión, los scripts de test son la única documentación que podremos utilizar sin temor a que esté desactualizada: el test se puede someter a prueba, se puede ejecutar, sirve para experimentar, mientras que la documentación se queda horriblemente corta al respecto. Incluso, me siento cómodo aplicando esta idea al desarrollo de requerimientos cuando lo que tenemos es un software que reconstruir: más que producir modelos en papel, preferiría producir scripts de test.

Lo anterior no es ni más ni menos que otro triunfo de la experimentación y el positivismo sobre la visión escolástica.

Thursday, July 24, 2008

Llave en mano

Al menos en mi experiencia y entorno, los proyectos llave en mano son comunes. Me refiero por proyectos llave en mano a esos donde se compromete un precio y calendario con el cliente, y luego de ganar algo así como una compulsa de precios, comienza el desarrollo del software.

Estimar correctamente es un punto clave en este tipo de proyectos: una mala estimación hace perder dinero, tiempo, enojar al cliente por problemas de calendario y todo eso lleva a una caída en la calidad que aumenta los costos y hace enojar aún más al cliente.


Scott Ambler tiene una
opinión bastante clara y razonada sobre los proyectos llave en mano. Ambler dice cosas ciertas: este tipo de proyectos te lleva a escribir todos los requerimientos de entrada, a pensar un diseño y una arquitectura y a implementar un mecanismo bastante restrictivo de gestión del cambio. Todo eso herético desde el punto de vista del desarrollo ágil. Yendo un poco más allá de mi último comentario, algo improcedente y sarcástico, se puede argumentar con razonable facilidad que intentar elucidar todos los requerimientos y pensar una arquitectura de un software que no existe antes de hacer siquiera una parte es una estrategia que traerá problemas, más temprano que tarde.

Por otra parte, no es un secreto que las estimaciones hechas a priori suelen diferir bastante del esfuerzo finalmente necesario.

Por eso, puedo estar de acuerdo con que la idea del proyecto cerrado es una idea perniciosa (puedo pensar en más de un ejemplo donde todos pierden: el cliente queda disconforme y el proveedor gastó más de lo que había proyectado).

Mirando desde el otro lado, si pensamos como el cliente, no es difícil entender por qué se desea saber por adelantado cuanto va a salir la joda: vamos, quien contrataría a un arquitecto (de casas y edificios) que dijera 'bueno, a medida que me vas pidiendo que construya algo en la casa, que agregue algo, te voy diciendo el precio'?. No vale argumentar que una casa es diferente al software, estoy hablando de dinero, que es bastante parecido en todos los ámbitos: quien se embarcaría en un proyecto sin tener idea de cuanto saldría y sin tener al menos la expectativa de tener dinero suficiente para no ahogarse a la mitad del río?. Yo no.


Aunque, como comenta Ambler, los proyectos cerrados puedan ser caros para el cliente porque el proveedor no tiene más remedio que cotizarle el riesgo e implementar algún mecanismo de control de cambio (efectivamente, como él dice, son mecanismos que tratan de impedir el cambio y no controlarlo). Más aún, con un mecanismo eficaz para impedir el cambio es altamente probable que el sistema construido diverja de las necesidades del usuario. Pero aún así, la previsibilidad financiera ( saber de antemano cuanto me va a costar) es terriblemente atractiva. Lo que se está pagando (lo que tanto cliente como proveedor están pagando), es la falta de información.

Se podría contra-argumentar que la idea de una metodología con foco en el control de cambios no es impedir el cambio, sino cobrarle al cliente por el mismo. No está mal, en definitiva, y eso nos acercaría a una estrategia ágil, donde ante cada cambio cobraríamos el diferencial de implementarlo ( costo de implementar lo nuevo menos el costo de no implementar lo que ya es necesario y no está implementado), lo que, incluso, penalizaría el cambio en etapas tardías del proyecto. Estaría incluso mejor si pudiéramos definir claramente, y por adelantado, qué es un cambio: no se puede cambiar lo que no se definió y el problema, muchas veces, no es que se haya definido un aspecto de un desarrollo en forma errónea, sino que no se lo ha definido de ninguna manera.


Claramente, necesitamos una solución. La solución ideal: que la industria se aleje de los proyectos cerrados, que el cliente nos contrate un equipo determinado por un tiempo pre-acordado y que adoptando el ciclo de vida de XP trabajemos haciendo lo que el cliente pide: pide más, hay más iteraciones. El problema es que parece demasiado bueno para nosotros, los informáticos, como para que se transforme en una práctica muy extendida.

A mitad de camino, tenemos la 'gestión de aplicaciones', o el servicio donde uno como proveedor implementa requerimiento a requerimiento. Es una buena idea, pero se necesita una confianza importante en la performance del equipo del proveedor. No es algo que un cliente le contrataría a un proveedor que recién conoce, me parece. Tampoco es, entiendo, demasiado común para desarrollos desde cero, sino que se adapta mejor a mantenimientos evolutivos y correctivos, donde, en definitiva, es más fácil estimar el esfuerzo de cada modificación.


Yo me imagino que la solución debería venir por alguna forma estándar en la industria de medir la performance de los grupos de trabajo en algo así como unidades estándares de software (que no sean lineas de código, por supuesto) producidas por unidad de tiempo. Volviendo al ejemplo del arquitecto ágil (el de casas y edificios) citado más arriba, creo que tal vez lo contrataríamos si pudiéramos acordar entre ambos, antes de comenzar el proyecto, una forma transparente de estimar los costos: nos aseguraremos que el arquitecto no se va a aprovechar de nuestra situación cuando sea muy caro abandonar el proyecto o cambiar de caballo. Que forma tendrían esas 'unidades estándares de software' (no de trabajo, sino de software)? Ni idea.