jueves, 18 de enero de 2018

Cómo Medir la Hora de Programación - Tu Experiencia Cuesta Dinero.

En esta oportunidad quisiera exponer mi punto de vista que podría servir de guía para otros a la hora de saber cómo cobrar y medir la hora de trabajo de programación.

Primero expondré el caso erróneo con el cual seguramente has medido las horas de programación que vendes y que seguramente es aprovechado por aquellos que te contratan, sacando ellos provecho de tu experiencia a "low cost", recuerda siempre que tu experiencia (y no solo tus "skills") vale dinero.

El caso erróneo de medición:

Mides tu tiempo por minutos de programación aplicados en forma exacta. Es decir, tardaste una hora creando una rutina, probandola e implementandola. Supongamos que fue algo simple: un bug fix, un enhancement, etc. Le cobras al cliente con esta fórmula:

Dinero = CostoXHora X NumeroHoras.
(ej:  0.5hrs X 100 = 50 monedas)

Esta fórmula (arriba) en varios casos puede estar equivocada. Puedes observar en el siguiente gráfico la cantidad de tiempo afectado de un  potencial "CLIENTE A" en el que estabas laborando antes cuando has sido interrumpido por el "CLIENTE B" (el que te pide los "10 minutitos" de tu tiempo):



En este gráfico puedes comparar cuanto hubieses rendido si nadie te interrumpe (gráfico A) versus cuanto se siente afectado el "cliente A" por causa de la interrupción del "cliente B".  Este tiempo resaltado en color de texto rojo te indica que ese tiempo debe pagarlo el cliente B.  Mas adelante explicaré la razón.

El bloque "tiempo (perdido) de parada.." no se lo estas cobrando al "Cliente B" y luego se lo cobras de nuevo al "Cliente A" en el bloque "tiempo de descanso para..." junto a "tiempo de retomar", lo cual es muy injusto para ese cliente y muy probablemente ni siquiera se lo estabas cobrando. De este modo ocurren:

a) Pérdida de Ingresos para tí.
b) Recargo de tiempo injusto para el otro cliente por causa de la interrupción de otro.

Todo este tiempo en color rojo debe ser recargado al Cliente B.

Caso Correcto de Medición

Supongamos que tenemos una mañana de trabajo con el CLIENTE_A y nadie te interrumpe (ver gráfico A).  En ese caso has laborado de 08:00 HRS a 14:00 hrs continuas, ese tiempo es DINERO.

Si un "clienteB" te pide "10 minutitos" para realizar una tarea (frase mas común de ellos para minimizar y subvalorar tu trabajo con objeto de no pagarte) entonces tu debes considerar todo aquello que interrumpió el tiempo valioso que tenías con el CLIENTE_A, el cual *siempre* existe.

En el siguiente gráfico el tiempo en color Rojo ha sido sacado del CLIENTE_A para poder atender esos "10 minutitos" que el CLIENTE_B te pide.



Los dos bloques a los extremos (de color rojo) etiquetados como "tiempo de parada..." y "tiempo de retomar.." puedes establecerlos a un tiempo fijo de unos 20 minutos cada uno.

La razón:

Nuestro cerebro es un órgano que necesita calentamiento para pasar de una tarea a otra con buena concentración.

Por ejemplo, no puedes saltar de una tarea de base de datos (del cliente A) a otra de análisis de vectores y alta complejidad de matemáticas (del cliente B) DE UN SOLO PORRAZO, nuestro cerebro no funciona así por tanto debes hacer una parada (debido al cliente B) y esta debe ser organizada, por ejemplo:  cerrar un branch en git, documentar que estabas haciendo etc.  Luego ocurre lo mismo para retomar el trabajo que estaba en curso.

Obviamente, si hay una sola tarea en el día y no interrumpe a otra podrás aplicar otro método de calculo de tiempo basado en tiempo de inicio y tiempo de cierre lo cual es lo que comunmente se hace pero que es erroneamente aplicado cuando dos tareas diferentes se mezclan, incluso cuando son dos tareas diferentes del mismo cliente.