Arquitecto: la visión desde la atalaya

Una vez un jefazo que tuve comentó (no literalmente) en una reunión que un jefe de proyecto debía de gestionar el proyecto desde la atalaya, no pegado al barro de la máquina.

Creo que el arquitecto de software debe tener un planteamiento similar. Por una serie de motivos:

Todologo

Es prácticamente imposible en un proyecto un poco grande el que una única persona conozca al detalle todas las herramientas y tecnologías como para poder ayudar a un programador. De algunas si que podrás ayudar a un programador, porque en tu carrera te hayas tenido que pelear con ella. Pero de otras no.

Un arquitecto tiene que lidiar tanto con el desarrollo puro con todas sus herramientas, que si JSF, que si JPA, que si,…. También con las bases de datos, con la gente de sistemas, para la arquitectura de las máquinas, de las comunicaciones, etc

Como dice la sabiduría popular: «el que mucho abarca, aprieta poco».

Por eso creo que un arquitecto debe tener la siguiente actitud:

Coordinador

Por eso es importante que la persona que lleve la arquitectura sea alguien con un perfil de coordinación. Que tenga un equipo de trabajo con diferentes especialistas.

Si te pegas mucho al barro pierdes la visión de la globalidad del proyecto y acabas corriendo el riesgo de dar soluciones parciales y lo que arreglas en un apartado lo estropeas en otro. O también corres el riesgo de dar soluciones poco elaboradas, que se acaban volviendo en contra del proyecto.

En el libro sobre Expreme Programing se hacia referencia a un cuadro de mandos en el que se ponía todos los mandos al máximo y el sistema era estable, porque una técnica se compensaba con la otra.

Esta es la labor del arquitecto, ver la globalidad y hacerlo estable. Por ejemplo, tengo MySQL y como tiene ciertas carencias lo tengo que diseñar con un sharding y eso me provoca ciertos problemas que puedo solucionar con una caché transversal. Esa visión transversal es la que debe tener un arquitecto. No tanto el ponerse a instalar el caché o a optimizar el JSF.

Sino los de sistemas acaban viendo solo los problemas de sistemas y los de desarrollo solo los de desarrollo y eso no es bueno. Es el planteamiento tradicional que se intenta superar con planteamientos de DevOps.

No caer en las tentaciones

A mi, a pesar de venir de la rama de desarrollo, me gusta el tema de sistemas, más como hobby que profesionalmente. Tengo mi nube casera y cosas similares.

A veces es muy tentador cuando te encuentras con cosas de sistemas, por ejemplo, que no van bien, remangarte y hacerlas tu. Pero ese no es el trabajo del arquitecto. En todo caso si es el hacer que la gente de sistemas haga las cosas bien. Lo mismo pasa con temas de desarrollo. Si por ejemplo un código no pasa la auditoria de código. Es muy tentador el adecuarlo tu.

El problema no es lo que puedas hacer sino lo que dejas de hacer. He conocido a más de un jefe de proyecto que venia de la rama técnica y que ayudaba mucho a los programadores cuando no sabían hacer cosas. El problema es que descuidaban sus verdaderas responsabilidades. Y que un programador no lo haga muy bien, es delicado, pero que no lo haga bien un jefe de proyecto lo es mucho más.

Componente != Código con muchos parámetros

Uno de los proyectos personales que he realizado ha sido ISValidator. Fue a finales del año 2001, así que ha llovido mucho desde entonces.

Mi intención era muy simple. En todas las aplicaciones típicas CRUD lo primero que realizas es coger los datos y validarlos. Así que me propuse hacer una librería para ello. Le dediqué mucho tiempo a pensarla, ha hacer algo modular, etc. No la típica situación «quick and dirty» que suele haber en los proyectos.

No me quedó mal, pero por decirlo de alguna manera me empecé a emocionar y a contemplar más casuísticas. Así que se fue complicando todo, hasta un punto en el que casi yo mismo me perdía en el código.

También es cierto que por aquel entonces era un programador.

Para lo que si me sirvió es para aprender algunas cosas.

  • Los componentes tienen que estar muy bien pensados para que sean buenos, y a veces aun a pesar de estar muy pensados no son del todo buenos. Se necesitan personas con muchos conocimientos de diseño.
  • Un componente no es un código con muchos parámetros, que es lo que suele pasar cuando se hacen las cosas con prisas.
  • Hay que ser humilde y no pretender abarcar mucho, ya que puede que si abarcas demasiado acabes generando un monstruo que no controles.

