MongoWeather

Hace unas entradas comenté que estaba realizando una prueba de concepto de BigData en la que lo que pretendía era probar las posibilidades del MapReduce.

Inicialmente lo empecé a implementar utilizando la herramienta Infinispan/JBoss Data Grid pero me he encontrado con bastantes dificultades, no tanto por el soporte de MapReduce, sino por la carencia de herramientas auxiliares que facilitaran el trabajo.

Es por ello que he decidido utilizar otra herramienta que me permite realizar el mismo tipo de pruebas pero sin requerir de tanto trabajo auxiliar.

Esta herramienta es MongoDB. Tiene una serie de ventajas sobre Infinispan para mis propositos:
– Me permite cargar los datos en la base de datos sin tener que realizar ningún tipo de desarrollo, utilizando la herramienta mongoimport.
– Me permite realizar los scripts en javascript de forma nativa, sin tener que realizar ningún tipo de desarrollo a medida

De esa forma me permite concentrarme en la parte de mapReduce que es la que más me interesa. De momento he conseguido con mucha menos dedicación de tiempo implementar lo que con Infinispan me ha costado bastante más.

El, de momento, poco código está aqui.

Cambiando tu organización (para peones)

El otro día encontré, en esa fuente inagotable de conocimiento que es el blog de Javier Garzás una entrada con la que me siento totalmente identificado.

Habla de una persona que entró en una empresa como programador y sus intentos de cambiarla de un modelo en cascada a un modelo ágil.

No tiene desperdicio y da recomendaciones que subscribo totalmente, sobre todo la primera parte en la que habla de lo difícil que es. De esto puedo dar fe, no ya para alguien que entra en la organización sin ese cometido, sino incluso cuando entras con el, como me ha pasado a mi.

Las resistencias puede llegar a ser Numantinas, incluso en sitios en los que los problemas son más que evidentes y de una magnitud muy considerable.

En resumen una lectura corta y muy recomendable para todo aquel que quiera cambiar la forma de trabajo de su organización, independientemente de que sea un peón o no.

Autogestión y planning poker

En la entrada anterior comentaba sobre los equipos autogestionados que propugna scrum y la dificultad de pasar de un equipo gestionado de forma tradicional a un equipo autogestionado.

Hay una forma que, aunque reconozco que nunca he tenido la oportunidad de poner en práctica, me parece muy indicada para conseguir que el equipo avance en la autogestión. Me refiero al Planning Poker.

El motivo es que el planning poker implica que todo el equipo debe estimar las tareas. Esto obliga a que cada integrante del equipo se implique y entienda cada tarea por lo menos de una forma básica. En el manifiesto de Extremme Programming Kent Beck comentaba que la mayor parte de los problemas en un proyecto provenían de alguien que no había contado algo a otro.

Con las técnicas de estimación tradicionales en las que el jefe estima, el equipo no va a poder desarrollar esa faceta, así que nunca va a aprender a tomar decisiones y luego apechugar con las consecuencias. Así que tendrá difícil poder autogestionarse algún día.

Otras veces en un movimiento hacia la autogestión cada integrante del equipo estima las tareas que va a realizar, con lo que se pierde la oportunidad de que el resto del equipo las interiorice, total no lo tengo que hacer yo así que desconecto y no presto atención.

No creo que el planning poker sea infalible, porque hay cierto tipo de personas que niegan la realidad y ellos siempre tienen razón y no se equivocan. Pero este tipo de gente es tóxica, así que mejor desprenderse de ella cuanto antes, y que el resto del equipo esté involucrado no es una mala forma de hacerlo.

¿Está tu equipo preparado para autogestionarse?

En scrum se propugnan los equipos autogestionados. Pero la pregunta es ¿Está tu equipo preparado para autogestionarse?

Aunque suene muy interesante la autogestión de un equipo hay ciertas dificultades para llevarlo a cabo. Normalmente los equipos, y consiguientemente los integrantes del equipo, están acostumbrados a tener un jefe que les indique lo que tienen que realizar.

Prescindir de esa figura que se encarga de gestionar el equipo puede ser traumático, por varios motivos.

Cuando los integrantes del equipo están acostumbrados a que alguien se encargue de la gestión, normalmente no se preocupan de como se gestiona, que cosas hay que tener en cuenta, que criterios hay que seguir para priorizar tareas, o para asignarlas, etc.

Así que se corre el riesgo de que cuando el equipo se autogestiona cometa muchos errores por inexperiencia.

