jueves, 24 de noviembre de 2011

Gestión de proyectos de software

Gestión de proyectos


"La gestión de proyectos es la disciplina de organizar y gestionar los recursos de tal manera que estos recursos ofrecen todo el trabajo necesario para completar un proyecto dentro del alcance, tiempo y limitaciones de costo definidas". [Wikipedia]
Un director de proyecto rara vez toma parte en las actividades que producen el resultado final, lo que hace más bien es esforzarse por reducir el riesgo general de fracaso.

Los 5 principios de selección de personal
·         Elegir los mejores talentos
·         Coincidencia de trabajo (Job Matching)
·         Progresión de carrera
·         Equilibrio de equipo  
·         Eliminación del personal que no se adapte

¿Qué características muestra un buen equipo?
·         Compartir visión/objetivo
·         Identidad de equipo
·         Estructura guiada por resultados
·         Miembros competentes
·         Compromiso con el equipo
·         Confianza mutua
·         Interdependencia
·         Comunicación efectiva
·         Autonomía
·         Delegación de autoridad (Empowerment)
·         Tamaño de equipo pequeño

Gestión de Proyectos orientada a objetivos[1]
Fijar objetivos claros, con fechas de entrega claros, con la menor presencia de ambigüedades es el principio de un proyecto de software. Esa misma claridad ayuda a resolver muchos más problemas de los que se supone.

La gestión de la naturaleza humana
Si todos hicieran lo que debían hacer, no tendríamos necesidad de los administradores de proyectos o jefes de equipo. Si los programadores siempre escribieran código libre de errores, no tendríamos necesidad de equipos de prueba de software. Sin embargo, la realidad de nuestra industria es que los equipos necesitan líderes y gerentes, y el código necesita de pruebas. Como jefe de proyecto, usted se encontrará la tentación de culpar a los miembros del equipo cuando se escribe el código con errores o no cumplir con los compromisos del proyecto, que es una reacción natural, pero una errónea. Si el equipo fuese perfecto, no tendría que estar allí. Su papel, en gran medida, es ayudar al equipo a superar su propia naturaleza humana. Aquí están algunas de las expresiones del equipo de software, convirtiéndose en protagonista condición humana que se puede esperar: Los desarrolladores de software a escribir el código que está lejos de ser perfecto, con diseños que sean más convenientes que estratégicos. Los miembros del equipo participarán en disputas tristes, sin sentido, e infantiles sobre las cosas más triviales. El trabajo se ampliaría para dar cabida a el tiempo asignado para su realización (y más), y los proyectos se ejecutarán tarde. El equipo va a hacer todas estas cosas, no porque son malos, estropeados o infantiles, sino simplemente porque son humanos.

Haz que se sientan apreciados. La gente lucha entre sí a menudo porque están preocupados por su propio sentido de logro y la percepción sobre su trabajo. Cuando los empleados sienten que sus contribuciones son limitadas o están siendo percibidas de esa manera, es común que su frustración se dirija a sus compañeros de trabajo (y su jefe). Los psicólogos llaman a esta "proyección". Haga cumplidos periódicamente… son gratis.

El estado del proyecto hace girar al mundo. Es triste pero cierto. Cuando usted pide una actualización sobre el estado de los entregables del proyecto, los empleados se sienten obligados a entregar un buen mensaje. Recoger con regularidad informes sobre la situación mantiene a los miembros del equipo constantemente interesado en la producción de mensajes de buenas noticias para su gestión. El estado es una entidad que tipo Zen que exige el equilibrio. El personal subalterno y de bajo rendimiento puede tolerar más porque lo necesitan. El personal superior y las superestrellas que requieren menos molesta y más. Uso de informes de estado como un dispositivo para mantener a las personas en el camino y se centró, pero la demanda con cuidado con un ojo avizor sobre quién lo está pidiendo y cómo ello lo percibirán.

Ofrecer una salida para salvar la cara. A veces es necesario señalar a las personas que hicieron una macana o se fueron de ruta. Tienen que cambiar su forma o solucionar un problema. Como un jefe de proyecto y personal, no puede escapar a eso. Dicho esto, desea que la persona que recibe el mensaje de que abandone la sala motivados para cambiar y seguir trabajando con entusiasmo. Si alguien se deja sentir abatido, deprimido, o a la defensiva, las cosas pudiera derivar en resultados cada vez peores. Para evitar esto, asegúrese de que todas las conversaciones duras proporcionen al destinatario una salida para salvar la cara, una manera de salir de la sala con una sonrisa. No es tan difícil de hacer. Conceder algunos puntos, o puntos parciales, sobre las causas últimas por lo general se desinfla mucha de la tensión. En segundo lugar, a pesar de los problemas que se encuentran en proceso, permiten ser optimistas para el futuro si las cosas pueden dar la vuelta.

Haciendo uso de los estudiantes
Los estudiantes son mano de obra barata, a menudo muy productiva, y un gran forma de bajo riesgo para identificar el talento de estrellas. Incluso mejor, por lo general están felices y dispuestos de hacer todo el trabajo duro que sus bien pagados empleados superestrellas no quieren. Siempre me he sentido fuertemente que los estudiantes de prácticas a los estudiantes la cooperación triunfo para el valor debido a la complejidad de las posiciones de software en general significa que los primeros meses en el software trabajo es aprendizaje puro.
Para la mayoría de las posiciones de cooperación, el trabajo dura sólo unos meses, por lo que el tiempo efectivo que usted puede salir de los estudiantes es bastante escaso y, en algunos casos, los estudiantes de cooperación drenan más recursos que los que proveen. Los estudiantes de prácticas se suelen colocar por 8-16 meses, y se puede obtener un valor importante de ellos durante ese tiempo. Es un proceso de bajo riesgo para la identificación de talentos.
Piense en las prácticas de estudiantes como de su oportunidad de "probar y comprar." Si los estudiantes son superestrellas, usted descubrirá rápidamente a través del curso de su trabajo de duración. Si los estudiantes salen grandes o no, la experiencia de trabajo de duración dará una comprensión mucho más profunda de sus capacidades de una breve entrevista o prueba de aptitud podría hacerlo. Si un estudiante es un fiasco, no hay mucho daño, y no tiene la obligación de contratarlo de nuevo una vez que el estudiante termine su plazo. Los estudiantes son una fantástica manera de reclutar a los mejores y más brillantes, con poco riesgo, mientras que les asigna algunas de las tareas bajas en las que no quieres gastar sus programadores de alto costo y altamente experimentados.

