miércoles, 6 de enero de 2016

100 días en Agile (I)


De Waterfall a Agile
     En la entidad financiera que en estos momentos dispone de mis servicios, estamos en un proceso de transformación de metodología de trabajo, para la construcción de software. Estamos cambiando de "Waterfall" (sigo sin entender el por qué de este nombre) a Agile con SAFe y Scrum. Ahí es ná...
     No quiero entrar en cual es mejor o peor, cada una es aplicable en un momento y proyecto determinados, sólo voy a decir que son diametralmente opuestas en cuanto a filosofía y cultura en la forma de trabajar.

    Nuestro (iba a poner mi, pero ya entenderéis por que no) equipo Scrum lleva alrededor de 100 días trabajando en Agile-Scrum, adaptándonos a y aprendiendo este nuevo estilo de trabajo. Algo más si contamos el primer mes y medio de arranque en el que "hicimos Agile". Y creo que, igual que a los gobiernos, es el momento de hacer un pequeño balance y sacar algunas conclusiones.

¿Qué me está pareciendo Agile?
     En 2 palabras: me entusiasma.
     Sin dejar de tener claro que no deja de ser una metodología más, con sus pros y contras, para alguien que se ha pasado casi 20 años haciendo proyectos de software con un método y formas de trabajar que sabes que no funcionan bien y que tiene deficiencias, y que ya sea por desidia, desconocimiento, impedimentos, o cualquier otro motivo, tienes que seguir aplicando una y otra vez, intentando no repetir los mismos errores, o al menos que sean diferentes en cada proyecto, supone una corriente de aire fresco muy muy esperada y necesitada.
     ¿Es la panacea? ¿Idílica? ¿Utópica? No, por supuesto. Si fuera perfecta, sería aburrida. Pero es intensa, exigente, orientada al cliente, y comprometedora. Cuando se aplica tal y como está definida, sin hacer híbridos que nos llevarán a la frustración, da grandes resultados.

100 días
     No es nada fácil hacer Agile. Cuanto más voy conociendo de esta metodología, más claro lo tengo. Sobre todo por el cambio cultural tan brutal que implica, y ahora empiezo a entender porque puede costar años su aplicación completa en una gran empresa.
     ¿Cuales son los pilares de Agile? Desde mi corta experiencia son 4:
  • Autogestión
  • Responsabilidad
  • Cooperación
  • Confianza
      La importancia de todas ellas es la misma. Alguno dirá "Pues vaya, como en cualquier trabajo en equipo". Si, pero no. Puedes trabajar con el sistema actual o cualquier otro sistema basado en Cadenas de Mando, pero si quieres hacer Agile en tu empresa, ve concienciándote que sin estas 4 palabras, vas a fracasar.

     En una de las daily uno de los desarrolladores hizo este comentario: "A ver no me volváis loco, que si tengo que hacer todo eso a la vez no termino ninguna", y me di cuenta de algo muy importante, nos hemos habituado a esperar a que alguien nos mande. Estamos acostumbrados a trabajar en una cultura de Cadena de Mando, donde el escalón superior va ordenando al siguiente qué debe hacer, e incluso quién y/o cómo debe hacerlo, dando un margen de libertad de decisión al siguiente escalón, más o menos amplio.
     Agile nos pide una Cadena de Responsabilidades, parece igual pero no es lo mismo. La relación entre los diferentes niveles es de Confianza en la Autogestión del trabajo que se es Responsable, y todos juntos Cooperando conseguirán el objetivo común: construir el Producto final con la mayor calidad. El éxito o el fracaso, es Responsabilidad de todos.
     ¿Qué bonito verdad? ¿Quién no está pensando en una comuna hippie? 

     Volviendo a nuestro desarrollador. Queremos que él mismo se gestione su trabajo. Hay una serie de tareas que realizar durante el Sprint, tú decides sobre cual vas a trabajar, tratando de seguir las prioridades establecidas, y cuando la acabes coges otra.  Es decir, le estábamos pidiendo que se responsabilizara de gestionar su tiempo, se autogestionara.
     Esto mismo se va llevando a cada nivel:
  • El equipo Scrum es responsable de cumplir con los objetivos a los que se ha comprometido en la planificación del Sprint: se realizó siguiendo las prioridades marcadas por el PO, y negociando con él qué se podía incluir y finalizar en el Spint.
  • El Scrum Master (SM) es responsable de facilitar las sesiones de Scrum (dayli, planificaciones, retrospectiva, ...), ayudar a quitar los impedimentos que encuentre el equipo Scrum, y guiar al equipo hacia la autogestión.
  • El PO es responsable de conocer perfectamente el Producto a construir, de negociar con los Stakeholder las prioridades del Producto, de explicar al equipo Scrum el Producto a construir, que el Backlog de Producto esté priorizado y bien definido, de colaborar con el equipo Scrum para planificar, revisar y detallar cada Sprint de forma que lo construido aporte valor al Producto final.
     Cada uno es responsable de su parte y de cooperar con el resto del equipo de proyecto (PO, SM, equipo Scrum) para lograr el objetivo común de construir el Producto esperado por el Stakeholder.

     Y esto sólo funcionará si cada uno de los componentes confía en los demás.
     Nadie "ordena" que hay que hacer, se establecen necesidades y prioridades.
     Cada uno se responsabiliza de su trabajo y entre todos se controla que se está haciendo.
     No hay una figura que marque ni un cuánto ni un cuándo, se negocia y colabora para hacer lo máximo en cada Sprint.

     Se me ha hecho largo, seguiré otro día. Ahí os dejo la semilla del cambio cultural propuesto por Agile...

