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

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...

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...

Huelga Ingeniería Informática

Son varios los compañeros (y sin embargo amigos ;-)) que me llevan pidiendo mi opinión sobre las reivindicaciones de la Ingeniería Informática desde hace algún tiempo. Ya me "he dejado querer" bastante, así que en este post, intentaré expresarme de la manera más clara posible. Como titulado, pienso que a nivel académico, la Ingeniería Informática se debe tratar como el resto de Ingenierías. Si bien, creo que hay muchas carencias en los temarios que se imparten, y la Universidad debería adaptar el currículo, para que los titulados salieran con algunos conocimientos, que en mi opinión, son indispensables. Sobre los contenidos que deberían recogerse se podría escribir mucho, y me lo pongo como tarea para futuros posts. En éste, me quiero extender sobre las competencias y atribuciones profesionales del Ingeniero Informático. En cuanto al nivel académico parece que los Directores y Decanos, ya tienen bastante controlado el tema . En primer lugar, y para los despistados, me gustarí...