El valor de medir el valor
Una de las cosas más difíciles para un equipo de desarrollo, y también uno de los más poderosos, es medir el valor del software que se crea. Es sensacional cómo medir el valor crea valor en sí mismo. Una de las grandes cosas acerca de la medición es que se presta a la imágenes. Se puede ilustrar un número en la forma de un gráfico de líneas, un gráfico de barras u otra forma. Considere un par de ejemplos de mi propia experiencia en IBM.

De ratones, hombres, y los planes de proyecto
Los planes de proyectos de software siempre tienen componentes de negocio (quien es nuestra audiencia, cuáles son las ventajas y beneficios que esperamos traer a ellos, cómo vamos a llevar nuestra tecnología al mercado, cómo va a ser monetizado), los de ingeniería (definiciones de características y especificaciones, el diseño, código, pruebas unitarias, pruebas de función, integración y pruebas de aceptación y pruebas del sistema), y los proyectos asociados a la gestión (análisis de dependencia, de personal y cronograma de desarrollo). En un sector tan dinámico como el nuestro, es virtualmente imposible planificar todos los aspectos de un proyecto desde el principio y ejecutar sin necesidad de variar el plan.

"No hay plan de batalla que sobreviva al contacto con el enemigo." De hecho, sólo los encuentros iniciales de una batalla pueden ser realmente previstas (y sólo si usted está planeando el primer ataque). Si hay un lugar común de la planificación de proyectos de software, es que el plan con el que se termina no puede ser el plan con el que se comenzó. Si es así, uno de los siguientes ha ocurrido:

·         Usted es un adivino y ha predicho el futuro con facilidad.
·         Usted está trabajando en un proyecto muy simple, y es probable que no necesitaba nada lo suficientemente sofisticados como para llamarse plan.
·         No han reaccionado a los cambios del entorno que te rodea, y que está a punto de entregar un proyecto de software que se ha incumplido gravemente sus objetivos.

Los planes de proyecto cambian, ya que, en cualquier proyecto con complejidad moderada, ciertos parámetros no se pueden conocer desde el principio. Desde el momento en que comienza hasta el momento en que el proyecto se completa, las piezas en movimiento, tales como una mejor comprensión de las necesidades, las partidas que se ejecutan antes de lo previsto (unas pocas) y otros que desbordan (varias), competidores introducen saltos en tecnología que fuerzan a modificar su estrategia, y la gente que mover, cambiar o desaparecer. Las estrategias de desarrollo iterativas han ayudado a hacer que la adaptación sea más natural, pero el cambio de un plan de negocios nunca es fácil.

La evaluación de la madurez de su desarrollo
El punto más importante acerca de metodologías de desarrollo de software es contar con una metodología y asegúrese de que el equipo lo está utilizando. Si usted está poniendo hacia fuera código sin un proceso establecido para ello, se va a quemar más tiempo y generar más errores en la parte final. El resultado neto será excesos de programación y presupuesto, de menor calidad y los requisitos probablemente no alcanzados. Las metodologías principales ampliamente en uso hoy en día incluyen los métodos ágiles de desarrollo, proceso en cascada de desarrollo de software, y la creación rápida de prototipos. Vale la pena conocer lo que cada uno de estos es en realidad.

Desarrollo iterativo
Qué es: Una metodología para el desarrollo de software que hace hincapié en la creación de software en las ondas de función. Cada ola debe ser totalmente funcional antes de proceder a la siguiente. Los equipos normalmente evolucionan a partir de un proceso en cascada de un proceso iterativo y luego a procesos más ágiles.
Ventajas: Esta metodología tiende hacia un entorno de desarrollo más estable debido a las características siguientes se construyen sobre una base estable. Generar las primeras etapas de aprendizaje para mejorar la siguiente. Los problemas son descubiertos antes. Características desarrolladas en algunas de las primeras iteraciones de obtener una mayor exposición a las pruebas y análisis de usabilidad.
Desventajas: las características finales del ciclo presionan en tiempo, poniendo un alto riesgo de baja calidad o falta de entrega. Los equipos maduros cortarán funciones para mantener la calidad y el horario características de alto riesgo temprano y de bajo riesgo (o de baja importancia) hacia el final, reduciendo al mínimo este peligro.

Scrum
Qué es: Una estrategia para organizar a la gente en un equipo de desarrollo para el trabajo de alta eficiencia y colaboración. Un scrum es un grupo de personas trabajando en un proyecto, cada uno con funciones específicas, como propietario de producto y un scrum master. Los scrums se reúnen regularmente (a diario) a tiempo fijo (por ejemplo, 15 minutos) y se organizan en torno a períodos "sprints", de tiempo de un par de semanas con los objetivos específicos definidos por el scrum. El scrum también hace hincapié en demos y la retroalimentación de los primeros usuarios. Además de las reuniones diarias, programan reuniones para ayudar a planificar los sprints y revisar las pruebas de sprints.
Ventajas: Este método es efectivo para forzar/fomentar la colaboración, el logro de respuesta temprana, y mantener el ritmo. El Scrum es un lugar sencillo, ideal para empezar como una incursión en los métodos ágiles. La metodología scrum/ágil se extiende a la planificación y gestión en todo el ciclo de desarrollo en orden de prioridad.
Desventajas: Aunque las reuniones diarias de scrum fomentar la colaboración y el progreso, algunas personas pueden empezar a tratar a presionar implacable en las actualizaciones y en el status de desarrollo. En segundo lugar, el scrum no es un proceso de desarrollo completo, es mejor aplicada como parte de un proceso iterativo/ágil. No cubre la tecnología/desarrollo de las prácticas, ni tampoco trata de iniciar un proyecto o la puesta en producción.

