on sábado, 21 de abril de 2012

A mi humilde punto de vista, una de las cualidades de un buen líder de proyecto es la de transmitir de manera clara y original sus conocimientos técnicos que ha adquirido a lo largo de su experiencia profesional.

Debido a los tiempos de entrega tan estrictos, el líder de proyecto debe de tomar el papel pro activo de couch, e ir entrenando a los nuevos en el equipo y orientarlos a las buenas practicas y sobre todo el cómo desarrollar software de calidad al menor esfuerzo (persona/mes).

Dentro de las enseñanzas del líder de proyecto sugiero algunos tópicos:

1.- principios básicos de la programación orientada a objetos.
2.- patrones de diseño.
3.- patrones de arquitectura.
4.- fomentar el seguimiento de nomenclaturas acorde al equipo de desarrollo (nombrado de métodos, clases, proyectos etc etc.)
5.- la importancia de no mal viajarse.
6.- fomentar la humildad, ya que uno de los principales problema de comunicación y una verdadera enseñanza es el ego.


Nota: no soy un experto en el tema, son bienvenidos otros tópicos de enseñanza para hacer retroalimentación, de antemano el objetivo es compartir el conocimiento y aprender todos.
on martes, 17 de abril de 2012

Los principios fundamentales de una metodología ágil se pueden resumir:

Nuestra principal prioridad es satisfacer al cliente a través de la entrega temprana y continua de software de valor.
Son bienvenidos los requisitos cambiantes, incluso si llegan tarde al desarrollo. Los procesos ágiles se doblegan al cambio como ventaja competitiva para el cliente.
Entregar con frecuencia software que funcione, en periodos de un par de semanas hasta un par de meses, con preferencia en los periodos breves.
Las personas del negocio y los desarrolladores deben trabajar juntos de forma cotidiana a través del proyecto.
Construcción de proyectos en torno a individuos motivados, dándoles la oportunidad y el respaldo que necesitan y procurándoles confianza para que realicen la tarea.
La forma más eficiente y efectiva de comunicar información de ida y vuelta dentro de un equipo de desarrollo es mediante la conversación cara a cara.
El software que funciona es la principal medida del progreso.
Los procesos ágiles promueven el desarrollo sostenido. Los patrocinadores, desarrolladores y usuarios deben mantener un ritmo constante de forma indefinida.
La atención continua a la excelencia técnica enaltece la agilidad.
La simplicidad como arte de maximizar la cantidad de trabajo que no se hace, es esencial.
Las mejores arquitecturas, requisitos y diseños emergen de equipos que se auto-organizan.
En intervalos regulares, el equipo reflexiona sobre la forma de ser más efectivo y ajusta su conducta en consecuencia.

(copy paste con el fin de difundir)
Fuente: http://www.dosideas.com/wiki/Desarrollo_Agil_De_Software


Continúando con mi lectura del libro de Ing. de software una perspectiva orientada a objetos de Braude, me encontré con otra tabla que complemente la entrada anterior. dicha tabla nos indica la manera de identificar y retirar riesgos.

*1. Cada integrante del equipo pasa 10 minutos explorando sus temoreas mas grandes para el éxito del proyecto.
*2. Cada integrante especifica estos riesgos en un lenguaje concreto , los pondera, escribe planes de retiro y envía un correo al líder del equipo.
*3. El líder del equipo integra y asigna prioridades a los resultados.
+4. El grupo dedica 10 minutos a buscar otros riesgos.
+5. El equipo dedica 10 minutos a finalizar la tabla de riesgos.
                *Designa ingenieros responsables del retiro de riesgos.
**6. Los ingenieros responsables hacen el trabajo de retiro de riesgos.
+7. El equipo revisa los riesgos durante 10 minutos en las reuniones semanales.
  *El equipo discute los nuevos riesgos percibidos y los agrega.

*antes de la primera reunión.
+en la reunión.
**entre reuniones.



Como podemos observar, el papel del líder de proyecto se vuelve crucial a la hora de retirar riesgo, llamemos retirar riesgo al hecho de erradicar un riesgo, el líder de proyecto debe de tener el big picture de la situación y tener en cuenta todos los riesgos y retirar los mas importantes y sustentar un plan de emergencia para solventar los demás y que no se vuelvan críticos al proyecto y terminen siendo un impedimento de cumplimento en la entrega con el cliente.



