Ir al contenido principal

La necesidad de centralizar

El desarrollo de software es una actividad en la que se requiere alta colaboración entre los miembros de un grupo. Me gustaría hablar de comportamientos grupales que pueden favorecer en el forjamiento de un "equipo", pero eso lo haré en algún post más adelante. En este quiero hablar de herramientas que permiten mejorar el rendimiento de un equipo mediante la centralización de recursos.

El Entorno:
Cuando comenzamos un proyecto, lo primero que nos planteamos es cuál va a ser nuestro entorno de desarrollo. La forma de trabajar sin centralización pasaría por: elegir IDE, bajarlo, añadirle plugins y configurarlo a nuestro gusto. Esto por cada miembro del equipo. En este proceso, se puede llegar a consumir mucho tiempo. Yo propuse en mi empresa el uso de Pulse. Pulse se puede definir como un repositorio de Eclipses, en el que se pueden crear perfiles de Eclipse preconfigurados, y compartirlos con miembros de un equipo. Si enriquecemos un perfil con un plugin, automáticamente todos los miembros del equipo podrán usarlo.

Yo diseñé tres perfiles: uno para programadores J2ME, otro para programadores J2EE, y otro para programadores PHP, y todos comparten herramientas comunes como Mylyn o Subversive de las que hablaré más adelante.

Las Librerías:
Antes de centralizar las librerías, teníamos un escenario un poco caótico. Las preguntas: "¿qué versión usas? y ¿de dónde se descarga?" eran muy habituales. Con Maven se solucionan estos problemas. Maven sirve para muchas otras cosas, pero aquí trato de exponer sus bondades como repositorio único de librerías.

El Código
Antes de trabajar en la empresa privada, he trabajado muchos años como freelance. En este mundillo, también es muy normal trabajar con algún compañero de la Escuela. Aun recuerdo lo complicado que era coordinarse: "no toques este archivo que lo estoy haciendo yo", "antes de unir nuestros códigos funcionaba", "se me ha borrado y no tengo copia de seguridad"...
Este problema queda totalmente resuelto con un repositorio de código y control de versiones. Yo soy partidario de Subversion por muchos motivos que ya iré desgranando más adelante. Con Subversion sabemos que desarrollador ha tirado cada linea de código y podemos mezclarlas con otras, desecharlas, o volver a una versión anterior. Para Eclipse existe el plugin Subversive que es un buen cliente de Subversion.

Las Tareas
Para desarrollar software es preciso completar una serie de tareas, y en las distintas iteraciones realizar un seguimiento de errores. Trac permite realizar un workflow completo de tareas (trabajo finalizado, reescalado...). Tiene fuerte dependencia de Subversion, pudiéndose incluso visualizar el código de éste. Además, me permite realizar otras tareas relacionadas con la gestión del proyecto o documentación. Para Eclipse existe el plugin Mylyn, que permite asociar cada commit en Subversion a una tarea en Trac.

El despliegue
Aparte de los respectivos despliegues que lleva a cabo cada programador en su entorno, hay que realizar una labor de integración contínua, donde se "centralice" el resultado del trabajo realizado por cada miembro. Desde Subversion se pueden automatizar despliegues en un servidor mediante Hudson, y programar pruebas unitarias, generación de documentación o un snapshot para el cliente.

El conocimiento
En mi empresa intentamos introducir un nuevo elemento de I+D en cada proyecto. Muy a menudo, hemos tenido el problema de tener que volver a investigar algo por motivos como: la persona que lo hizo ya está en otro departamento, la persona que lo hizo no se acuerda, y en ninguno de los casos quedó por escrito nada. Es decir, esa inversión en I+D se perdió como lágrimas en la lluvia. Había que centralizar el conocimiento, buenas prácticas, librerías propias, bugs conocidos, en alguna parte.
Realicé un análisis de qué herramienta nos aportaba más. Las opciones eran un foro, o una wiki. No voy a entrar en demasiados detalles, pero para nuestras necesidades, lo mejor sin duda era una wiki. Cuando mi amigo Dani me comentó que en Google usaban continuamente wikis "para todo" me reafirmé en que la decisión tomada era la correcta. Soltelpedia está desarrollado con MediaWiki, al igual que Wikipedia.