·         Al iniciar cada iteración, el equipo revisa el trabajo pendiente del proyecto y selecciona la parte que terminará como un incremento de funcionalidad incorporado al software al terminar la iteración.
·         Al final de la iteración el equipo presenta el incremento de funcionalidad a las partes implicadas en el proyecto.
El equipo revisa los requisitos, considera la tecnología disponible, evalúa sus conocimientos, y de forma colectiva determina cómo implementar la funcionalidad.

Roles
Scrum tiene una estructura muy simple. Todas las responsabilidades del proyecto se reparten en 3 roles:
·         Propietario del producto
·         Equipo
·         Gestor de Scrum (Scrum manager o Scrum Master)

Características
·         Scrum es un método adaptativo de gestión de proyectos que se basa en los principios ágiles:
·         Colaboración estrecha con el cliente.
·         Predisposición y respuesta al cambio
·         Prefiere el conocimiento tácito de las personas al explícito de los procesos
·         Desarrollo incremental con entregas funcionales frecuentes
·         Comunicación verbal directa entre los implicados en el proyecto
·         Motivación y responsabilidad de los equipos por la auto-gestión, auto-organización y compromiso.
·         Simplicidad. Supresión de artefactos innecesarios en la gestión del proyecto.


Proceso de desarrollo ágil
Qué es: También conocido como el Proceso de entrega ágil disciplinado, esto es una expansión del modelo de desarrollo iterativo en una metodología de software en toda regla de desarrollo. Se añade de scrum diario, equipos multidisciplinarios (desarrollo, pruebas de usabilidad, beta y envasado, comercialización, y así sucesivamente), y los ciclos de prueba totalmente completos para cada iteración. El desarrollo ágil hace hincapié en la adaptación a los conocimientos adquiridos en cada iteración.
Ventajas: El desarrollo ágil añade mejoras significativas en la calidad sobre la base iterativa modelo de desarrollo a través de más pruebas exhaustivas de cada iteración. Los scrums diarios mantienen a todo el equipo coordinado, y los equipos multidisciplinarios para que el trabajo es más que un festival de codificación. El desarrollo ágil captura el valor de negocio deseado (con especial énfasis en las historias de usuario para dar cuerpo a las definiciones tradicionales de problema) y busca una retroalimentación constante que los objetivos se están abordando.
Desventajas: Agotamiento. El desarrollo ágil es increíblemente eficaz, pero mantiene una intensa presión sobre los equipos de medida que pasan de iteración a iteración. La intensidad es mucho mayor que el desarrollo iterativo solo porque la metodología incluye varios aspectos adicionales del proceso de desarrollo, aparte de diseño y código.
En segundo lugar, como con cualquier modelo iterativo, las características finales del ciclo consiguen exprimir todo el tiempo.
En tercer lugar, la voluntad de adaptar los planes de producto basado en una nueva comprensión de cada iteración significa que los miembros del equipo (y empresarios) no puede saber con certeza lo que va a ser entregada hasta muy tarde. Un punto importante obstáculo se produce cuando los equipos de liderazgo tratan de aplicar los métodos ágiles para entregar proyectos de alcance fijo en una línea de tiempo fijo. Lo ágil se presta a sí mismo a la adaptación y la voluntad de compromiso en el contenido o en el cronograma a medida que las iteraciones perfeccionan la comprensión del equipo de las necesidades y prioridades.
En cuarto lugar, a diferencia de la metodología de cascada, que durante años ha abogado que el código sea probado por gente que no es su autor, el desarrollo ágil promueve las pruebas basada en autor como un método para acelerar el ciclo de prueba. Esto se suma a las pruebas de eficiencia, pero también presenta un riesgo considerable, ya que cualquier mala interpretación de los requisitos del proyecto que el programador tenía durante la edición del código probablemente se extenderá en el esfuerzo de la prueba.

XP: Programación Extrema

Qué es: Esta variación del desarrollo ágil pone gran énfasis en la programación por parejas (ver foto abajo), el desarrollo basado en pruebas (TDD), en el lugar las necesidades del cliente, la refactorización del diseño, y las revisiones de código intensa.
Ventajas: XP lleva los beneficios de las mejores características de ingeniería de software a un extremo. Se impone la idea de que dos cabezas piensan mejor que uno en cualquier trabajo de diseño y codificación, y el énfasis en las revisiones de código lleva a la calidad del código notablemente más altas que las revisiones de código siguen siendo la industria el método más eficaz para la detección de defectos y eliminación.
Desventajas: Los extremos rara vez son saludables en todos los aspectos de la vida, y por lo general este modelo no escala a los equipos grandes. A través de TDD, casos de prueba se escriben antes que el código del producto, que define la función prevista del producto aún está por escribirse. Debido a que los casos de prueba son en sí mismos el código, los defensores de XP escribir código que define el código (en lugar de escribir una especificación del lenguaje natural), un enfoque que algunos han argumentado que es incómodo y desalienta a recursos eficaces requisito.

Desarrollo lean
Qué es: Esta metodología de gestión de proyectos está estrechamente relacionado con el desarrollo iterativo. Favorece las decisiones de ciclo tardías, donde más conocimiento y entendimiento se dispone: “Comprométete a lo más tarde posible." Se hace hincapié en la reducción de residuos y la sobrecarga de proceso, se trata de reducir la burocracia. El desarrollo Lean también hace hincapié en la entrega de productos al mercado lo más rápido posible. El mantra del desarrollo magra dice mucho de su filosofía: "Piensa en grande, actúa pequeño, falla rápido, aprende rápido".
Ventajas: Este método mejora la eficiencia de la organización mediante la eliminación de residuos. La metodología Lean hace hincapié en la evaluación continua, idealmente a través de la medición, para eliminar los residuos. Esto explica por qué las obras de desarrollo ágil, proporcionando las filosofías fundamentales detrás de él. Requisitos y código que no contribuyen al valor de los clientes se dejan de lado. Los planes de producto no son considerados compromisos hasta tan tarde en el programa como sea posible.
Desventajas: el desarrollo Lean es más sobre los principios que de procesos. Es la metodología para los líderes para ayudarlos a implementar el desarrollo ágil de manera eficiente e integrar el proceso de desarrollo ágil con el pensamiento de negocios. El desarrollo Lean es alto en ideales, pero un poco menos específico acerca de las medidas preceptivas para su ejecución. De hecho, es más conceptual, y se necesita un mayor esfuerzo de aplicar que, por ejemplo, meter el scrum. Los programadores junior a menudo pierden el valor.

