Medida de confianza

Al pensar en general sobre la creación de soluciones de negocio basadas en software, y al pensar en particular en el desarrollo adaptativo de dichas soluciones, busco maneras para construir confianza en clientes y usuarios; confianza en que la solución tecnológica entregará valor de negocio.

Al estar inmersos en una sociedad cuyo funcionamiento depende, en cada vez mayor medida, del software, es decir al nosotros mismos ser creadores y consumidores de software, necesitamos mejores niveles de confianza en dicho software. Y requerimos tal confianza en muchos niveles y ámbitos de influencia. Por ejemplo, los directores de la Agencia Espacial Europea seguramente quisieron un mayor grado de confianza en su software después de la explosión del Ariane 5 (causada por un error de diseño de software). De la misma manera, yo quiero un mayor grado de confianza en el servicio WCF que ahora estoy diseñando y programando, el cual será desplegado a escala empresarial y será invocado por docenas de aplicaciones empresariales.

¿Cómo sé que no estoy engañándome, y a mi equipo de proyecto, al creer que mi estimación de esfuerzo es correcta?

¿Cómo sé que no estoy engañándome, y a mi equipo de proyecto, al creer que mi servicio WCF está listo para ser desplegado?

Para obtener mejores grados de confianza, por supuesto, el primer paso es, como dijo Richard P. Feynman en lo que se refiere a un rasgo del pensamiento científico, no te engañes, ni a tu equipo, ni a tu cliente. Los métodos de las ciencias conllevan mecanismos para no engañarnos a nosotros mismos; dichos mecanismos provienen de mezclas adecuadas y útiles de las diferentes escuelas de pensamiento conocidas como racionalismo, empirismo y escepticismo.

Justo ahora, por ejemplo, un número cada vez mayor de exitosas pruebas automatizadas ejecutadas por demanda o en cada registro de código (check-in) de mi servicio WCF abona para un grado incremental de confianza. Pero esas pruebas sólo son un ejemplo. También ocurren por demanda varios ciclos de retroalimentación a partir del consumo del servicio WCF por parte de varias aplicaciones cliente. Además, la retroalimentación de los usuarios de dichas aplicaciones nos ayuda a no engañarnos a nosotros mismos al decir “creemos que estamos en la dirección correcta” o “queremos creer...”. Si tenemos o no tal creencia no es lo importante, lo que sí es relevante lo que podemos comprobar con base en una variedad de tipos de evidencia. Tipos de evidencia que sean diversos, amplios y no triviales.

¿Debo confiar que mi hija adolescente hará sus deberes? ¿Hay alguna prueba o patrón de comportamiento para justificar tal confianza? Las palabras en sí mismas no son evidencia. Por lo que no es una cuestión de confianza sino, en última instancia, una cuestión de evidencia.

Una evidencia plausible para justificar la confianza es el registro histórico de la entrega de buen software, a tiempo y dentro del presupuesto, por parte de algún grupo de proyecto en particular. Los planes y las buenas intenciones no son una evidencia en sí mismos.

Por tanto, una medida de confianza en X estará basada en medidas de evidencia real de X —para cualquier valor relevante de X.

Si sólo hay palabras, planes y buenas intenciones sin un registro histórico que respalden dichas palabras, planes y buenas intenciones entonces hay poca confianza por medir. En ese caso, una acción plausible es empezar a construir ese registro histórico para el grupo de proyecto en particular.