Recuerdo una empresa en la que trabajé en la que tenían desarrollado un framework para hacer las cosas más rápidas, habían invertido mucho tiempo, pero por ejemplo para hacer un simple combo había que tocar en 7 sitios. ¡7 sitios! . Si era super flexible, flexibilidad que dudo mucho que nunca se llegase a usar, pero lo que si era cierto es que costaba un huevo y parte del otro sacar adelante cualquier mantenimiento.

Obstáculos para la Industrialización del Software

En esta entrada quiero hablar sobre los problemas que podemos encontrar a la hora de industrializar el desarrollo de software, sobre todo cuando estás en un entorno de una subcontrata.

El industrializar el desarrollo de software ya es de por si complicado ya que, a diferencia de otros sectores donde hay más estabilidad, en el de la informática las cosas cambian con mucha rapidez.

Yo sigo usando un coche de hace 10 años, una cocina de no recuerdo cuanto tiempo, etc.

En cambio por ejemplo la raspberryPi (un ordenador del tamaño de una tarjeta de crédito) se considera que tiene una potencia equivalente a un ordenador de hace 10 años. Un ordenador de hace 10 años tiene problemas para mover simplemente las webs de hoy día.

Luego si nos introducimos en el mundo Java la cosa se complica todavía más, porque cada cliente tiene una combinación de herramientas diferentes. En casi quince años he trabajado con servidores de aplicaciones tales como: Java Web Server, JRun, Tomcat, Weblogic, JBoss, WebSphere, Glassfish,…

Esto hace que salvo que trabajes para pocos clientes sea muy complicado el poder definir procedimientos y automatizar cosas. Porque esta procedimentación conlleva un coste de tiempo no menor que hay que diluir entre todos los proyectos.

Aunque solo trabajes para pocos clientes, si eres una subcontrata tampoco tienes control sobre la tecnología, ya que va a ser algo que va a controlar tu cliente. Así que si dedicas esfuerzo a automatizar o procedimientar cosas que controla tu cliente te puedes encontrar que no lo puedes amortizar como tu preveías, porque hay un cambio en el cliente.

Por eso creo que la forma más segura de industrializar el desarrollo de software es hacerlo sobre las cosas que puedes controlar y no tanto las que no dependen de ti.

BYOD (Bring Your Own Device) y la Industrialización del Software

Existe un concepto que se ha puesto últimamente muy de moda y que tiene relación con la industrialización del desarrollo de software. Este concepto es el BYOD (Bring Your Own Device).

Soy de los que piensa que una de las mejores formas de ser eficiente es no reinventar la rueda. Muy en la línea de los métodos Lean. Así que no soy muy partidario de esta forma de trabajar, por una serie de motivos.

Costes ocultos

Uno de los principales motivos que pueden plantearse a la hora de optar por el BYOD es el ahorro de costos por parte de la empresa, ya que no gastaría en portátiles, móviles, etc. Pero hay que considerar también otros costes más ocultos.

Una de las formas de ahorrar costos es no reinventar la rueda, es decir aprovecharse del trabajo realizado. Si se permite que cada persona traiga su dispositivo, nadie asegura que ese dispositivo tenga unas características comunes. Es decir, podemos encontrarnos con, por ejemplo, Windows, Linux con sus diferentes sabores, o Mac. Esto obligaría a la empresa a buscar soluciones para cada sistema, o bien dejar que cada persona se busque su solución. Hay que tener en cuenta que no todas las personas tienen el nivel suficiente para poder buscar soluciones a cada problemática. Y no se puede garantizar que no gasten tiempo de trabajo en «reinventar la rueda».

Políticas y herramientas corporativas

Hay ciertas políticas corporativas, como por ejemplo el tener un antivirus, o un determinado servidor de correo, que pueden verse afectadas por esta medida. Se plantea la problemática de si  la empresa va a obligar, ya no solo a tener un dispositivo, sino a tener determinado software, que puede ser de pago.

Hay ciertas herramientas necesarias para realizar el trabajo, como por ejemplo tener una determinada versión de Access. Se plantea una problemática con respecto a quien debe sufragar ese coste, si lo sufraga la empresa, la licencia se la quedaría el ordenador del trabajador.

Otros problemas

Incomodidades. El hecho de utilizar un dispositivo personal tanto para el trabajo como para la vida privada implica que habría que andar llevando el dispositivo todos los días del trabajo a casa y de casa al trabajo, lo cual es una incomodidad.

En caso de que un dispositivo se estropee se plantea la duda de quien sería el responsable de disponer de un dispositivo de substitución.