Lean Startup
“Lean Startup" es un término acuñado por Eric Ries, su método aboga por la creación de prototipos rápidos diseñados para poner a prueba hipótesis sobre el mercado, y utilizar la retroalimentación de los clientes para evolucionar mucho más rápido que a través de las prácticas más tradicionales de desarrollo de productos, tales como el modelo de cascada. No es raro ver a Lean Startups liberar el código nuevo a los tiempos de producción de muchas veces al día, a menudo usando una práctica conocida como la implementación continua.
Según el New York Times, "El término ‘lean startup" fue acuñado por el Sr. Ries, de 31 años, ingeniero, empresario y blogger. Su inspiración, dice, fue el proceso de manufactura lean, afinado en las fábricas japonesas hace décadas y centrada en la eliminación de cualquier obra o inversión que no produzca valor para los clientes. "
Lean startup es a veces descrito como Lean Thinking aplicada al proceso empresarial. Un principio central del pensamiento Lean es reducir los residuos. Los procesos lean startup reducen los residuos mediante el aumento de la frecuencia de contacto con clientes reales, por lo tanto, de las pruebas y evitan suposiciones incorrectas del mercado tan pronto como sea posible [5]. Este enfoque trata de mejorar las tácticas empresariales históricas, reduciendo el trabajo necesario para evaluar los supuestos sobre el mercado, y disminuyendo el tiempo que toma una empresa para encontrar la tracción del mercado. Esto se conoce como producto viable mínimo (MVP).

En The Entrepreneur's Guide to Customer Development, Brant Cooper y Patrick Vlaskovits añaden un cuarto elemento, y que es el uso de potentes herramientas de análisis y de bajo costo y fácil de usar. Si bien algunas características de los lean startups se ​​han practicado durante años, la confluencia de estas tendencias es un reciente fenómeno que aumenta la velocidad de iteración o el "número de ciclos de aprendizaje por dólar", como el foco de negocios que ajustan productos a mercados. [6]

Principios del Lean Startup
·         Entrepreneurs are Everywhere
o   En Estados Unidos… pero acá también "Think big. Start small. Scale Fast."

·         Entrepreneurship is Management
o   Un emprendimiento es una institución, no sólo un producto por eso requiere un tipo de gestión enfocado en un ambiente de extrema incertidumbre.
·         Validated Learning
o   Los emprendimientos existen para aprender cómo construir una empresa sostenible. Este aprendizaje puede ser validado científicamente realizando experimentos frecuentes que le permiten al emprendedor evaluar cada elemento de su visión.
·         Innovation Accounting
o   Hay que medir progresos, establecer puntos de referencia y priorización de tareas. Eso requiere un tipo de contabilidad diseñada para emprendimientos.
·         Build-Measure-Learn
o   Todos los emprendimientos convierten ideas en productos, miden como responden los clientes y aprender si pivotear o perseverar. Todos los emprendimientos deben acelerar este bucle.

Proceso de Desarrollo de Cascada
Qué es: Este es el modelo clásico de desarrollo de software, donde el desarrollo progresa en una secuencia lineal desde los requisitos hasta la especificación, luego el diseño, código, unidad, prueba de verificación funcional, prueba de integración, de aceptación/beta, prueba del sistema de verificación, y el producto listo para despachar.
Ventajas: Los desarrolladores de software saben lo que tienen que hacer por adelantado. Los planificadores de negocios, marketing, y todos los equipos de ventas comprender el contenido del producto y fecha de lanzamiento desde el principio. Bajo riesgo para desarrollos bien conocidos y tecnología familiar.
Desventajas: comprenden plenamente las necesidades y complejidad de producir una solución que va a entregar en 9-18 meses es por lo general casi imposible de hacer por adelantado. El proceso de cascada casi garantiza una necesidad de un cambio de plan a mitad de ciclo, pero no está bien diseñado para darle cabida. En segundo lugar, un ámbito fijo y horario aprieta calidad cuando aumenta la presión programar en la parte final del ciclo, donde todas las pruebas y corrección de defectos se producen. Por adelantado los planes son frágiles y se rompen con facilidad. Mercados, necesidades del cliente, adquisiciones, competencia, y consideraciones similares cambiantes continuamente rompen el plan.

Figura 1. Modelo de Cascada



Prototipado rápido
Qué es: Esta es la idea de que cualquier software de diseño complejo debe ser un prototipo antes una prueba de concepto, para entender sus fortalezas y debilidades antes de ejecutarlo. Este modelo se utiliza a menudo como una fase temprana del modelo de desarrollo cascada.
Ventajas: El prototipado rápido saca mucho del riesgo del proceso de desarrollo de cascada. Los primeros prototipos ayudan a explorar los límites de un diseño propuesto al inicio del ciclo.
Desventajas: el código del prototipo suele ser bastante desordenado y limitado. Después de un prototipo exitoso, el código de prototipo debe ser desechado, y el equipo debe continuar el enriquecimiento del proyecto utilizando la metodología de cascada clásica. Sin embargo, los equipos han encontrado por doquier que es casi imposible resistirse a usar el código de prototipo como el punto de partida para el desarrollo de productos. El resultado neto es un producto final integrado en su núcleo en la parte superior de la baja calidad del código no fiable.

Figura 2. Historia del uso de los modelos de ciclo del software


Procesos de desarrollo de software actualmente
Las organizaciones modernas de desarrollo tienden cada vez más hacia los métodos ágiles (ver el lado izquierdo de la figura), pero los métodos ágiles también tienen sus problemas. Ya sea que elija una estrategia ágil o un modelo más clásico, puede aplicar estos métodos para gestionar una organización de software de primera clase y desarrollar software de alta calidad.



Prueba de Madurez