lunes, 4 de enero de 2010

Opinion: Facebook y la confidencialidad

    ¿Que podría provocar una verdadera caída de las Redes Sociales (facebook, tuenti, twitter, ...) en la nueva Web 2.0? Alguno podría pensar que son una moda pasajera, otros que tocarán techo, otros que serán el aburrimiento y la desidia. Para mí será la falta de confidencialidad, la falta de privacidad de la información que la gente comparte. Esta reflexión viene provocada por varios artículos sobre Facebook que he leído, en los que se habla de la bajada en el número de nuevos usuarios, del tiempo de conexión, y de una nueva "ola" entre los usuarios que se está llamando unfriends, que consiste en eliminar de nuestra lista de "amigos" a aquellos que agregamos y que ahora resulta que no nos aportan nada, porque son aunténticos desconocidos.

    Quitando el hecho de que es obvio que no te va a aportar nada añadir como amigo a tu facebook a un tipejo o tipeja que vive a 15.000kms de ti, que no has visto en tu vida, que no has hablado con él, y que ya puede ser un psicópata o la más bella persona del mundo, que tú no tienes ni zorra; ¿cual es el verdadero peligro de añadirlo? ¿cual es el verdadero problema de darle acceso a tus datos? Porque eso es justamente lo que hacemos cuando añadimos a alguien a nuestra lista de amigos en el facebook: darle acceso a nuestros datos, privados o públicos, serios o de broma, a todos ellos.
    Veamos que ocurre cuando nos creamos una cuenta en facebook, en cuanto a privacidad. Por defecto Facebook nos pone en todas las opciones "Solo mis amigos", excepto en quien puede enviarme solicitudes de amistad que pone "Amigos de mis amigos". Hasta aquí todo bien podríamos pensar, nadie puede vernos a no ser que le invitemos a ser nuestro amigo, de hecho nadie puede siquiera encontrarnos por medio de las búsquedas, ya que en este momento no tenemos ni un sólo amigo en nuestra lista. Así que de momento estamos "seguros de nuestra privacidad".
    Iniciamos la ronda de invitaciones a todos nuestros colegas que nos han estado incordiando para que nos apuntemos a Facebook: "Weeee ya tengo facebook", "Holaaaaa", "Añádeme anda". Luego una vez que nos han aceptado, comenzamos la segunda fase invitando a amigos suyos que conocemos, y recibiendo solicitudes de amigos suyos que nos conocen. Quiero aclarar que "amigo" aquí es cualquiera que esté la lista de amigos, sea familiar, colega, compañero de curro, amigo, etc... Hasta aquí todo normal, y seguimos estando "seguros de nuestra privacidad". En la tercera fase, nos empezamos a meter en los jueguecitos esos tan chorras y divertidos que tiene el facebook, en los que están algunos amigos nuestros y que total, tampoco nos toman mucho tiempo. Nos apuntamos a grupos que nos parecen graciosos "Soy un cabrón, lo sé y estoy orgulloso", "Fans de Peter Griffin", "Yo también me rasco los huevos disimulando, pero se me nota", etc, etc, etc... Incluso a alguno serio "Contra el maltrato de los animales", "Contra la pedofilia", "Desarrolladores de páginas web".  Aquí tenemos nuestros agujeros en la privacidad.
    Empecemos por los "jueguecitos" y "aplicaciones" del facebook. Dentro de la configuración de privacidad, hay un apartado de Aplicaciones y sitios web, en el que tenemos un motón de opciones que vienen marcadas por defecto al crear nuestra cuenta. ¿Que significa tener marcados todos esos cuadraditos tan monos? Cada cuadradito marcado hace que las aplicaciones y juegos del facebook tengan acceso a esa información a través de tus amigos de facebook. Es decir, si yo tengo marcada la opción Información personal, hago el test "¿Cuanto sabes de Perico el de los Palotes?", y otro amigo mío también lo hace porque lo vé en mi muro y le parece divertido, a partir de ese momento ocurren dos cosas: por hacerlo yo ese test tiene acceso a la información de todos mis amigos que también tengan marcado Información personal, y por haberlo hecho mi amigo tiene acceso a mi información personal. ¡Que guay! Pensar ahora en todos los test moñas que habéis hecho, los juegos a los que estáis jugando, las tontás esas de "¡Envíame una cerveza/regalo/rosas/mierdas pinchas en un palo!". Pues a todos esos de una forma indirecta les habéis dado acceso a los datos de vuestros amigos, y vuestros amigos a los vuestros.
    Sigamos ahora con los grupos. Cuando te unes, o te haces fan o te haces admirador de un grupo en realidad lo estás añadiendo como amigo tuyo. El grupo en sí no es un usuario de facebook, por lo tanto en principio no debemos tener miedo de que "vea" nuestros datos, perooooo ¿es así en realidad? Sé que ahora cuando os cuente porqué tenemos otro roto en nuestra privacidad, pueda parecer rebuscado, y que alguno pensará 'paranoico de los huevos', o que 'eso no es posible', pero si tenéis un informático a mano (uno de verdad, no el que sabe instalar el windows y el office, y ya está. Ese no vale) preguntarle, y si sois capaces de traducir toda la verborrea técnica que soltará, llegaréis a la conclusión de que no es tan difícil. Bien vamos al lío. El verdadero peligro de unirse a un grupo es que se puede construir un programa que, por medio de la autorización que el grupo tiene, lea los datos disponibles de todos usuarios del facebook que forman parte de él. Recordar que el Grupo es como uno de tus amigos, y por lo tanto puede "ver" la información que tengas marcada como "Solo mis amigos"; así que con el programa adecuado podría leer todos tus datos en cuestión de segundos, almacenarla en una base de datos, y luego usarla para lo que me venga en gana: venderla a empresas para publicidad, para estudios de mercado, para saber las preferencias de la gente, para enviarte spam a tu correo electrónico... Entendéis ahora porque muchos grupos una de las primeras cosas que ponen es "Invita al menos a XX de tus amigos".
     Gracias a estos fallos en la privacidad, ya se está empezando a producir phising y spam en facebook. La forma más fácil de saber todo de tí, poder enviarte ofertas acorde a tus gustos, creencias, actividades, ideología,..., y todo clase de trucos publicitarios para captar clientes.Ya hay empresas que antes de contratar a alguien "investigan" en facebook tus datos, o le preguntan a "alguien" que los haya recopilado; y en base a ellos deciden si te contratan o no.
    Por último, hacer una mención especial, aunque algo corta, al tema de las fotos. Evitar dentro de lo posible ser etiquetados en las fotos, en cuanto os avise de que os han etiquetado en una, comprobar inmediatamente si puede verse o no esa foto, y eliminar el etiquetado. Y siempre que creéis un nuevo álbum, aseguraos de establecer el nivel de privacidad que queréis, ya que por defecto se crean con "Todos"; y eso puede ser muy peligroso...


    Sin embargo, no tenemos que echarnos las manos a la cabeza y dejarnos llevar por la histeria o la paranoia. Para el spam, envío masivo de mensajes publicitarios, facebook ya dispone de un sistema de detección que hace que si un usuario envía demasiados mensajes privados o invitaciones masivas, te marcará como spammer y puede bloquearte la cuenta. De hecho, en el inicio del facebook los juegos tenían en sus foros listas de usuarios que ponían su correo, y con un cortar y pegar enviabas una invitación a todos a la vez; ahora tienes que hacerlo uno a uno si no quieres que te bloqueen.
    Para la intromisión en nuestros datos personales, con crear un par de listas de amigos y algunos arrreglillos en la configuración de la privacidad, podemos subsanar ese agujero en la seguridad y estar tranquilos de que nuestros datos no son usados por nadie que no queramos nosotros.

