<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

	<channel>
		<title>Magazine - desarrollo-en-equipo</title>
		<link>http://www.genbetadev.com</link>
		<description>
Información sobre el sector de los desarrolladores, el desarrollo de aplicaciones, para móviles, desarrollo web, bases de datos, frameworks y lenguajes de programación		</description>
		<pubDate>2013-06-19 14:28:18</pubDate>

		<generator>http://www.genbetadev.com</generator>
                    <item>
      <title><![CDATA[Compartir archivos, documentos y comunicación. Desarrollo en equipo (III)]]></title>
      <link>http://www.genbetadev.com/desarrolladores/desarrollar-en-equipo-iii-compartir-archivos-documentos-y-comunicacion</link>
      <guid>http://www.genbetadev.com/desarrolladores/desarrollar-en-equipo-iii-compartir-archivos-documentos-y-comunicacion</guid>
      <pubDate>Sat, 02 Apr 2011 08:38:02 +0000</pubDate>

      <author>Carlos Paramio</author>
      <description><![CDATA[
      <p><img id="image76029" src="http://img.genbetadev.com/2011/04/genbeta.jpg" class="centro" alt="Desarrollo en equipo" /></p>

<p>Una <strong>buena comunicación</strong> es probablemente el requisito primordial para que un trabajo realizado en equipo llegue a buen cauce. A menudo infravaloramos la importancia de esta función, sin caer en la cuenta que la base del éxito de un proyecto recae habitualmente en que los miembros participantes conozcan con detalle en qué está trabajando cada uno, y tengan a mano cualquier documentación obtenida o generada que pudiera resultar relevante para el desempeño de determinadas tareas.</p>

<p>Las <strong>reuniones cortas pero frecuente</strong>s ayudan mucho en este aspecto. Como dictaminan muchas de las metodologías ágiles que tanto parecen triunfar en los grupos de desarrollo modernos, es recomendable realizar una o dos reuniones diarias de aproximadamente 5 minutos, con el objetivo de ponernos al día y hacer reparto de tareas, intercambiar documentación, o comentar los bloqueos que impiden que un miembro efectúe las suyas. Pero una reunión presencial no siempre es lo más efectivo, y a menudo han de tomarse decisiones más meditadas que exigen una comunicación más frecuente y fluida.</p>

	<p><!--more--></p>

<p>Afortunadamente, disponemos hoy en día de multitud de servicios que nos sirven de ayuda a la hora de mejorar este aspecto clave, de modo que en pocos minutos podamos cubrir esta carencia y centrarnos en el trabajo colaborativo en sí mismo. A continuación paso a detallar algunos de ellos.</p>

<h2>Calendario compartido</h2>

<p>Muchas de las tareas tienen una fecha concreta de ejecución, entrega, o en definitiva, acción. Cuando además esta tarea requiere la actuación o presencia de más de una persona, es recomendable apuntarla en algún sitio común donde todos sus miembros puedan revisarla y ser alertados en el momento oportuno. Una técnica ampliamente utilizada en estos casos es el uso de un calendario compartido online.</p>

<p>En un <strong>calendario compartido</strong>, las tareas que exigen la participación de más de un miembro pueden ser consultadas por todos ellos en todo momento, éstos ser alertados algunos minutos, horas o días antes de su ejecución, y suelen llevar un control de los participantes que han confirmado su inclusión en dicha tarea (por ejemplo, para conocer las personas que han confirmado su participación en una reunión futura). Muchos de ellos además son capaces de lidiar con los cambios de zona horaria, de modo que si nuestro equipo de trabajo está disperso por el globo, aún así la misma tarea sirva para alertar a todos a su debido momento.</p>

	<p><img id="image76045" src="http://img.genbetadev.com/2011/04/google-calendar2.jpg" class="centro" alt="Google Calendar" /></p>

<p>Uno de los servicios gratuitos más típicos entre los que proporcionan estas funciones es <a href="http://www.google.com/calendar">Google Calendar</a>. Para poder utilizarlo, tan sólo hay que crear una cuenta de Google para todos los miembros del equipo (si es que no disponen ya de una), y una vez que uno de ellos haya creado el calendario que será usado por todos o varios miembros del grupo, utilizar la función <strong>&#8220;Compartir calendario&#8221;</strong> entre las opciones del mismo. Los calendarios compartidos disponen de una <span class="caps">URL</span> para acceder a la información que contienen en formato iCal, que es uno de los más extendidos y soportados por aplicaciones de terceros, de modo que además de poder consultar el calendario vía web, también se pueden sincronizar otras aplicaciones como <strong>iCal</strong> de Apple, <strong>Outlook</strong> de Microsoft, o incluso aplicaciones de calendario para el teléfono móvil.</p>

<p>Además de esto, Google Calendar proporciona la posibilidad de enviar los recordatorios de la cita tanto por correo electrónico como por <span class="caps">SMS</span> a un teléfono móvil. ¿Se puede pedir más a un servicio gratuito?</p>

<p>Por supuesto, existen otras posibilidades, como utilizar un servidor de <strong>Microsoft Exchange</strong>, o utilizar el servicio de Apple <a href="http://www.me.com/">MobileMe</a>, así como decenas de servicios online integrados con otros más específicos de trabajo en grupo.</p>

<h2>Documentos y archivos compartidos</h2>

<p>Todo proyecto genera documentación que frecuentemente ha de ser mantenida por varios miembros del equipo. Ya sea un documento de texto que describe las ideas que se han barajado en el último <em>brainstorming</em>, como la documentación técnica sobre el <span class="caps">API</span> de una determinada librería, o los últimos diseños gráficos de la aplicación o servicio que se está construyendo, etc.</p>

<p>Recordemos que el servicio World Wide Web fue ideado por Tim Berners-Lee precisamente para cubrir esta necesidad: <strong>La compartición de información entre varios miembros de un equipo</strong>. Y ha sido la base de su éxito, pues ha supuesto uno de los grandes avances de las últimas décadas. Nuestra memoria es ahora una memoria colectiva de donde extraer la información que necesitamos en el momento en que la necesitamos.</p>

<p>Con los documentos de texto, lo ideal es disponer de un servicio que permita la edición simultánea de los mismos, de modo que varios miembros puedan escribir en ellos de forma colaborativa. Si combinamos esta posibilidad con una conversación vía Skype u otra herramienta similar para ir comentando dichos cambios cuando se den al unísono, el resultado es brutal. Por supuesto, también pueden editarse estos documentos a destiempo, cada uno en el momento particular que mejor le venga. Pero lo importante es que se encuentren en un repositorio común.</p>

<p><img id="image76030" src="http://img.genbetadev.com/2011/04/google-docs.jpg" class="centro_sinmarco" alt="Google Docs" /></p>

<p>Nuevamente, Google nos ofrece un servicio denominado <a href="http://docs.google.com/">Google Docs</a> que viene a proporcionarnos todos estos requisitos. Podemos crear los documentos compartidos desde cero a través de su interfaz web, o podemos subir archivos ya creados con otros editores. El servicio admite formatos tan comunes como OpenDocument, Word, Excel, <span class="caps">RTF</span>, y otros. Un servicio similar de compartición de archivos de texto <a href="http://backpackit.com/">Backpack</a>, de la prestigiosa 37signals, o nuevamente <a href="http://www.me.com/">MobileMe</a> de Apple.</p>

<p>Para compartir archivos de cualquier tipo, tenemos otros servicios populares como <a href="https://www.dropbox.com/">Dropbox</a> (2GB de almacenamiento gratuito, a partir de $9,99 al mes para más capacidad), donde dispondremos de una carpeta especial en nuestro equipo la cual puede contener otras carpetas compartidas cuyos contenidos se mantendrán sincronizados con los contenidos de esas mismas carpetas entre todos los usuarios. Otros servicios similares a éste son <a href="http://www.wuala.com/">Wuala</a>, <a href="https://www.sugarsync.com/">SugarSync</a> o <a href="http://www.box.net/">Box.net</a>.</p>

<h2>Listas de correo</h2>

<p>Soy un gran fan del correo electrónico. Es una de las herramientas de comunicación más efectiva que hemos inventado. Es inmediata, de modo que cuando necesitamos agilidad a la hora de comunicarnos con otra persona, la información le llega en cuestión de segundos. Pero sobre todo, es asíncrona, de modo que cuando necesitamos comunicar algo que no exige de una respuesta inmediata, no interrumpimos a la otra persona. Otros medios de comunicación eficientes como el teléfono son mucho más intrusivos, puesto que inician una comunicación en un momento en que podría no ser el más adecuado para la otra parte, haciéndole perder la concentración o interrumpir otra tarea o etapa de descanso que estaba llevando a cabo.</p>

<p>Cuando la comunicación ha de ser entre varias personas, una de las formas más rudimentarias es utilizar el famoso campo CC (Carbon Copy) del correo electrónico, para que éste llegue a todos los destinatarios. Pero si la comunicación entre ese mismo grupo de personas va a ser muy habitual, lo mejor es recurrir a una <strong>lista de correo</strong>, de modo que podamos referirnos a esos grupos de personas por un nombre único y con una sola dirección de correo electrónico (como desarrolladores@mi-startup.com, o proyecto-genbeta@miservidor.com).</p>

<p>Existen gestores de listas de correo que puedes configurar en tu propio ordenador, si dispones de un equipo con alguna versión de Unix que haga las veces de servidor, siendo el más popular <a href="http://www.gnu.org/software/mailman/index.html">Mailman</a>, del proyecto <span class="caps">GNU</span>. No obstante, a menudo es más cómodo utilizar un servicio online que tan sólo requiera rellenar un par de formularios para poner la lista de correo en marcha. Y nuevamente, Google viene al rescate.</p>

<p>Mediante <a href"http://groups.google.com/">Google Groups</a>, podemos crear listas de correo <strong>públicas o privadas</strong> donde cada mensaje enviado al grupo sea recibido por cada uno de sus miembros. Además, permite la lectura de la lista de distribución vía web, de modo que podemos consultar el historial de la lista o responder a un determinado mensaje desde esta misma interfaz, de forma remota, y si no queremos colapsar nuestro correo electrónico, hacer que algunas de estas listas sólo sean consultables por esta vía, sin que haya envío de correos de por medio.</p>

<p>En Weblogs SL hacemos un uso exhaustivo de las listas de correo para comunicarnos entre editores, y así ponernos de acuerdo en detalles como el reparto de estos especiales.  No esperes más y crea las vuestras, si no las usáis aún, para comenzar a comunicar ideas y tareas en vuestro grupo de forma eficiente y sin interrupciones.</p>

	<p>En Genbeta Dev | <a href="http://www.genbetadev.com/sistemas-de-control-de-versiones/kit-basico-de-herramientas-para-desarrollar-en-equipo-i-control-de-versiones">Control de versiones. Desarrollo en equipo (I)</a>, <a href="http://www.genbetadev.com/desarrolladores/trabajo-en-equipo-gestion-de-tareas">Gestión de tareas. Desarrollo en equipo (II)</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Control de versiones. Desarrollo en equipo (I)]]></title>
      <link>http://www.genbetadev.com/sistemas-de-control-de-versiones/kit-basico-de-herramientas-para-desarrollar-en-equipo-i-control-de-versiones</link>
      <guid>http://www.genbetadev.com/sistemas-de-control-de-versiones/kit-basico-de-herramientas-para-desarrollar-en-equipo-i-control-de-versiones</guid>
      <pubDate>Tue, 29 Mar 2011 17:49:10 +0000</pubDate>

      <author>Carlos Paramio</author>
      <description><![CDATA[
      <p><img id="image76029" src="http://img.genbetadev.com/2011/04/genbeta.jpg" class="centro" alt="Desarrollo en equipo" /></p>

<p>Tanto si trabajamos por nuestra cuenta como si lo hacemos por cuenta ajena, es habitual que no lo hagamos solos, sino que tengamos que hacerlo junto a un <strong>equipo de personas</strong>. El desarrollo de software de calidad es una tarea que exige a menudo de perfiles diferentes, cada uno especializado en un área (<em>frontend</em>, <em>backend</em>, administración de bases de datos, usabilidad&#8230;). Esto hace que necesitemos de un sistema eficiente para organizar al equipo. Y cómo no, existe una tremenda variedad de software destinado a facilitar esa organización.</p>

<p>Este artículo pretende ser el comienzo de una serie donde abordaremos precisamente este tema: Cómo el software existente puede ayudarnos a la hora de trabajar junto a un equipo de personas, de modo que la interacción sea lo más sencilla posible y podamos centrarnos en el trabajo en sí mismo. La idea es que tengamos a mano una relación de herramientas a las que recurrir en caso de que sea necesario, y las tengamos siempre presente en nuestra cabeza para detectar la necesidad rápidamente y podamos así cubrirla de forma efectiva. Hoy comenzaremos con los sistemas de control de versiones.</p>

	<p><!--more--></p>

<h2>¿Qué es un sistema de control de versiones?</h2>

<p>Es casi inconcebible hoy en día trabajar desarrollando software y no utilizar un sistema para controlar los cambios que se van realizando, tanto por nosotros mismos como por nuestros compañeros de trabajo. Tales utilidades se denominan <b>sistemas de control de versiones</b>, y existen un buen puñado de ellas. La característica principal en que se dividen bien podría ser si se trata de un sistema centralizado o no. En el primer caso, existe un servidor común donde se encuentra el código fuente, tanto la versión actual en desarrollo como todas aquellas versiones intermedias desde que dio comienzo el proyecto. En el último caso, no es necesario (aunque a menudo es recomendable) poseer un servidor común, sino que se pueden enviar y recibir actualizaciones de cada uno de los miembros participantes de forma directa.</p>

<p><strong>¿Cómo funciona un sistema de control de versiones?</strong> Lo habitual es que cada programador realice los cambios necesarios en el código fuente para la tarea que se le ha encomendado. Una vez que dichos cambios están listos, los envía al servidor (o a los otros participantes), de modo que el resto pueda recibirlos en cualquier momento, y así trabajar sobre dichos cambios cuando tengan que realizar cualquier otra tarea. Se puede dar el caso de que varios programadores trabajen sobre el mismo fichero o ficheros, en cuyo caso el sistema lo detectará, y actuará para evitar posibles conflictos. Se pueden dar dos casos:</p>

<ul>
  <li>Los programadores han trabajado en porciones de código diferentes: En principio, no se han pisado las líneas en las que han trabajado, así que es probable que sea suficiente efectuar ambos cambios sobre el fichero, sin más. Casi todos los sistemas de control de versiones detectan esta situación y realiza la unión de los cambios de forma automática, notificándolo al usuario para que tenga constancia.</li>
  <li>Los programadores han trabajado en líneas de código comunes, modificando, eliminando o añadiendo líneas en la misma porción de código: En estos casos, el sistema suele señalar que hay un conflicto entre ambos cambios, y habitualmente genera un fichero intermedio convenientemente marcado para que se puedan revisar ambos cambios de forma simultánea, y así quedarse con uno, con el otro, o con una combinación de los dos, realizando la unión a mano y eliminando lo que sobra.</li>
</ul>

<p>Si bien sólo por esta característica ya merece la pena trabajar con un sistema de este tipo, espera a conocer las otras ventajas:</p>

<ul>
  <li>Puedes volver a cualquier punto del desarrollo para ver qué aspecto tenía un determinado fichero de código, o volver a una versión donde todo funcionaba antes de haber metido la pata.</li>
  <li>Puedes trabajar en distintas características de forma simultánea, guardando los cambios en cada una de ellas, y uniéndolos al desarrollo principal si ya han sido lo suficientemente probadas. O sencillamente puedes crear una nueva versión para probar un experimento, o corregir un bug que se acaba de detectar en producción, sin comprometer lo que ya llevas realizado. Estas distintas ramas de trabajo hacen que veamos el repositorio de código como un árbol, donde cada una de las ramas representan experimentos que se van creando, y que luego vuelven a unirse al tronco principal del árbol (la versión que pretende llevarse a producción).</li>
  <li>Puedes echar un vistazo para ver quién realizó un determinado cambio, y cuándo lo hizo.</li>
</ul>

<p>Y otras muchas características que suelen ser propias de un sistema de control de versiones específico.</p>

<p><img id="image75997" src="http://img.genbetadev.com/2011/03/control-versiones.jpg" class="centro_sinmarco" alt="Sistemas de control de versiones" /></p>

<p>Algunos de los más habituales son <strong>CVS</strong>, <strong>Subversion</strong>, <strong>Git</strong>, <strong>Mercurial</strong>, o <strong>Bazaar</strong>, si bien encontrarás otros muchos. Personalmente, me decanto por Git, el mismo que se utiliza para llevar un control del desarrollo del kernel de Linux (de hecho, fue creado inicialmente para esta tarea), y que además de ser muy popular, es un sistema distribuido, flexible, y para el que existe una gran cantidad de bibliografía. Pero te recomiendo que pruebes unos cuántos y te decidas por el que mejor se ajuste a tus necesidades.</p>

<h2>¿Cómo puedo empezar a usarlo?</h2>

<p>Existe una ingente cantidad de repositorios de software que ponen a disposición del usuario un sistema de control de versiones donde alojar su código. La mayoría de los repositorios de software libre más conocidos utilizan algunos de estos sistemas para acceder al código fuente, y poder colaborar si así se desea en el desarrollo del mismo, o crear tu propio proyecto y alojarlo en ellos de forma gratuita. Muchos otros también permiten alojar proyectos privados a los que sólo tienen acceso tanto tú como tus colaboradores.</p>

<p>Entre los más conocidos, cabe mencionar:</p>

<ul>
  <li><a href="https://github.com/">GitHub</a> (que como habrás adivinado, es un servicio de almacenamiento de repositorios de software que utilizan Git), el cual permite alojar tanto proyectos de software libre de forma gratuita, como proyectos privados mediante una cuenta de pago. El coste depende del número de repositorios y de colaboradores, y va desde 7 dólares al mes hasta los 200 dólares al mes.</li>
  <li><a href="http://sourceforge.net/">SourceForge</a>, exclusivamente para almacenar software libre. Soporta varios sistemas de control de versiones (<span class="caps">CVS</span>, Subversion, Git, Bazaar, Mercurial, y puede que algún otro que me esté dejando).</li>
  <li><a href="https://launchpad.net/">Launchpad</a>, también para almacenar software libre. Elaborado por Canonical, la empresa detrás del desarrollo de Ubuntu. Los repositorios utilizan Bazaar como sistema de control de versiones.</li>
</ul>

<p>Además, no dejes de echar un vistazo a los servicios unificados de gestión de proyectos, como <a href="http://unfuddle.com/">Unfuddle</a>, ya que éstos suelen traer a menudo la posibilidad de alojar tu código en su propio repositorio de software.</p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Gestión de tareas. Desarrollo en equipo (II)]]></title>
      <link>http://www.genbetadev.com/desarrolladores/trabajo-en-equipo-gestion-de-tareas</link>
      <guid>http://www.genbetadev.com/desarrolladores/trabajo-en-equipo-gestion-de-tareas</guid>
      <pubDate>Mon, 28 Mar 2011 07:28:12 +0000</pubDate>

      <author>Jose Alberto</author>
      <description><![CDATA[
      <p><img id="image76018" src="http://img.genbetadev.com/2011/04/trabajoenequipo.png" class="centro" alt="Trabajo en equipo: Gestión de tareas" /></p>

	<p>Dícese del trabajo en equipo aquel que consiste en realizar <strong>tareas de forma colectiva</strong>, basándose en <strong>liderazgo</strong>, <strong>comunicación</strong> y <strong>reflexión grupal</strong> siendo los roles más importantes el de liderazgo y el esablecimiento de roles. Los tres elementos claves del trabajo en equipo son: <strong>conjunto de personas, organización y objetivo común</strong>.</p>

	<p><!--more--></p>

	<p>Por mi experiencia personal en el trabajo en equipo, la única parte negativa que tiene trabajar en equipo llega en el momento que una persona del equipo no entrega su tarea en el tiempo que tenía señalado. Llegado a este punto, puede retrasar el proyecto si alguna de las siguientes tareas necesita de la tarea anterior para poder continuar.</p>

	<p>Como <strong>ventajas</strong> del trabajo en equipo, mínimo se pueden hablar de estas:</p>

<ul>
	<li><strong>Variedad de conocimientos. </strong>Ya se sabe que cuanta más gente con conocimientos varios, el equipo al completo se hace con más conocimientos.</li>
	<li><strong>Diversidad de opiniones. </strong>Cada persona tiene una opinión y una forma de ver las cosas, por lo que hay distintos puntos de vista y esto hace enriquecer el trabajo.</li>
	<li><strong>Mayor eficacia. </strong>Un buen equipo de trabajo, consigue mejores resultados ya que se unen distinas opiniones y conocimientos.</li>
	<li><strong>Motivación. </strong>El hecho de sentirse parte de un equipo hace que los miembros aumenten su motivación hacia el trabajo.</li>
	<li><strong>Conduce a mejores ideas y decisiones. </strong>El tener otro punto de vista hacia las cosas, hace que las especificaciones cambien con mejores ideas y se tomen nuevas decisiones.</li>
</ul>

	<p>Un gestor de tareas nos vale para gestionar las tareas como su nombre indica. En la gestión de las tareas de un proyecto bien planificado, una técnica muy buena a tratar son los diagramas de <strong>GANTT</strong> que son usados por los directores de proyectos para representar gráficamente el proceso de un proyecto. Ésta técnica nos permite detectar y separar tareas que no dependan de otras tareas. De esta forma, si alguna tarea dependiese de otra tarea y ésta no estuviese terminada, permite ver y realizar otra tarea que no depende de ninguna anterior o la anterior esté terminada.</p>

	<p>Existen muchas <strong>herramientas</strong> para la gestión de tareas, algunas herramientas que he testeado y que se pueden usar son:</p>

	<p><a href="http://www.mantisbt.org/">Mantis</a>.  Es una aplicación OpenSource programada en php/mysql, muy fácil de instalar y muy flexible en su configuración. Permite especificar un número indeterminado de estados para cada tarea (abierta, en trámite, testeada, cerrada, reabierta…) y tantos perfiles como se necesiten(programador, testeador, coordinador, cliente&#8230;).</p>

	<p><a href="http://cohuman.com/">Cohuman</a>. Es un servicio web que permite crear y compartir tareas por la red y a su vez gestionar prioridades en las tareas. Esta prioridad se calcula básicamente dando más prioridad a aquella tarea que tiene tareas dependientes de ella y da menos prioridad a aquellas tareas que no tiene ninguna tarea dependiente.</p>

	<p>También existen otras herramientas como pueden ser <a href="http://basecamphq.com/">Basecamp</a>, <a href="http://www.twproject.com/">TeamWork</a>, <a href="http://www.4workgroup.com/projectboard/projectboard.htm">ProjectBoard</a> y muchas otras más.</p>

	<p>En Genbeta Dev | <a href="http://www.genbetadev.com/sistemas-de-control-de-versiones/kit-basico-de-herramientas-para-desarrollar-en-equipo-i-control-de-versiones">Control de versiones. Desarrollo en equipo (I)</a></p>      ]]></description>
      </item>
        	  <atom:link href="http://www.genbetadev.com/tag/desarrollo-en-equipo/rss2.xml" rel="self" type="application/rss+xml" />
	</channel>

</rss>