PREGUNTA SI? PUNTOS
1.       ¿Su equipo históricamente entrega los proyectos con las características de mayor prioridad, con una calidad excelente, y en 20% antes de la fecha de entrega prevista originalmente?  (10 puntos)
2.       ¿Su equipo utiliza un sistema de seguimiento de defectos? (10 puntos)
3.       ¿Su equipo utiliza un sistema de control de código fuente? (10 puntos)
4.       ¿Está claro para cada arquitecto, programador y tester el proceso que se debe utilizar para los requerimientos, especificación, el seguimiento de la gestión de código, pruebas y defectos? (10 puntos)
5.       ¿Su equipos crea y revisa planes de prueba que definen las pruebas que pretenden llevar a cabo? (10 puntos)
6.       ¿Su equipo de gestión de proyecto rastrea la tasa de defectos de las nuevas tasas de arribo y del tamaño nuevos retrasos?
7.       ¿Todas las personas que trabajan en el producto tiene una definición clara y unánime para la palabra "hecho?" (5 puntos)
8.       ¿Llevas a cabo pruebas de campo (programas alfa y beta) y/o estudios de usabilidad para obtener retroalimentación temprana? (5 puntos)
9.       ¿Sus desarrolladores entiendan claramente los objetivos de negocio a corto plazo para el producto que están trabajando, como la claridad en lo que los segmentos principales del mercado que son para el producto? (5 puntos)
10.   ¿Su equipo de pruebas interno puede escalar con el tamaño y la intensidad de su mayor número de usuarios esperado? (5 puntos)
11.   ¿Tiene la organización de desarrollo una mayor claridad tanto en la fecha de finalización del proyecto y una serie de hitos intermedios? (5 puntos)
12.   ¿Su equipo crea y revisa completamente las especificaciones del producto antes de que esté más del 30% terminado con la fase de codificación? (5 puntos)
13.   ¿Tiene su equipo descripción por escrito de los requisitos del proyecto, en la forma de una especificación, enunciados de los problemas, o los escenarios de usuario? (5 puntos)
14.   ¿Están por lo menos el 80% de los casos de prueba automatizados y se realizan de forma periódica? (5 puntos)
15.   Total (puntuación máxima: 100)
Si su puntaje es inferior a 70 en esta prueba, tienes un serio problema con la madurez de su organización de software. 
Si su puntaje es mayor de 90, felicitaciones, en mi opinión, está trabajando en un grupo que está en el percentil más alto de madurez en desarrollo de software.

Defectos de software y costos y eficiencias
Siempre es bueno captar los defectos del software en las etapas iniciales de cualquier ciclo de desarrollo de software. Si éstos salen a la luz en los estadios finales, resulta en altos costos y riesgos para todo el proyecto.
·         Más costos de soporte significan menos dinero para un nuevo desarrollo.
·         Desarrolladores de software gruñones significa un equipo de desarrollo menos motivado y eficiente.
·         Defectos a finales del ciclo en gran medida afectan la capacidad del equipo para concluir el proyecto, dando lugar a excesos de horario.
·         Menor calidad en el producto enviado conduce a menor satisfacción del cliente y reduce el éxito del producto. La baja calidad se traduce rápidamente a reducción de los ingresos.



Con el entendimiento de que los esfuerzos de calidad en las partes finales del ciclo cuestan dramáticamente más y produce menos, ¿cómo un aspirante a gerente de proyectos evitará los escollos y atolladeros de la detección tardía en el ciclo?
·         Revisiones de diseño, especificación, y código siguen siendo el método más eficaz para la detección de defectos tempranos.
·         Use una metodología de desarrollo iterativa para que las pruebas se lleven a cabo en las olas durante todo el ciclo de desarrollo, no como una masa de fondo del proceso.
·     Construya en la capacidad de prueba mediante la adición de numerosos puntos de seguimiento, afirmaciones y ganchos de programación que puede obligar a las condiciones de prueba (por ejemplo, la simulación de una restricción de memoria o falla en el dispositivo cuando no existe).


[1] Ligthstone, Sam “Making It Big in Software”. Prentice Hall, capítulo 15

Aprendizaje validado


¿Qué es el aprendizaje validado?

Eric Ries afirma en su libro, The Lean Startup, la definición de aprendizaje validad del siguiente modo:
Aprendizaje validado no es una racionalización ex-post ó una buena historia diseñada para esconder una falla.  Es un método riguroso para demostrar progreso cuando uno esta inserto en un mundo de extrema incertidumbre en el cual un emprendimiento crece. El aprendizaje validado se demuestra siempre por mejoras positivas en la métricas del núcleo del emprendimiento.
En los negocios, especialmente durante los inicios de un emprendimiento, enfrentará un montón de fallas, sin importan cuán buenas sean su visión y sus ideas.  Muy a menudo, escondemos esas fallas pensando y creyendo que fueron parte del aprendizaje. Esta es una percepción común para la mayoría de la gente que quiere emprender y convertirse en emprendedores. Ellos creen falsamente que la falla misma es una forma de aprendizaje.
En su libro Ries enfatiza el término aprendizaje validado. Alienta el aprendizaje para que sea medido, como si fuese una métrica. De ese modo, el error no es una medida suficiente del aprendizaje a menos que ese error sea utilizado para mejorar el rendimiento. El aprendizaje validado ocurre cuando usted continúa para ensayar y mejorar sus ideas o productos, y ha resultado en un cambio positivo en su rendimiento. De más está decir, el aprendizaje validado es mensurable al contrario de la excusa usual de esconder las fallas como aprendizaje.


Estudio de caso: Nordstrom Innovation Lab

Estudio de caso: El Nordstrom Innovation Lab
Por Eric Reis

  
El estudio de hoy el caso responde a una serie de preguntas a la vez sobre los principios de startups: ¿pueden ser utilizados dentro de una compañía del Fortune 500? ¿Pueden ser usados ​​para vender productos físicos de baja tecnología? ¿Pueden ser usados ​​en una tienda? He estado con confianza responder a preguntas como estas sin parar durante los últimos meses. Yo creo que la respuesta es . Pero, como dice el refrán, ver es creer. Y ahora usted no tendrá que tomar mi palabra para ella.