Fuentes.
Ingeniería de software. Una perspectiva orientada a objetos
Capitulo 2 Administración de proyectos.
Braude.
on viernes, 13 de abril de 2012
Leyendo el libro de ingeniería de software de Braude me tope con una lista de riesgos ordenados en orden de importancia. Sin duda se me hizo muy interesante y lo comparto.


1. Falta de compromiso de la alta administración.
2. Falla al obtener el compromiso del usuario.
3. Error al entender los requerimientos.
4. Participación inadecuada del usuario.
5. Falla al manejar las expectativas del usuario final.
6. Cambio de alcance y/o de objetivos.
7. Falta de conocimientos o aptitudes requeridas del personal.

Podemos notar que el riesgo mas grande esta en la alta administración, como la negligencia de los jefes puede ocasionar que el proyecto se desmorone.

También nos damos cuenta que si el usuario no tiene el compromiso de participar adecuadamente y jugar su rol como le corresponde puede ocasionar que el proyecto no cumpla con los objetivos.

Sin duda si no entendemos los requerimientos estamos fritos ya que todo el trabajo y esfuerzo por parte del equipo de desarrollo se convierte a nulo si no comprendimos los requerimientos.

El cambio de objetivos y/o requerimientos en una fecha avanzada del proyecto puede ser catastrófico ya que le puede pegar al núcleo del sistema.

Sin duda todos estos riesgos son importantes, ya que incluso con un equipo de desarrollo no preparado ante las tecnologías del proyecto, se puede volver un riesgo potencial.

Fuentes.
Ingeniería de software. Una perspectiva orientada a objetos
Capitulo 2 Administración de proyectos.
Braude.
on miércoles, 11 de abril de 2012
buscando en internet me encontre con un articulo muy interesante que sin duda lo tengo que incluir, para ver el articulo original da click aquí


el articulo trata sobre el desarrollo agil y algunas empresas que no son aptas para hacer negocios factibles ya que no entienden.


-----------------------------------------------------------------------------------------------------------

