lunes, 31 de marzo de 2008

Digan NO al Crunch Time

Los gringos le dicen crunch time a esa fase dentro de los proyectos en la cual el equipo de desarrollo ingresa a un estado de sobre-dedicación, trabajando hasta tarde, incluso los fines de semana. Muchos de los que desarrollamos software sabemos, al menos intuitivamente, que esto esto es altamente contraproducente (no me refiero solamente a la salud, estado de ánimo y motivación del equipo) y mientras más tiempo dure, peor.

Lo que no había encontrado hasta ahora era una explicación lo suficientemente documentada como para convencer a un escéptico (léase project manager). La idea básica es que la calidad del código disminuye drásticamente como consecuencia de aplicar esta "práctica".

Aquí tienen un resumen de lo que significa el crunch time y como decir NO:

The Crunch Mode Paradox: Turning Superstars Average

Y esta es la fundamentación detallada de por qué se debe evitar a toda costa:

Why Crunch Mode Doesn't Work: 6 Lessons

viernes, 21 de marzo de 2008

Curso Oficial Certified Scrum Master en Lima

A continuación transcribo un mail que acabo de recibir, de parte del Capítulo PMI de Lima, que muy gratamente me tomó por sorpresa:


Cumpliendo con nuestra propuesta de brindar cursos de nivel avanzado, proponemos a la comunidad PMI, el dictado del curso CSM “CERTIFIED SCRUM MASTER”.

CERTIFIED SCRUM MASTER TRAINING ( CSM), es un curso que consiste en 2 días de Presentaciones, discusión en grupo y ejercicios de tipo interactivo/experiencial, diseñados para enseñar efectivamente los principios y practicas SCRUM. El curso será dictado por un entrenador oficial certificado.

El curso esta dirigido a los potenciales SCRUM MASTERS, a todos aquellos que están trabajando como parte de un equipo, así como los propietarios de producto y a la Gerencia que se beneficiará de los principios y prácticas enseñadas en este curso.

Al finalizar el curso, los participantes recibirán la designación oficial como “CERTIFIED SCRUM MASTER”, un título concedido por la Alianza SCRUM.

Fechas: Lunes 21, Martes 22 Abril 2008 (*).
Costo : US$ 500.00, Incluye Certificación.

Descuentos Especiales:

20% de descuento por inscripción de grupo, mínimo 3 participantes.
15% de descuento por pago adelantado.
10% de descuento para miembros PMI.
Los descuentos no son acumulables.

Las fechas de preinscripción estarán abiertas desde el Lunes 17 hasta el 31 de marzo 2008. Para la Preinscripción enviar sus datos completos o si tuviera alguna consulta, favor enviarlo a este mail: patricia.montero@pmi.org.pe


No me queda más que agradecer a los organizadores. Definitivamente es un oportunidad increíble de aprender, difundir y certificarse en Scrum. Ahí estaré de todas maneras.

(*)[UPDATE: El curso se ha reprogramado para el lunes 23 y martes 24 de junio de 2008. Más información en el Portal del PMI Chapter Lima]

miércoles, 19 de marzo de 2008

Herramientas para Scrum

Ya hace varios meses estoy intentando aplicar Scrum en los proyectos en los que me veo involucrado de una u otra forma. Por ahora no voy a entrar en detalles sobre qué es Scrum y para qué sirve. Si no han escuchado hablar de esta metodología de gestión de proyectos de desarrollo de software, pueden encontrar más información aquí:
Lo que quiero comentar es uno de los problemas que uno usualmente encuentra cuando desea aplicar Scrum a un proyecto real. Siendo una metodología bastante ágil, ligera y poco prescriptiva, es muy frecuente realizar una labor de adaptación al contexto real del proyecto en cuestión. Una adaptación fundamental es elegir las herramientas a utilizar para tener visibilidad, control y seguimiento sobre los artefactos propios de Scrum (básicamente product backlog, sprint backlog, burndown chart e impediment list). Sobre este tema se han escrito incontables posts en los blogs y mensajes en la lista de correo oficial de Scrum.


Algo que es casi un consenso dentro de la comunidad Scrum/Ágil es que siempre que sea posible se deben preferir los paneles informativos (también llamados big visible charts o kanban boards) sobre cualquier tipo de herramienta de software. Esto es mucho más fácil cuando todos los miembros del equipo se encuentran en un mismo lugar (la co-localización es fundamental por muchas otras razones también) y tienen el espacio suficiente en la paredes (siempre deberíamos luchar por tener tal ambiente de trabajo).