Nordstrom está actualmente el puesto # 254 en la lista Fortune 500 (que sí, ¡lo busqué!) con más de $ 9 millones en ingresos. Un emprendedor berreta no está en esta lista. Y sin embargo, se enfrentan a las mismas presiones competitivas que están causando cada compañía moderna a echar un vistazo largo y duro en el proceso que utilizan para innovar. Cualquiera que haya leído The Innovator's Dilemma sabe lo difícil que es para una empresa que ha sido un éxito invertir en innovaciones potencialmente conflictivas.

He estado hablando con JB Brown, el director del Laboratorio de Innovación Nordstrom sobre la publicación de un estudio de caso. Al mismo tiempo, Nordstrom había enviado un equipo de camarógrafos para documentar el laboratorio en el trabajo. Cuando vi el primer corte de los videos que estaban produciendo, yo sabía que sería una poderosa herramienta de enseñanza. Una cosa es hablar de "la experimentación rápida" y "aprendizaje validado" como conceptos abstractos. Es otra muy distinta es verlos en acción, en un ambiente del mundo real. Demostrando su comprensión de producto viable mínimo (MVP - Minimum Viable Product), JB sugirió que empezar poco a poco, mediante la publicación de un "MVP estudio de caso". Así es como este mensaje llegó a ser.

A continuación, encontrarás dos videos: uno sobre el laboratorio, y otro que contiene un estudio de caso del equipo de trabajo. Mira a los dos. Si tiene alguna pregunta, JB ha accedido generosamente a ponerse a disposición de contestarlas en un futuro post. Deje su pregunta como un comentario a esta entrada. Si hay suficiente interés, vamos a ampliar este MVP.

"Una lean startup dentro de la lista de compañías en el Fortune 500"


"Nosotros realmente no sabemos cuáles son las características del producto todavía ..."


Éstos son algunos aspectos destacados que he encontrado especialmente interesante:

1.       Iteraciones de una semana. Una de las cosas más difíciles para la innovación empresarial se está rompiendo a través de la lentitud que es la velocidad por defecto para la mayoría de las iniciativas. El Nordstrom Innovation Lab resuelve este problema mediante el trabajo en incrementos de una semana. En el segundo video más arriba, verás construir un producto completamente nuevo en una semana de extremo a extremo.

2.       Genchi gembutsu. Este es uno de mis conceptos favoritos del Sistema de Producción Toyota. Que se traduce aproximadamente como "ir y ver por ti mismo" - es la versión de Toyota de "salir del edificio." Al hablar cara a cara con los clientes, vendedores y gerentes en una tienda física, el equipo de la innovación es capaz de identificar una oportunidad de que puedan ejecutar en forma extremadamente rápida. Pero ellos van más allá de simplemente "salir del edificio" - que en realidad se instaló físicamente en una tienda al por menor de toda la semana. Construyen productos, probar nuevas características, y obtener retroalimentación a todos a la intemperie. Usted realmente tiene que verlo para creerlo.

3.       Experimentos simples, rápidos. Yo escucho todo el tiempo que el desarrollo de iOS, con sus innumerables retrasos de aprobación y los obstáculos de implementación significan que usted no puede utilizar técnicas de desarrollo rápido en esa plataforma. Sin embargo, en este video usted va a ver a este equipo a superar esa tendencia con un poco de ingenio. Simplemente trajo dos iPads con ellos. Mientras que la aplicación está en desarrollo, el equipo de ventas está utilizando un iPad, y los desarrolladores están trabajando en otro. En cada descanso, el equipo de ventas de swaps iPads con los desarrolladores - siempre utilizando la última versión de la aplicación. (La misma técnica se trabaja con prototipos de papel, también.)
¿Tiene preguntas para JB y el resto del equipo de laboratorio Nordstrom Innovación? Publicalos como comentarios.


Opinión: Escuchar a los clientes correctos


¿Cómo escuchar a los clientes, y no sólo las personas que hablan fuerte?
Por Eric Ries  

La frecuencia es más importante que hablar con los clientes "correctos", especialmente al principio. Usted sabrá cuando la persona que está hablando no es un cliente potencial - simplemente no entenderán lo que usted les está diciendo. En los primeros días, el truco está en encontrar a nadie entre todos los que se puede entender cuando se habla acerca de su producto.

En nuestro primer año en IMVU, pensábamos que estábamos construyendo un producto de chat  con avatares 3D. Fue sólo cuando le preguntamos a gente al azar que trajimos para las pruebas de usabilidad "¿qué piensa usted de nuestros competidores?" que aprendimos diferente. Como la gente de producto, pensamos en la competencia en términos de características del producto. Así que la comparación natural, pensamos, sería con otros productos basados ​​en avatares 3D, como Los Sims y World of Warcraft. Sin embargo, los primeros clientes todos lo comparaban con MySpace. Esto fue en 2004, y nunca había oído hablar de MySpace, y mucho menos teníamos una comprensión de las redes sociales. Es necesario escuchar que los clientes lo dicen una y otra vez para que podamos tomar una mirada seria, y, finalmente, darnos cuenta de que las redes sociales era núcleo de nuestra actividad.

Más tarde, cuando la empresa era mucho más grande, tenía a todos en nuestros equipos de ingeniería de acuerdo en sentarse en el test de usabilidad una vez al mes. No era un compromiso de tiempo enorme, pero eso significaba que todos los ingenieros estaban en contacto regular con un cliente real, lo que era muy valioso. La mayoría de las personas que construyeron nuestro producto no se era los clientes objetivo. Así que simplemente no había sustituto para ver a los clientes con el producto real, en vivo.
Hoy en día, cuando hablo con los fundadores de emprendimientos, la respuesta más común que llegar a la pregunta "¿usted habla con sus clientes?" es algo así como "sí, yo personalmente respondo a los correos electrónicos de atención al cliente." Eso es ciertamente mejor que nada, pero no es un buen sustituto para llegar de manera proactiva. Como Seth escribe esta semana en el blog de Seth's Blog: Listening to the loud people, los clientes más agresivos no son necesariamente los que uno quiere oírl. Por ejemplo, mi experiencia con los adolescentes es que son muy reacios a llamar o enviar correo electrónico pidiendo asistencia, incluso cuando tienen un problema grave. Simplemente no necesitan otra figura de autoridad en su vida.