Hace algunas semanas, nos contactó una empresa con el objetivo de contratarnos para la implementación de un sistema. Había recibido buenas referencias nuestras en su búsqueda de empresas de desarrollo que fueran «confiables» y «trabajaran con calidad».
Luego de una primera conversación telefónica nos reunimos. Nos contó de que se trataba el proyecto y yo les presenté nuestra «filosofía» y «métodos de trabajo». Me pidió que le enviará un correo electrónico contando más sobre estas cosas para discutirlas con sus superiores y ver si realmente eramos lo que buscaban, además me entregó «el documento de requerimientos» del sistema que ellos mismos habían escrito y me dijo casi al despedirnos «Necesito una propuesta económica o cotización de los requerimientos que están en este documento» .
Era un documento muy vago, de 9 páginas y escrito con muchos tecnicismos de su negocio, en realidad no decia mucho, bueno en realidad no decia nada.
No ibamos a hacer la cotización, porque sencillamente no sabíamos que había que cotizar, y probablemente esta empresa tampoco lo sabia. Decidimos escribir un mail explicando lo que podiamos hacer para trabajar juntos, y comenzó un diálogo a través del correo electronico.Quiero compartir la conversación de la cual se pueden sacar algunas conclusiones, pero para nosotros la más valiosa fue que a esta empresa la declaramos persona non grata para trabajar.
Nota: La conversación fue editada para ocultar la identidad del cliente. El texto en gris son sus respuestas.
[1] ==================================================
Estimada Empresa,
Lo que sigue es un resumen de nuestra metodología de desarrollo . Esta es una especie de guía que debemos cumplir ambos y que de nuestra experiencia es la única forma de garantizar el éxito del proyecto.
Por favor, si tienes alguna duda podemos reunirnos para discutirlas en detalle.
De nuestra metodología ágil:
“No podemos cotizar lo que no sabemos cuanto va a tomar en esfuerzo aun…”
Partimos cotizando la(s) primera(s) semana(s) de consultoría (desarrollo) donde hacemos “Story Cards” o levantamiento de requerimientos junto a ustedes.
Es un tiempo intenso (exige muchas horas de ambos) donde en reuniones (participan los desarrolladores y los usuarios de negocio) escribimos en tarjetas los requerimientos del software colocando indicadores (número) del valor de negocio del requerimiento en las tarjetas (1 tarjeta = 1 requerimiento ).
Las tarjetas contienen en una especie de template, algo en la forma:
Para obtener <valor de negocio>
Como <role>
Quiero lograr <objetivo>
Además contienen criterios de aceptación en forma de escenario:
Dado que…
y que…
Cuando…
Entonces…
Todo esto sirve como comunicación entre el usuario y el desarrollador y además crea criterios de aceptación del requerimiento que en cada entrega parcial del software se valida (re-leyendo la tarjeta {“card”} ).
Las prioridades la coloca el usuario (o sea ustedes) por el valor de negocio que representa el requerimiento, es posible re-negociar todo el tiempo las prioridades con el equipo de desarrollo.
Una vez terminada la primera semana de levantamientos de Story Cards (este proceso es denominado ’story-carding’), los desarrolladores le colocan peso en esfuerzo (basado en su experiencia en escenarios similares) . Para esto los desarrolladores pueden separar el requerimiento en requerimientos más pequeños (un requerimiento grande es inestimable en esfuerzo)
Es importante definir bien los criterios de aceptación en las reuniones, pues es la única medida de que se ha terminado el requerimiento.
Para todo lo anterior usamos una herramienta online llamada “Pivotal Tracker” http://pivotaltracker.com
—–
De la implementación:
El entregable de esta primera etapa son los “Story Cards” del sistema más el esfuerzo de construirlo.
Si se aprueba, entonces en la segunda parte (construcción) partimos con el desarrollo de los requerimientos en orden de prioridad. Se crean iteraciones de un máximo de 2 semanas (puede ser de 1 semana). Cada semana tiene un entregable o release donde se ejecutan los criterios de aceptación del sistema junto al usuario de negocios (ustedes).
Si hay cambios (nuevos requerimientos), se crean nuevos story card, se valora la prioridad y en caso de ser alta, se estima y se re-organiza el backlog (pool de requerimientos a implementar en la próxima iteración.)
Del pago del proyecto:
Es siempre contra avance o entregable. El primer pago es una vez terminada la o las semanas de story carding. Los próximos pagos una vez entregados el release en cada iteración.
Se cobrán los avances en cada iteración (cada 2 semanas).
[2] ==================================================
Estimado continuum,
Me parece excelente la metodología AGIL, con la cual he trabajado en el desarrollo de proyectos, pero necesitamos tener una estimación de esfuerzo lo mas pronto posible, de acuerdo a los requerimientos entregados, si tienes dudas al respecto favor enviarlas a la brevedad, para acotar lo mas posible las actividades a desarrollar, ya tenemos la cotización de otros y con toda esta información tomaremos una decisión esta semana a más tardar la siguiente, por lo tanto necesitamos un orden de magnitud de costos para desarrollar este proyecto.
[3] ==================================================
Estimada Empresa,
¿Como puedes estar seguro que las demás empresas que dices que te enviaron cotizaciones entendieron los requerimientos y que estimaron el esfuerzo real?, ¿no has tenido ya pesimas experiencias con esta forma de trabajar?
No podemos estimar lo que no sabemos estimar, sería mentir (que en mi opinión es lo que están haciendo los otros con las metodologias clásicas de cascada) pues los requerimientos que tenemos son muy vagos y una reunión o una llamada telefónica no nos va a ayudar.
De la reunión que tuvimos lo único que rescaté fue que necesitan levantar los requerimientos junto al equipo que los va a desarrollar para poder comunicar que es lo que quieren e incluso para que a ustedes les quede más claro y puedan ordenar las prioridades.
En el mail anterior está la forma en que lo hacemos, si quieres una cotización para competir con los otros en tiempo o esfuerzo entonces preferimos quedar fuera, yo si tengo malas experiencias cuando trabajé en empresas que usaban este modelo y ahora tengo excelentes experiencias usando este nuevo paradigma, pero ambos tenemos que estar convencidos que es lo mejor, sino no funciona.
[4] ==================================================
Estimado continuum,
¿Cuanto tiempo necesitas para hacer el levantamiento que tu indicas y a que costo?
[5] ==================================================
Estimada Empresa,
Un equipo de 2 desarrolladores analistas. Nosotros trabajamos 35 horas semanales, y estarían disponibles para hacer el story-carding, pero ustedes tiene que garantizar el mismo tiempo de disponibilidad del usuario de negocios.
Si no es posible, tenemos que buscar una alternativa como por ejemplo 3 días corridos por 2 semanas o 3 semanas; Esto último en caso que no logremos escribir todo los requerimientos. Lo que si creemos necesario trabajar todo el día (sin interrupciones) para garantizar continuidad.
Entonces el costo aprox del “Story Carding” sería:
2 desarrolladores x [costo-desarrollador-hora-en-UF] UF/h x 24h x [2, 3] semanas = entre xxx.xx UFs (2 semanas) y xxx.xx UFs (3 semanas)
[6] ==================================================
Estimado continuum,
Eso seria factible si decidiramos hacer el proyecto con uds,  lo cual aún está en evaluación junto con otros proveedores, en esta etapa del proceso necesito una estimación de parte de uds de que significa hacer el proyecto en tiempo y costo, pero no es factible que incurramos en un costo (esta semana que llamas story-carding), para que uds nos entregue este dato.
Te invito que nos hagas llegar tus dudas de los requerimientos o tener otra reunión para acotarlos, de manera que con su experiencia en el desarrollo de estos proyectos puedan hacer una estimación
—————–
Notas: En este punto ya tuve deseos de enviar un mail agradeciendo el contacto y que abandonabamos la negociación, esta empresa sencillamente no habia entendido nada y no queria entender. Esperé entonces algunas horas, debatí los mails con algunos de mis colegas en continuum y decidimos que enviariamos un correo más, esta vez un correo estratégico del cual sabiamos que o obteniamos una respuesta esperanzadora o terminaba la negociación, y así lo hicimos.
—————–
[7] ==================================================
Estimada Empresa,
En unas horas más te envio un correo de definición donde te daré algunas cifras y como podriamos hacer para mitigar el riesgo de ambos.
PD: No tenemos dudas en los requerimientos, porque no existen, hay que levantarlos (¿recuerdas los Story Cards?). Al documento que me entregastes le falta mucha información.
[8] ==================================================
Estimada Empresa,
Como lo que estás buscando es tener “Presupuesto en frente” te propongo lo siguiente:
En continuum creemos que cualquier desarrollo de más de 2 meses es demasiado grande para estimarlo adecuadamente en el largo plazo. En nuestra experiencia, siempre se cae en los problemas de:
(A).- Terminar construyendo cosas que en realidad se descubre posteriormente que no son importantes o nunca se usan.
(B).- No poder implementar las sugerencias o requerimientos nuevos que inevitablemente surgen.
En esos casos (proyectos grandes) lo que hacemos es estimar por 8 semanas primeramente y sino alcanzamos, re-estimar por 8 semanas o menos más, y así iterativamente hasta terminar o alcanzar un punto de “Valor de negocio confortable” (a veces ocurre que el cliente se conforma con una parte del sistema que le sirve para operar). Sin embargo no faltan los clientes que piden requerimientos sin valor de negocio porque “creen” que algún día les servirá sin pensar en que estan  afectando el presupuesto.
Entonces, nada garantiza que en 8 semanas se implementen todos los requerimientos con “Valor de negocio” de tu sistema.
La semana de Story Carding (que está incluida en los 2 meses) dirá que tamaño tiene el sistema que quieren construir, ustedes deberán decidir que requerimientos tienen más valor de negocio y por tanto mayor prioridad.
Nosotros estimamos los tiempos de estos requerimientos y los requerimientos que no puedan ser implementado dentro de las 8 semanas debemos renegociarlos en la forma:
(1).- No lo hacemos.
(2).- Estimamos el costo del nuevo desarrollo. Como otro proyecto de X tiempo más (el tiempo que demoren los nuevos requerimientos).
Costo x 2 meses = 2devs x [costo-desarrollador-hora-en-UF] UF/H x 35H/semana x 8 semanas = xxx.xx UF (Total)
No obtuvimos respuestas. Fin de la negociación y declaración de persona non grata.

nota: este articulo fue extraido de: http://blog.continuum.cl/archives/163 solo difundí el articulo ya que me parecio muy interesante.