Pueden encontrarse ejemplos de cómo hacer esto en el excelente libro Scrum and XP from the Trenches y en varías galerías de fotos de equipos que muestran sus paneles, por ejemplo aquí y también acá. La principal ventaja de esta opción es que utiliza el modelo push de transmisión de información versus el modelo pull de una herramienta de software, convirtiéndose en un information radiator. Es decir, un miembro del equipo recibe la información que requiere sobre el estado del proyecto, prácticamente sin ningún esfuerzo de su parte. Esta información es irradiada hacia él casi sin que se dé cuenta. Con solo levantar la mirada tiene una idea de qué es lo que pasa. Como Scrum advoca mantener esta data permanentemente actualizada, se convierte en una poderosa herramienta de comunicación.

Es cuando el equipo se encuentra distribuido en distintas locaciones, o cuando se desea poder utilizar la información para otros fines, o se quiere mantener informado a stakeholders del proyecto que no participan directamente del desarrollo del mismo, que se hace necesario contar con herramientas de sofware que nos permitan compartir la información de manera más sencilla. Para esto cada vez hay más opciones, tanto gratuitas como comerciales. Esta lista es un pequeño resumen de lo que he encontrado por ahí:
Si buscan algo que puedan usar inmediatamente sin necesidad de instalación o de una curva de aprendizaje, pueden utilizar un Excel compartido (si están dentro de una intranet) o algo como Google Spreadsheets si desean comunicarse a través de internet.

Si bien no he probado todas las opciones mencionadas anteriormente, el producto que más he utilizado y que recomendaría es Scrumworks porque provee una licencia gratuita, es bastante sencillo de instalar y utilizar y provee tanto una interfaz de cliente pesado para modificaciones, como una interfaz web para consultas.


Mi recomendación es que hagan lo posible por tener al equipo de desarrollo en un mismo lugar y con comodidad y privacidad suficientes para poder comunicarse y colaborar sin interrupciones externas. Una vez logrado esto coloquen un panel lo suficientemente visible y actualícenlo con la información producto de las reuniones e hitos del proyecto (daily stand-up meetings, sprint planning meeting, sprint review meeting, retrospectivas, etc).

Además de esto, aconsejo utilizar una herramienta de SW para poder comunicar y acceder a la información de manera remota y también a modo de backup (nunca se sabe cuando puede presentarse un temblor o una remodelación inesperada y no autorizada del ambiente físico del proyecto) . Esto también brinda la posibilidad de exportar la información y de transformarla para generar reportes adicionales.

viernes, 14 de marzo de 2008

Test Driven Job Hunting?

Buceando en la red, encontré este aviso de búsqueda de desarrolladores y me pareció un crimen no mencionarlo acá. Definitivamente es bastante original y está inmejorablemente enfocado al grupo de candidatos que podrían y/o desearían postular.

Proviene de una empresa francesa llamada Leirios. Fue publicado hace casi dos años en el mailing list XP Jobs:

LEIRIOS is looking for 2 senior java developers for its R&D department based in Besançon (France). (French-speaking and fluent with technical English)

We develop our products using eXtreme Programming and we are looking for developers mastering agile methodologies and willing to improve development processes.

Our acceptance tests are the following:

class SeniorDeveloperAcceptanceTest extends TestCase {
Developer candidate;
Collection team;

public void setUp() {
candidate = new Developer();
team = Leirios.getTeam();
}

public void testTechnicalSkills() {
assertTrue(candidate.isJavaExpert());
assertTrue(candidate.canDesignLargeApplication());
assertTrue(candidate.canReduceTechnicalDebt());
assertTrue(candidate.practiceTDD());
}

public void testTeachingSkills() {
assertTrue(candidate.canImproveTeamSkills());
assertTrue(candidate.canArgueAboutAgility());
}

public void testHumanBehavior() {
assertTrue(candidate.canPairProgram());
assertTrue(candidate.canIntegrateWith(team));
assertTrue(candidate.hasPositiveAttitude());
}

public void testMethodologySkills() {
assertTrue(candidate.knowExtremeProgramming());
assertTrue(candidate.canImproveTeamVelocity());
}
}

class SeniorDeveloperBonusAcceptanceTest extends TestCase{

String[] bonusSkills = new String[]{
"canDevelopEclipsePlugins",
"knowSoftwareEdition",
"isReallySmart"};

public void testAcceptedCandidate(){
Collection candidates = Leirios.gatherCandidates();
Developer toBeHired =
Leirios.selectCandidateWithMaxBonus(bonusSkills);

for(Developer candidate: candidates){
if (candidate.equals(toBeHired))
assertTrue(Leirios.willHire(candidate));
else
assertFalse(Leirios.willHire(candidate));
}
}
}
LEIRIOS is an innovative software editor, founded in 2003.
(25 people, offices in Paris, Besançon and München).
http://www.leirios.com

Send your application to job at leirios.com