viernes, 11 de diciembre de 2009

Opinión: Software Libre

    Hace poco tuve una discusión sobre el Software Libre, y la posible repercusión de éste en el desarrollo de software. A raíz de ello me puse a leer sobre el tema, y finalmente he podido hacerme una idea bastante buena (o eso creo). Debo reconocer que yo no era muy partidario que digamos del software libre, debido principalmente a un error de concepto. Esto ha dejado de ser así, no me he convertido en un defensor a ultranza que se desgarre las vestiduras por el software libre, pero si que estoy de acuerdo con sus principios,y con la filosofía que busca; que ya os anticipo que no tiene nada que ver con la palabra "gratis". Comencemos...

    Lo primero es definir que es Software Libre. Debe tenerse claro que «software libre» es una cuestión de libertad, no de precio; debemos pensar en la acepción de libre como en «libertad de expresión» y no como en «barra libre de cerveza». Con software libre nos referimos a la libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software. Nos referimos especialmente a cuatro clases de libertad para los usuarios de software:

  • Libertad 0: la libertad para ejecutar el programa sea cual sea nuestro propósito.
  • Libertad 1: la libertad para estudiar el funcionamiento del programa y adaptarlo a tus necesidades. El acceso al código fuente es condición indispensable para esto.
  • Libertad 2: la libertad para redistribuir copias y ayudar así a tu vecino.
  • Libertad 3: la libertad para mejorar el programa y luego publicarlo para el bien de toda la comunidad. El acceso al código fuente es condición indispensable para esto.
    Software libre es cualquier programa cuyos usuarios gocen de estas libertades. De modo que deberíasser libre de redistribuir copias con o sin modificaciones, de forma gratuita o cobrando por su distribución, a cualquiera y en cualquier lugar Gozar de esta libertad significa, entre otras cosas, no tener que pedir permiso ni pagar para ello.
    Asimismo, deberías ser libre para introducir modificaciones y utilizarlas de forma privada, ya sea en tu trabajo o en tu tiempo libre, sin siquiera tener que mencionar su existencia. Si decidieras publicar estos cambios, no deberías estar obligado a notificárselo a ninguna persona ni de ninguna forma en particular.
    La libertad para utilizar un programa significa que cualquier individuo u organización podrán ejecutarlo desde cualquier sistema informático, con cualquier fin y sin la obligación de comunicárselo subsiguientemente ni al desarrollador ni a ninguna entidad en concreto.

    La libertad para redistribuir copias supone incluir las formas binarias o ejecutables del programa y el código fuente tanto de las versiones modificadas como de las originales; la distribución de programas en formato ejecutable es necesaria para su adecuada instalación en sistemas operativos libres. No pasa nada si no se puede producir una forma ejecutable o binaria (dado que no todos los lenguajes pueden soportarlo), pero todos debemos tener la libertad para redistribuir tales formas si se encuentra el modo de hacerlo.

    Para que las libertades 2 y 4 (la libertad para hacer cambios y para publicar las versiones mejoradas) adquieran significado, debemos disponer del código fuente del programa. Por consiguiente, la accesibilidad del código fuente es una condición necesaria para el software libre.

    Para materializar estas libertades, deberán ser irrevocables siempre que no cometamos ningún error; si el desarrollador del software pudiera revocar la licencia sin motivo, ese software dejaría de ser libre. Sin embargo, ciertas normas sobre la distribución de software libre son aceptadas siempre que no planteen un conflicto con las libertades centrales. Por ejemplo el copyleft, que es similar al copyrigth pero haciendo lo contrario, a grosso modo es la norma que establece que, al redistribuir el programa, no pueden añadirse restricciones que nieguen a los demás sus libertades centrales. Esta norma no viola dichas libertades, sino que las protege de aquellos que partiendo de software libre, decidieran crear software propietario.

    De modo que puedes pagar o no por obtener copias de software libre, pero independientemente de la manera en que las obtengas, siempre tendrás libertad para copiar, modificar e incluso vender estas copias. El software libre no significa que sea «no comercial». Cualquier programa libre estará disponible para su uso, desarrollo y distribución comercial. El desarrollo comercial del software libre ha dejado de ser excepcional y de hecho ese software libre comercial es muy importante.
    Las normas sobre el empaquetamiento de una versión modificada son perfectamente aceptables siempre que no restrinjan efectivamente tu libertad para publicar versiones modificadas. Por la misma razón, serán igualmente aceptables aquellas normas que establezcan que «si distribuyo el programa de esta forma, deberás distribuirlo de la misma manera». Se admite también la posibilidad de que una licencia exija enviar una copia modificada y distribuida de un programa a su desarrollador original. Por ejemplo para GNU, se utiliza el «copyleft» para proteger legalmente estas libertades. Pero también existe software libre sin copyleft. Es muy útil recurrir al copyleft, pero si un programa de software libre carece de él, todavía existirá la opción de seguir utilizándolo con tal.

    A veces la normativa gubernamental de control de las exportaciones y las sanciones comerciales pueden limitar la libertad para distribuir copias a nivel internacional. Los desarrolladores de software no tenemos el poder para eliminar o invalidar estas restricciones, pero lo que sí podemos y debemos hacer es negarse a imponer estas condiciones de uso al programa. De este modo, las restricciones no afectarán a las actividades y a los individuos fuera de la jurisdicción de estos gobiernos.

    Cuando hablamos de software libre, es preferible evitar expresiones como «regalar» o «gratis» porque entonces caeremos en el error de interpretarlo como una mera cuestión de precio y no de libertad. Términos de uso frecuente como el de «piratería» encarnan opiniones que no encajan y ni son compartidas por los promotores del software libre.

    Por último, señalar que los criterios descritos para definir el software libre requieren una profunda reflexión antes de interpretarlos. Para decidir si una licencia de software específica puede calificarse de licencia de software libre, se basan en dichos criterios y así determinan si se ajusta al espíritu y a la terminología precisa. Si una licencia incluye restricciones desmedidas, es rechazada aun cuando no estuvieran previstas esas cuestiones al establecer los criterios actuales. Se llega incluso en ocasiones a debatir el tema con un abogado, ya que ciertas condiciones en una licencia pueden plantear un problema que requiere un análisis más exhaustivo, antes de decidir si dichas condiciones son aceptables. Una vez que llegan a una solución sobre un problema nuevo, se actualizan los criterios para hacer más fácil la consideración de que licencias están cualificadas y cuáles no.

    En definitiva el Software Libre propone una visión más altruista y colaboradora, de los programadores hacia el resto de programadores y sobre todo de los usuarios. Y me parece una gran idea.


Free Software Foundation