Hay que tener en cuenta que aunque el equipo se autogestione eso no implica que todo el mundo se vuelva un experto en todas las materias. Hay que conocer los límites de cada uno y no decir o proponer cosas que luego se comprueben que no son adecuadas, ya que es contraproducente a nivel personal. Si en el equipo, por ejemplo, hay un experto en la funcionalidad del aplicativo, cuando se traten temas de funcionalidad hay que tener muy en cuenta su opinión.

La autogestión no significa tampoco la anarquía o el barra libre. Los acuerdos a los que se llegue dentro del equipo hay que respetarlos, independientemente de que nos parezcan adecuados o no. Los informáticos desgraciadamente somos muy dados a ir por libre, pero es completamente contraproducente, sobre todo porque si el equipo demuestra que no es capaz de autogestionarse, tarde o temprano les acabarán volviendo a poner a un gestor.

No sería el primer equipo que veo autogestionarse hacia el fracaso.

Retomando a lo grande

Después de un cierto tiempo sin cosas relevantes que contar, aunque por mucho que en algunos sitios de la red propongan escribir siempre algo, aunque sea repetido, a mi no me gusta.

Pero en los últimos días me he embarcado en una prueba de concepto de BigData.

La idea es poder procesar los datos de la estación meteorológica que tengo, pero con una solución basada en pequeños scripts del estilo de este

Estos scripts están implementados con JavaScript con la implementación de Java para dar la posibilidad de crear los programas sin necesidad de un compilador.

Para la solución de BigData uso Infinispan/DataGrid de JBoss ya que permite utilizar soluciones BigData sin necesidad de montar una gran infraestructura como con Hadoop. Por ejemplo permite utilizarlo en modo librería, sin instalar servidores.

El proyecto lo tengo albergado en GitHub en https://github.com/inigoserrano/BigWeather/

Tengo todos los ingredientes y esto no funciona…

Algunas veces me ha venido a la cabeza la imagen que Kent Beck describe en su libro sobre la programación Extrema.

Describe los elementos que propugna como un cuadro de mandos en el que pone todos los mandos al máximo y el sistema es estable. También explica como unos con otros se compensan para hacer que el sistema sea así de estable.

A veces me encuentro en sitios en los que pese a tener todos o muchas de las herramientas de hoy día las cosas no funcionan bien. Puedes instalarte en un periquete un git y tener control de versiones, un Jenkins y tener una integración continua, un sonar y tener un cuadro de mando de deuda técnica, etc, pero no hacer que el sistema funcione.

De hecho es complicado hacer que funcione, porque tener las herramientas no asegura que el equipo las use, y si no están configuradas con un planteamiento adecuado, es probable que no les sean útiles, con lo que se hundirán como un barco con una gran vía de agua. Y reflotar algo que se ha ido a pique es complicado.

Alguna reflexión ya he dejado previamente.

He terminado… Pues yo creo que no…

No recuerdo muy bien con quien tuve la siguiente conversación, casi literal :

– ¿Has terminado el programa?
– Si
– ¿Lo has probado todo bien?
– No, no he probado todavía
– Entonces no has terminado

A veces, sobre todo con los compañeros con menos experiencia, pasa que creen que terminar de programar es terminar el trabajo pero no es así, hay muchas cosas más a tener en cuenta para dar por terminado la tarea.

Aparte de las pruebas está la documentación, la deuda técnica, con sus pruebas unitarias, auditorias de código, etc

El problema es que si no se es riguroso con cuando se considera algo como terminado es que luego surjan sorpresas, porque alguien pensaba que la tarea estaba terminada cuando quedaban cosas por hacer y se tenga que dedicar tiempo imprevisto con los consiguientes retrasos.

Es por ello que es importante fijar bien los criterios dentro del equipo de trabajo, para evitar sorpresas.

Clean Code y las inercias

Como comenté en la anterior entrada estoy leyendo el libro Clean Code. Bueno realmente son dos, uno más técnico, más de código y otro, que todavía no he empezado, que parece más filosófico. No se porqué Amazon los ha juntado en un único libro, me parece un poco más incómodo.

Siempre me ha interesado el tema de la calidad en el código, tan ignorada hasta hace poco, así que este libro al principio no me aportaba mucho, porque expone conceptos que ya conozco, pero poco a poco va mejorando.