Se plantea dudas sobre la responsabilidad de los dispositivos, es decir si por ejemplo entran a robar en las dependencias de la empresa y substraen un dispositivo personal, quien asume el coste de la reposición?

Beneficio para los trabajadores

Si considero que puede ser un beneficio para los trabajadores el que la empresa proporcione la posibilidad de adquirir dispositivos con márgenes más ajustados que los disponibles en el mercado minorista.

Es un beneficio mutuo, ya que una parte consigue vender más productos y mejorar la posición con sus distribuidores y otro saca un producto a un mejor precio.

Esta es una práctica relativamente habitual en las empresas de este sector, por lo menos en las de no mucho tamaño.

Si le traes un problema a tu jefe, intenta llevarle tambien varias soluciones

Recuerdo una vez que un compañero le fue con un problema a nuestro jefe y este, que no debía de tener buen día, le dijo que por lo menos podía proponerle alguna solución para elegir, que era muy cómodo el soltarle el problema y que se lo solucione el jefe.

Estoy totalmente de acuerdo, si quieres causar una buena impresión en tus jefes y que te tengan en consideración para trabajos mejores, una buena fórmula es que cuando tienes que ir con un problema, el llevar pensado algunas soluciones. Y si además de esas posibles opciones le indicas cual es la que crees que es la mejor, razonándola, seguro que dejas una buena impresión.

Luego igual el jefe opta por otra solución, pero por lo menos le das a entender que tienes capacidad para buscar soluciones.

Como he comentado en otras ocasiones esto es un arma de doble filo, ya que si vas con un problema y las soluciones que le propones son del país de pin y pon va a ser contraproducente.

No esperes a que te caigan del cielo unas tareas mejores, demuestra en todo momento que puedes hacer esas tareas mejores. Hay que ponérselo fácil al que tiene la llave.

Ups, al tema no le gustan los comentarios de Google+

Vaya, es lo que tiene tener por fin comentarios, que te das cuenta que al tema no le gustan los comentarios de Google+, y no se puede volver a los comentarios de blogger.

Tengo que investigar como hacer para que salgan. Me imagino que será modificando el tema a manija… De momento he puesto los comentarios con la configuración de en una página nueva, así que pinchando sobre el mensaje de arriba de que hay X comentarios se pueden ver…

Ya hay trabajo para el departamento de mantenimiento de Yo S.A. 🙂

Elevator pitch para no emprendedores

El elevator picth es un concepto americano muy utilizado en los entornos de emprendimiento que hace referencia a la típica conversación de ascensor. Es decir como vendes a alguien tu idea de negocio en unos 30 segundos. En términos más castizos hablaríamos de vender la moto a alguien en el tiempo que dura un viaje en ascensor.

Yo no me muevo en estos entornos de emprendimiento, pero si he detectado situaciones en las que el tener preparado tu elevator pitch puede ser interesante.

Cuando vas por tu trabajo a hacer la típica reunión o presentación en PowerPoint a veces la gente que está contigo te conoce y no hace falta presentaciones porque ya sabe si eres o no un referente en lo que vas a hablar. Pero otras veces no ocurre eso. Hablas a desconocidos, tanto lo son ellos para ti como tu para ellos. No tienen forma de saber si eres alguien fiable o un lanzado que se ha leído un montón de webs y nada mas. Además cada vez se usan menos las tarjetas de visita, que me parecen que son incompletas, porque solo ponen el título de tu trabajo.

Por eso me parece que es importante el tener preparado el elevator pitch y poder contar en 30 segundos a alguien a que te dedicas y porque eres un referente en esa materia.

Mi elevator pitch es el siguiente:

Me dedico a la vertiente técnica de la industrialización del desarrollo de software y a la arquitectura de aplicaciones Web, principalmente con tecnología Java.

Llevo en este negocio desde cuando ni siquiera existía el concepto de J2EE, así que soy bastante pragmático con la tecnología. Me centro en generar valor para el cliente.

Como añadir Karmacracy a Blogger

Llevo poco tiempo utilizando Karmacracy y poco tiempo también desde que he revitalizado el blog. Pero el concepto de Karmacracy me parece muy interesante.

Primero porque me permite planificar los mensajes que publico en las redes sociales, así no apabullo con entradas dispersas, solo una o dos al día y no en fin de semana, que para leer de trabajo ya tenemos el resto de la semana.

Por otra parte el aspecto social de poder tener un cierto seguimiento de las publicaciones que realizas.

Aparte esta en castellano y hecho por unos de Bilbao, ¡que más se puede pedir!.