No hay que confundir la pasión con el volumen. Las personas que son el alma de un startup en una etapa temprana son evangelistas adoptadores. Estas son personas que entienden la visión de su empresa, incluso antes de que el producto esté a la altura, y, lo más importante, van a comprar su producto, sobre esa base. En algunas situaciones, también son la minoría más que quiere llegar y ponerse en su cara cuando haces algo mal, pero no siempre. Si usted está obteniendo mucha negatividad de alguien, es más probable que sea un troll de internet - no de un evangelista temprano. (Para más información sobre evangelistas tempranos y por qué son tan importantes, vea el artículo de Steve Blank  The Four Steps to the Epiphany)

Aquí está la sugerencia de Seth Godin que quiero enfatizar:
Y aquí hay una cosa que yo haría sobre una base regular: Consigue una cámara de vídeo o tal vez una máquina de copiar y recoger comentarios y sugerencias de las personas que más importan a su negocio. A continuación, muestre los comentarios con el jefe y sus empleados y otros clientes. Hágalo regularmente. La información que expone es la retroalimentación que usted toma en serio.
No es suficiente con mirar los comentarios que viene a través de su escritorio. Usted necesita promover situaciones en las que usted - y todos los que trabajan con usted- es probable que veamos información que realmente importa. Algunas técnicas que he encontrado especialmente útil:
1.       Construya su propia encuesta de seguimiento, utilizando una metodología como  Net Promoter Score (NPS) para identificar y obtener un chequeo de rutina de los promotores (y para descartar a los detractores). Como un buen efecto secundario, NPS le da una tarjeta de informe muy fiable sobre la satisfacción del cliente.
2.       Cree un foro exclusivo para miembros, donde sólo los clientes calificados (tal vez, los clientes de pago) pueden publicar. Deje que se conecten entre sí, y también con usted. Trate a estas personas como un VIP, y escuche lo que tienen que decir.
3.       Establecer una junta de asesoramiento al cliente. Busque una docena de clientes que "hayan captado" su visión. La forma en que yo he hecho esto en el pasado (cuando yo estaba tratando con clientes muy apasionados) es hacer que elaboran periódicamente un informe de progreso del "estado de su empresa". Yo insistiría en que este informe se incluirá en los materiales en cada reunión de la junta, sin censura y sin tapujos.

miércoles, 23 de noviembre de 2011

Opinión: ¿Qué hace un CTO emprendedor?


¿Qué hace un director de tecnología (CTO) de un emprendimiento en realidad?
Por Eric Ries  