Me ha resultado especialmente interesante el capítulo sobre la documentación que estoy leyendo. A pesar de lo que pueda parecer de que va a proponer documentar todo, no lo hace. Propone que mejor que trabajar en explicar, es decir documentar, un código complejo o difícil de entender, lo que hay que hacer es trabajar en hacer que el código sea autoexplicativo.

Comparto con el autor el planteamiento de que hoy día los entornos de desarrollo permiten hacer tareas que antes no se podían. Me explico.

Antiguamente cuando se trabajaba con IDE que eran poco más que un editor de texto con resaltado no era posible hacer refactorización, es decir cambiar el código para que siga haciendo exactamente lo mismo, pero de forma más eficiente u ordenada. Tampoco se había generalizado el TDD, que te permite cambiar el código y ejecutar todas las pruebas para comprobar que funciona todo. Así que cuando conseguías hacer que tu código funcionase no tocabas ni una coma, que ya se sabe: «Si funciona no lo toques»

Tampoco estaba tan extendido el empleo de repositorios de código, con lo que volver a una versión anterior era más farragoso.

Pero a día de hoy todas estos temas están superados, el problema es que seguimos con muchas de las inercias de cuando había más limitaciones.

Me resulta parecido a utilizar Windows 8 que a pesar de su nueva interface la he seguido utilizando como las versiones anteriores…

Me parece muy recomendable para cualquier programador, sobre todo los más noveles, el leer el libro Clean Code

Reflexiones del BilboStack

Hace ya una semana que se celebró el BilboStack. Un acto realmente interesante, con algunas intervenciones incluso con gente en los pasillos.

Hubo una intervención que me gustó especialmente, y eso que fue un substituto de última hora. Fue sobre la deuda técnica que expuso Rodrigo Corral. No es que las otras intervenciones estuviesen mal, todo lo contrario, es que esta fue la que más me hizo reflexionar.

Nuestra profesión tiene un componente muy importante de sector servicios, es decir tenemos clientes que nos piden cosas y nosotros se las hacemos. No muy diferente de lo que puede ser, por ejemplo un pintor, al que si un cliente le pide que le pinte la casa de naranja, independientemente de sus gustos se la tiene que pintar de naranja.

El BDD y AngularJS están muy bien, pero al final, lo primordial es hacer un trabajo de calidad y para ello hay que involucrar también a los clientes. Si para tener poca deuda técnica hay que invertir un poco más al principio, salvo que el cliente lo entienda y asuma, no vas a tener muchas posibilidades de «tardar más» y hacerlo mejor.

En esta línea me pareció muy oportuna la pregunta que le hizo un antiguo compañero de trabajo, sobre como evangelizar sobre la deuda técnica.

Estoy leyendo un libro de Clean Code que recomendaron y una de las cosas que dice el autor y con razón es que a nadie se le ocurre decirle al cirujano antes de una operación que no hace falta lavarse para desinfectarse y que se meta al tema rápidamente, y eso que el paciente es el que paga la operación. Aparte de que el cirujano se negaría en redondo a hacerlo. Pero en este sector los técnicos no tenemos ese grado de autoridad.

Quizá a estas reuniones tendrían que asistir los clientes más que los técnicos.

Inquietudes en el desarrollo de software

Hace unos días Javier Garzás publicó una entrada en su blog sobre el probable futuro del desarrollo de software, que me parece muy interesante de leer. Y me parece muy interesante porque viene de alguien que tiene contactos con diferentes sitios, con lo que te da una visión más amplia que cuando estás enfrascado en tu negocio o cliente, con sus particularidades propias.

Yo añadiría otro futuro, que me inquieta, porque lo he vivido en el pasado. Me explico. Cuando yo empecé en el mundo del desarrollo lo que se llevaba era el hacer webs más bien publicitarios y comercios electrónicos.

Hoy día muy pocas empresas, por no decir casi ninguna se plantea el realizar su portal o su comercio electrónico totalmente a medida, básicamente porque hay multitud de paquetes para hacerlo. Tanto paquetes para construir portales o comercios electrónicos pequeños, como grandes.

Hoy día se ha pasado en estas áreas de desarrollar a parametrizar un paquete, con algún desarrollo para hacer alguna adaptación. Pero y ano existe el empezar, como dirían los escritores, con una hoja en blanco.

Para una persona que se dedica al desarrollo de software a medida, el paquetizado es una amenaza. Sobre todo porque el software a medida es muy caro y muchas veces de una calidad baja.