En esta entrada lo que quiero es comentaros como añadir el Widget de Karmacracy en un blog hecho con Blogger.

He tenido dos referencias [1] y [2] que están bastante bien explicadas. Pero por lo menos a mi no me salía el

Aunque lo tenia en la plantilla en el blog al verlo no aparecía.

Así que lo he hecho a las bravas poniéndolo justo antes de los botones de compartir.

< div class=’post-share-buttons’ >
Aquí el código de Karmacracy
< b:include data=’post’ name=’shareButtons’ / >

Solo un par de trucos, que aunque están explicados entre todo el texto puedes pasarlo por alto.

Hay que tener cuidado porque al Blogger no le gustan los &
Hay que substituir los datos de ID y url que genera el web de Karmacracy 

Que le pido a un control de versiones: Sencillez

Hasta ahora todos los requisitos que le pedía a un control de versiones eran de índole técnico. Pero hay una, quizá la más importante y subjetiva: la sencillez (de la que ya he hablado otras veces)

Por muchas características técnicas que pueda tener un control de versiones si los compañeros no lo entienden y lo usan mal, no vale para gran cosa.

Siempre cuento la misma anécdota. Hace ya tiempo jugué a un juego de carreras de coches, alguna versión del need for speed, no recuerdo cual. La cuestión es que de todos los coches que había para correr, siempre hacia los mejores tiempo con el que sobre el papel era el peor, simplemente porque era el más sencillo de conducir e iba más tiempo por el asfalto que por fuera, como me pasaba con el resto de coches.

El problema a la hora de valorar la sencillez es que es lo más subjetivo de todo. Si estás acostumbrado a CVS/SVN el paso a Git es relativamente asumible, pero por ejemplo el paso al Rational Team Concert puede ser más complejo, ya que no tiene como tal ramas, por ejemplo.

En ese aspecto si se quiere migrar de control de versiones o implantarlo por primera vez se debe valorar si las funcionalidades que te aporta el control de versiones compensa la dificultad de uso.

Así que en este apartado no voy a dar ningún ranking de cuales creo que sean mejores o peores, porque depende de la experiencia de las personas que lo van a usar.

Industrialización del Software, mi visión.

Llevo bastantes entradas hablando de la industrialización del desarrollo de software, pero en ninguna de ellas he dicho que es para mí, aunque algo ya se habrá ido adivinando, sobre todo cuando lo contrapongo a la artesanía.

Cuando estás en un proyecto pequeño, de una o dos personas, con unos requisitos bajos, normalmente se funciona como un artesano. Es decir, te ocupas de todo y es tu valía personal y tu calidad la que se ve reflejado en el producto que vendes. Esto es así tanto si haces una figurita como si haces un programa.

Cuando los proyectos son más grandes, de decenas de personas, esta forma de trabajar en la que cada uno hace las cosas según su criterio ya no sirve. Básicamente porque tu trabajo es una parte de un todo y el resultado final ya no va a depender tanto de tu valía personal y tu calidad, como cuando trabajas como un artesano, sino que aparte de esto va a depender de lo bien afinado que esté todo el equipo.

He comprobado en mis propias carnes que por muy bueno que tengas a uno en un equipo, si el resto no está a la altura el proyecto no marcha bien. Es como si una maquinaria de un reloj tuvieses una pieza muy buena, pero el resto no. El reloj no marchará bien. Tampoco lo hará si las piezas son buenas, pero no están bien ajustadas. También se suele utilizar el símil de la orquesta.

Por eso habréis podido comprobar que la mayor parte de las entradas referidas a la industrialización del desarrollo del software están dedicadas a las personas. Para mi es lo más importante, el poner más o menos herramientas lo único que hace es facilitar o mecanizar las cosas.

Para mi la industrialización del desarrollo de software es la definición de que es lo que pasa, es decir los procedimientos y herramientas asociadas, desde que una petición llega del cliente hasta que esa petición se pone en producción (o se descarta).

Entran multitud de elementos, desde la captura de requisitos, la asignación de tareas, planificación, desarrollo, verificación, traspaso, etc. Va muy en la línea de lo que serían la ISO 9000 y el CMMI, por citar algunas normativas.

Hay gente que considera la industrialización del desarrollo de software como la aplicación de herramientas estilo MDA (model drive arquitecture). Para mi esto no es industrialización del desarrollo, es automatización del desarrollo. Es decir es tener la super churrera, que te genera, ya no un trozo de programa, sino el programa completo. No digo que la automatización sea algo malo, solo que para mi son conceptos diferentes.