martes, 30 de noviembre de 2010
Ante soluciones RESTRICCIONES
Esta idea se puede seguir estrictamente como hacen técnicas como CMMI que (resumiendo) consiste en catalogar del 1 al 5 como se está planteando el proyecto de desarrollo de un software. O también se puede ser más constructivo como ITIL que más que catalogar la corrección de un proyecto trata de aportar buenas prácticas que se pueden seguir en un proyecto de desarrollo de software.
miércoles, 24 de noviembre de 2010
Seguimiento de Tareas
- ¿Seguirá la arquitectura que estamos utilizando?
- ¿Controla bien la tecnología?
- ¿A tocado partes comunes? Y si lo ha hecho ¿ha comprobado el impacto?
- Al terminar, ¿lo ha probado lo suficiente?
Hay que hacer algo para que estas “incertidumbres” no se conviertan en una nube oscura que da la sensación de poco control. Esta nube seguro que crecerá al desarrollar mas y mas y al final la sensación general en el equipo de desarrollo será de que el proyecto está mal hecho.
Una forma de evitarlo es hacer un seguimiento completo de las tareas. Completo consiste en seguir las siguientes fases:
1º El responsable de la tarea debe especificar bien en qué consiste la tarea al desarrollador y asegurarse de que la comprende bien.
2º El desarrollador debe explicar brevemente como va a implementar la tarea. Esta explicación debe de ser muy práctica, hasta es recomendable que el desarrollador escriba algunas líneas de código para explicar al responsable como va a implementar la tarea.
3º Una vez terminada, el desarrollador debe escribir en el documento de “soluciones técnicas” como ha resuelto la tarea.
4º Una vez integrada la tarea en el sistema completo (o al menos en una parte que se pueda probar), el responsable debe indicar al responsable de pruebas (que debe de ser una persona distinta del desarrollador y del responsable de la tarea) que debe probar, como y que se entiende por correcto y por fallido.
lunes, 22 de noviembre de 2010
Estudio de clientes. Indecisión
La definición global del software (su concepto general, su apariencia, su navegacionalidad, sus requerimientos de uso, etc..) no deberia definirlos ni el cliente ni el desarrollador si no un tercer participante en el proyecto que sea INDEPENDIENTE a ambas partes.
Mi SCRUM
En lo primero en que yo me centraria es en la arquitectura y en la forma de trabajar. Esto es crucial. Lo que haria seria definir una arquitectura lo mas compleja posible y una forma de trabajar lo mas restrictiva posible (1).
A medida que se vaya produciendo el desarrollo puede suceder que la arquitectura y/o la forma de trabajar sea muy rigida. Si esto sucede entonces podemos empezar a "relajar la forma de trabajar".
Ejemplo: 1º El documento es un perfecto manual para un desarrollador que acaba de incorporarse al proyecto. 2º El equipo ve como normal enviar correos al final del día. |
Hay una premisa que siempre hay que tener en cuenta: “Es más fácil introducir restricciones y pautas para el equipo de desarrollo al principio del proyecto que una vez que ya se ha empezado con el desarrollo”
La manera de establecer la duración de los sprints debe ser a partir de pruebas de desarrollo previas al desarrollo verdadero que establezcan unas medidas fiables de lo que se tarda en hacer el trabajo. Propongo lo siguiente:
1º Definir un subconjunto de muestra. El responsable coge una serie de requisitos que solucionan una parte del proyecto representativa e incluso que puede generar un entregable.
2º División de tareas. Se establecen tareas que son repartidas entre los distintos miembros del proyecto atendiendo a sus roles.
3º Realizar el trabajo y tomar muestras. Se realizan las tareas y se toma muestras del impacto temporal de todos los aspectos que se consideren relevantes:
- Tiempo de desarrollo
- Tiempo de gestión
- Integración de las distintas partes
- Comunicación en el equipo
- Etc..
(1) Cuando digo posible me refiero a que tiene que ser lo mas complejo posible dentro de la suposicion de que todos los miembros del equipo puedan entenderlo o puedan llegar a entenderlo.
SCRUM. Que me gusta y que no
SCRUM es una metodologia para la gestión del desarrollo de software que intenta poner orden en un caos y de una manera simple. En general me gusta pero tiene varios problemas como:
- No plantea como diseñar la arquitectura y cual sera la forma de trabajar.
- Si un desarrollador esta acostumbrado a no tener metodologia entonces no parece muy lógico que no solo tenga que aceptar una ahora sino que encima se le pida resposabilidades por no tener su sprint a tiempo o con la calidad requerida.
- Esta bien suponer desde el prinicipio que los requerimientos van a ir cambiando y que puedes generar versiones rapidamente pero una cosa es suponer que van cambiar otra es suponer que no se conocen y se debe empezar con lo que mas o menos se tenga. Dile al cliente que puede cambiar los requerimientos cuando quiera y te hara hacer tantas versiones que al final no avanzaras nunca del primer requisito.
El tiempo de duración de los sprint “no se puede establecer a ojo” ni en debate entre miembros del equipo. Esta forma simple y rápida de establecer la duración desembocará seguro en una falta clamorosa de calidad en el trabajo realizado (tanto por parte del desarrollador como del responsable) y en crear en los responsables la tendencia de intentar “pillar” al desarrollador en que el trabajo no completo; cuando en realidad lo que está pasando es el proyecto está empezando a ir mal, se nota, se sabe pero NO SE SABE BIEN EL MOTIVO.
SCRUM. Interpretación
Existen 3 fases en la metodologia:
- Inicio: Donde se plantea la arquitectura, la forma de trabajar y en función de estos factores el Scrum Master generá los sprints del proyecto.
- Desarrollo: Se entrega los sprints a los desarrolladores para que los hagan.
- Cierre: Generar un entregable.
Todas estas fases se suceden en este orden pero de forma no rígida, de tal manera que aunque se encuentre en la fase de desarrollo siempre se puede volver al inicio para redefinir la arquitectura y obtener nuevos sprints. De igual manera, en el cierre siempre se puede volver la desarrollo para hacer mas pruebas y eliminar bugs.
miércoles, 17 de noviembre de 2010
Paralelismo
La forma de apoyarme en otra disciplina no debe de ser buscando paralelismos con aspectos actuales de esa disciplina (o más bien, paralelismo con la interpretación subjetiva que hace un desarrollador con los aspectos actuales de esa disciplina) sino interpretando subjetivamente como fue la evolución desde la nada de esa disciplina hasta su estado actual que no conozco (no puedo hacer tengo una interpretación real) pero es evidente que es más madura que el estado de la disciplina de desarrollo de proyectos software que sí conozco.
Uso una interpretación subjetiva y no una histórica porque me interesa más mostrar como interpreto yo (un desarrollador) otra disciplina (la construcción de edificios) más que una recopilación histórica que se basará en la interpretación de otros profesionales (historiadores, arquitectos, empresarios, etc..)
La evolución de la construcción de edificios
El punto de partida de todo es la necesidad. ¿Qué necesidad tenían los seres humanos en construir edificios? Los motivos pueden ser varios:
- No habían suficientes cuevas (o donde sea que vivieran) para todos.Necesidad de resguardarse (mejor de donde sea que vivieran).
- Necesidad de intimidad.
- Poder decidir donde habitar. (Por ejemplo, puede que vivieran en cuevas pero les sería más útil vivir a 3 km de distancia donde está el agua)
- Decidir la estructura de su vivienda.
- Etc..
Ante la necesidad, los primeros individuos salen de su cueva y piensan: “Voy a construir una casa”. Lo primero seria coger cualquier cosa que tuvieran cerca y apilarla de tal manera que fuese “un motón de cosas apiladas” (piedras, madera, etc..) que tuvieran forma de cueva, que es lo que conocían. Tras repetir esta operación varias veces (más bien muchas veces y probablemente durante muchos años) los individuos se dan cuenta de cualquier cosa que encuentren no vale para construir una casa, se necesita un material que al producirlo se puede utilizar para construir la casa.
A partir de la deducción “Se necesitan primero materiales y luego se puede construir” se crean una serie de materiales que son útiles para la construcción y empiezan las innovaciones:
- Se crean los ladrillos, y al apilarlos se construyen las paredes.
- Se crea el cemento, y al ponerlo entre los ladrillos se consigue una pared solida.
- Se crean las vigas y se descubre que:
- Al ponerlas en la parte superior de la casa se puede construir el techo.
- Al ponerlas como apoyo de de las paredes, estas son mas solidas incluso se puede “crear dos pisos”.
Paralelismo . Una forma de evolucionar el desarrollo de proyectos
El punto de partida de todo es la necesidad. ¿Qué necesidad tenían los seres humanos en desarrollar software? Los motivos pueden ser varios:
- Poder ampliar el volumen de información. De poder tratar solo lo que cabía en los libros a poder tratar las "bibliotecas enteras" que caben en un ordenador.
- Poder compartir información en tiempo real (o casi real).
- Agilizar la gestión de cualquier faceta de cualquier negocio.
- Permitir el acceso a cuotas de mercado.
- Permitir el acceso fácil de cualquier persona a cualquier producto, tramite, evento, etc.. que necesite (desde comprar un coche por internet hasta hacer la declaración de la renta)
- Etc..
Ante la necesidad, los primeros desarrolladores piensan: “Voy a desarrollar un software que me sirva para algo práctico, como una calculadora”. Lo primero seria picar líneas de ensamblador (miles y miles) de tal manera que al ejecutar “ese primer programa ” el resultado fuera algo parecido a una suma o una multiplicación. Tras repetir esta operación varias veces (más bien muchas veces y probablemente durante muchos años) los individuos se dan cuenta de que no se puede hacer todo con ensamblador, se necesitan lenguajes de alto nivel.
A partir de la deducción “Se necesitan primero lenguajes de alto nivel y luego se puede desarrollar software” se crean una serie de lenguajes de alto nivel que son útiles para el desarrollo del software y empiezan las innovaciones:
- Se crean distintos lenguajes de alto nivel en los que un desarrollador puede crear aplicaciones para cualquier cosa.
- Se crean programas que crean entornos gráficos para otros programas y asi hacerlos más manejables.
- Se crean utilidades genéricas de todo tipo: procesadores de texto, hojas de cálculo, aplicaciones de tratamiento de imágenes, etc.
domingo, 14 de noviembre de 2010
Una disciplina sin identidad
- Cuando fue la última vez que escuchaste a un arquitecto decir que plantear la construcción de una casa es como plantear el desarrollo de una aplicación web?
- Cuantos edificios y/o estructuras crees que se han levantado sin hacer caso o muy poco caso a los planos y en cuantos desarrollos de aplicaciones informáticas has participado en el que sigas estrictamente lo que dice el diseño?
Tras consultar a arquitectos de manera informal en foros de internet he obtenido dos conclusiones:
- Existen similitudes entre la construcción de edificios/estructuras y el desarrollo de aplicaciones como:
o La necesidad de una planificación previa
o Necesidad de un seguimiento constante del desarrollo
o Obtención de un producto final
o Etc..
pero estas características las tiene también la aplicación de una nueva ley, crear un nuevo plato de cocina, preparar la temporada de liga de un equipo para obtener la copa de la liga, etc.. - Si tan parecido es el desarrollo software a la construcción de edificios/estructuras entonces un arquitecto debería ver similitudes claras con la informática pero de los arquitectos consultados se puede deducir que no tienen ni idea o muy poca idea de cómo se desarrolla una aplicación y son más propensos a comparar una casa con un programa que comparar unos planos a un diagrama UML.
Francamente, un desarrollador de software no tiene ni idea de arquitectura. Es tan fiable por parte de un informático decir que desarrollar una aplicación informática es como construir un edificio que decir que es como realizar una operación a corazón abierto.
Está bien que una disciplina nueva como el desarrollo de software (que en realidad tiene 30-40 años siendo generosos) se apoye en otras más maduras como la arquitectura (que tendrá miles de años) para definirse a si misma, pero ¿se ha perdido el norte?. No hay que olvidar que solo se ha de apoyar en otras disciplinas. Si no se empieza a pensar como desarrolladores nunca tendrá una verdadera identidad el desarrollo de software.