Como habéis podido comprobar es solo una pincelada en la que intento plasmar las ventajas de "centralizar". Quizás me anime a profundizar en futuros posts en cada una de estas tecnologías (instalación, configuración...). Por otro lado, se podría haber hablado de otras tecnologías que hacen lo mismo. Las que expongo eran las que, después de un exhaustivo análisis, mejor se adaptaban a las circunstancias de mi equipo y mis proyectos... y ya están dando sus frutos.

Comentarios

  1. Alejandro, no sé si conoces git. Tiene todo lo que tiene Subversion y más todavía. Está descentralizado, lo cual quiere decir que cada miembro del equipo tiene una copia local del repositorio, pudiendo trabajar con el repositorio incluso estando offline. Por si fuera poco, incluye git-svn para utilizar un servidor Subversion central, si fuera necesario.

    ResponderEliminar
  2. Gracias Dani, por pasarte por aquí y por tu aportación. Es bastante interesante lo que comentas. No puedo valorarlo aun, porque no lo he probado, pero lo haré.

    Gracias.

    Un abrazo.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Métrica v3 vs Metodologías Ágiles

Métrica v3: Metodología de Planificación, Desarrollo y Mantenimiento de sistemas de información que propone el Ministerio de Administraciones Públicas. Cualquier defensor de la técnicas, metodologías y herramienta ágiles sostendrá que Métrica v3 es un sistema demasiado pesado, tanto en su implementación, como en sus procesos de mantenimiento. Yo lo corroboraría, pero sin demonizarla. Estoy acostumbrado a que en este mundo de la informática se creen auténticos "dogmas de fe", que acarrean sus propias "guerras religiosas". Algunos ejemplos podrían ser: Software privativo vs Software libre, Windows vs Linux, Web Services vs Rest, Oracle vs MySQL, Explorer vs Firefox, Apache vs IIS, Eclipse vs Netbeans, y así podríamos seguir con un largo etcétera. En vez de buscar la mejor solución, o soluciones universales, yo propongo realizar un intenso análisis, y respondernos ciertas preguntas. Por regla general, no hay una solución que valga "para todo". La pregunta que

Lenguajes: Pasado, Presente y Futuro

Escribo este post al hilo del artículo que he leido en dosideas.com. En él, se habla de las habilidades que debería tener un programador para tener un currículum relevante en los próximos cinco años: 1. Uno de los "3 Grandes" (Java, .NET, PHP) 2. Aplicaciones Ricas de Internet (RIA - Rich Internet Applications) 3. Desarrollo web 4. Servicios web 5. Habilidades humanas 6. Un lenguaje de programación dinámico y/o funcional 7. Metodologías ágiles 8. Conocimiento de dominio 9. "Higiene" de desarrollo 10. Desarrollo móvil A partir de este artículo, estuve debatiendo con algunos compañeros y saqué algunas conclusiones que quiero plasmar aquí. Pienso que el artículo es un poco mejorable, dada la arbitrariedad con la que se han escogido los conocimientos a adquirir. De hecho, muchas de esas habilidades hay que tenerlas en el presente (yo cumpliría de 9 a 10). Me voy a centrar en el punto 1, uno de los "3 Grandes" (Java, .NET, PHP). Antes de hablar de "gran

¿Por qué Yii Framework?

En Soltel presumimos de tener una actitud innovadora, que nos obliga a probar las distintas tecnologías que van llegando al mercado, y que ajustándose a nuestro stack, puedan mejorar en algo nuestros desarrollos. Una vez analizado el framework o librería, lo probamos en proyectos internos que nos permitan conocer con más detalle sus características. En este trabajo de campo es donde realmente se decide si es interesante o no añadir el framework a nuestro stack, y con ello ofrecerlo en los desarrollos que realizamos para nuestros clientes. En este proceso, llevábamos bastante tiempo buscando un framework PHP que realmente aportara valor y se adecuara en tiempos de desarrollo, rendimiento y arquitectura a lo que necesitamos ofrecer en nuestros proyectos. Ya habíamos descartado frameworks como Prado, por ser bastante pesado y tener una arquitectura demasiado compleja. Con Yii, sin embargo, nos hemos llevado una agradable sorpresa. Yii es un framework PHP, libre (licencia BSD), basado en