¿Qué hace su director de tecnología en todo el día? Muchas veces, parece que la gente está pensando que es sinónimo de "el tipo que se le paga para sentarse en la esquina y pensar pensamientos " técnicos" profundos" o "el tipo que llega a sola vez en un reorganizar mi proyecto en el último minuto por un capricho”. He tratado de no estar a la altura (¿o bajeza?) de los estereotipos, pero no es fácil. Carecemos de una definición clara y coherente del trabajo.
Cuando le he pedido a mentores míos que han trabajado en grandes empresas sobre el papel de un CTO, por lo general hablan de la importancia de ser la cara externa de la plataforma tecnológica de la empresa, un evangelista de desarrolladores, clientes y empleados. Eso es un trabajo importante, por cierto, y he tenido que hacerlo de vez en cuando. Pero no creo que la mayoría de los emprendimientos realmente tengan una necesidad de que alguien haga ese trabajo a tiempo completo.
Entonces, ¿qué quiere decir CTO, además de simplemente " técnico fundador que realmente no puede manejar a alguien?"
Siempre he asumido que no tendría que gestionar a nadie. Ser un gerente no sonaba divertido – bien metido, que realmente quiere ser responsable por las acciones de otras personas? Quiero decir, ¿usted ha visto a otras personas? ¡Ellos pueden hacer cualquier cosa! Por lo que inicialmente gravité hacia el título de director técnico, y no vicepresidente de ingeniería. Yo pensé que volvería a traer a un profesional para hacer la gestión y programación de tipo material, y que podría mantenerse enfocado en asegurar que construimos la tecnología realmente impresionante. Pero en el camino, algo extraño sucedió. Se hizo más difícil y más difícil separar el funcionamiento del software de cómo el software está estructurado. Si usted está tratando de diseñar una arquitectura para aumentar la agilidad, ¿cómo puede funcionar si algunas personas no están trabajando en Test-Driven Development (TDD) y los demás? ¿Cómo puede funcionar si algunas personas usan el pre-building y otros usan el “5 why’s” para tomar decisiones? ¿Y qué pasa si el despliegue tarda una eternidad? Algunas opciones pueden mejorar el rendimiento del software a expensas de la legibilidad, la capacidad de despliegue, o la escalabilidad. ¿Debiera tomarlos? Estos me sonaban a problemas técnicos, pero cuando lo hace cualquier tipo de análisis causal resultaban ser problemas de la gente. Y no hay realmente ninguna manera de abordar los problemas de la gente desde la barrera.
Así que terminé aprendiendo la disciplina de dirigir a otras personas. Resulta que yo no era demasiado malo en ello, y me di cuenta qué tan gratificante que puede ser. Pero desde que pasó un largo tiempo en un rol híbrido CTO / VP de Ingeniería, todavía tengo esa molesta pregunta. ¿Qué se supone qué el CTO debe hacer?
Esta es mi opinión. La tarea principal del CTO es asegurarse de que la estrategia de tecnología de la compañía sirva a su estrategia de negocios. Si esto suena demasiado simple o demasiado genérico, piense por un segundo si los hay compañías que usted conoce hace la inversa. ¿Alguna vez has oído a un técnico el uso de galimatías para hacer que suene como una idea de negocio que él o ella no le gustaban y era prácticamente imposible de implementar? Eso es lo que se debe tratar de evitar.
Voy a tratar de dividirla en cinco habilidades específicas.
  • Selección de plataforma y diseño técnico - si su estrategia de negocio es crear un emprendimiento de bajo capital, altamente iterativo es mejor utilizar herramientas fundamentales que la hagan fácil en lugar de difícil. ¿Masivas bases de datos propietarias? No lo creo. ¿Puede la compañía meterse en sus herramientas cuando fallen y corregirlas? Si no, ¿quién va a insistir en cambiar a software libre y de código abierto? Cuando los proyectos son para despegar del suelo, quién puede consultar con el equipo para asegurarse de que sus planes son viables?  ¿Quién se hará responsable por el impacto de sus proyectos en la plataforma en su conjunto?       
  • Ver el panorama general (en detalles gráficos) - El director técnico debe ser la persona en la sala que se puede mantener en su cabeza todo lo que su tecnología puede y no puede hacer. Eso significa saber lo que está escrito y lo que no, lo que la arquitectura puede y no puede soportar, y cuánto tiempo se tardaría en construir algo nuevo. Eso es más que dibujar diagramas de arquitectura, sin embargo. Ser capaz de ver la macro y micro al mismo tiempo es una característica de todos los técnicos realmente grande que he tenido el privilegio de trabajar con ellos.
  • Proporcionar opciones - otra característica de un buen director técnico es que nunca dicen "eso es imposible" o "nunca haría eso." En su lugar, se encuentran las opciones y puede comunicar a todos en la empresa. Si el CEO quiere cambiar por completo el producto con el fin de servir a un nuevo segmento de clientes, usted necesita a alguien en la sala que pueden digerir las necesidades de la nueva (propuesta) de negocios y diseñar los costos de cada uno de los enfoques posibles. Algunos técnicos tienen una tendencia sólo para "decidir por ti" y le dará la "mejor" opción, pero eso es peligroso. No se puede tener un diálogo honesto, si una de las partes conoce todas las respuestas.
  • Encontrar el 80/20 - esta fue mi parte favorita del trabajo. A veces, estás en una reunión en la que alguien quiere construir una nueva característica del producto. Y en su mente, lo tiene todo especificado de rabo a cabo. Sus rebanadas, sus cubitos, y probablemente hasta como hará para lavarte tu coche también. En mi mente, se están acumulando los costos (de un mes para que una parte, dos meses para que la otra parte, uh oh!). En un mal día, acababas de darles la noticia aleccionadora. Pero un buen día se veía de este modo. En el momento que entendía cual era el  objetivo de la característica adicional para los clientes, a veces podía ver una manera de obtener el 80% del beneficio al 20% del costo. "¿Sería usted capaz de aprender lo que usted necesita saber si esta característica sólo estuviese en rodajas, pero no en cubitos? Porque si no es necesario agregar un módulo de corte en cubitos, se puede reutilizar el condensador de flujo a través de las llamaradas solares ...." Me quedé sorprendido constantemente sobre la frecuencia con la respuesta fuese algo así como "¿en serio? ¿Cortar en cubos es lo caro? ¡Sólo lo dije como un capricho nomás!"

  • Crecer a los líderes técnicos - Me gusta formalizar esta responsabilidad al final designando a algunos ingenieros como "técnico líderes" y delegar en ellos el trabajo de guiar a la dirección técnica de los proyectos más y más. Esta es la única forma de escalar. También me obligó a poner en claro qué aspectos de la dirección técnica de nuestra compañía eran realmente principios importantes, y que eran simplemente artefactos de cómo llegamos allí. Con varias personas tratando de trabajar con el mismo estándar, tenía que ser mucho más nítidos en nuestras definiciones. ¿Fue el hecho de que estábamos utilizando principalmente PHP esencial, o se podría agregar nuevas herramientas escritas en otros idiomas? ¿Fue un hecho importante o irrelevante que la mayoría de nuestro código web era de procedimiento y no orientada a objetos? ¿Y qué si alguien quería escribir su módulo en el estilo de programación orientada a objetos? Mediante la delegación y la formación, creamos un cuerpo de líderes que intervenir para proveer servicios tipo CTO a sus subordinados. Y trabajando juntos, creamos un equipo cuyo conjunto era mayor que la suma de sus partes.

Quiero agregar una última idea, aunque reconozco que es objeto de controversia, en la frontera en el límite entre la CTO y vicepresidente de ingeniería. No sé lo mucho que estoy influenciado por haber llevado dos sombreros, pero creo que es lo suficientemente importante como para salir en una extremidad y agregar.
  • Aprópiese de la metodología de desarrollo - en una instalación de desarrollo de productos tradicionales, el vicepresidente de ingeniería o algún otro directivo a tiempo completo sería el responsable de asegurarse de que los ingenieros escribieran las especificaciones adecuadas, bien conectadas con control de calidad, y también ejecutaran la  "trenes" de cronogramas  para las versiones. Pero creo que en un emprendimiento lean, la metodología de desarrollo es demasiado importante para ser considerado "sólo de gestión". Si el equipo se va a utilizar TDD o escalabilidad JIT (just-in-time), por ejemplo, estas decisiones tienen un impacto enorme en cómo la arquitectura debe parecerse. Como mínimo, creo que el CTO y los líderes de tecnología tienen que ser responsables por los análisis de los defectos por análisis causal usando los 5 why’s. De lo contrario, ¿cómo pueden saber cuáles son sus puntos débiles y asegurarse de que el equipo y la arquitectura los arregle? Esa tarea requiere de alguien que ve todo el panorama.

Su director de tecnología (CTO) puede ser un gran arquitecto, evangelista, diseñador de la interfaz o depurador increíble. Esos son grandes habilidades para tener y tengo curiosidad de ver que funciona o no para usted. Yo seré el primero en admitir que mi experiencia es limitada, así que estoy recogiendo anécdotas. ¿Ha trabajado con o para un gran director de tecnología? ¿Qué los hizo tan excepcional? ¿Qué es una cosa un nuevo director de tecnología por primera vez podría aprender de ellos?


Mercado de software: Las redes sociales

Diversos spots sobre el crecimiento indetenible de las redes sociales
"El único límite es tu imaginación"









Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Hostgator Coupon Code