Thursday, January 15, 2009

Peligroso UpdatePanel

El UpdatePanel es una golosina para los desarrolladores. Es muy fácil de utilizar y da al usuario una magnífica impresión: mira, las páginas no pestañean todo el tiempo!

Sin embargo, al menos para nosotros, ha resultado una trampa. No he hecho un análisis profundo de toda la funcionalidad que provee, pero hemos encontrado muchísimos problemas:

  1. Al combinarlo con JavaScript.
  2. Al combinar varios UpdatePanel... las interacciones son difíciles de preveer y las consecuencias nefastas.

En honor a la verdad, no toda la culpa es del UpdatePanel. WebForms en sí mismo también ha influido bastante. Por lo tanto:

  1. Migremos a MVC!
  2. Si tienes que usar WebForms, no utilices el UpdatePanel sólo porque es fácil, sin haber estudiado las limitaciones que impondrá a la aplicación.

Wednesday, January 14, 2009

Buen código == Sentido común y cohesión == satisfacción

Si programamos como si estuviéramos creando una teoría llegaremos a un punto en la vida de nuestra aplicación en el que hacer cambios y mejoras se convertirá en el placer de descubrir que "sólo" tendremos que reutilizar lo que ya está hecho.

En una teoría todos los elementos, salvo los axiomas, se derivan unos de otros y es "fácil" crear nuevos teoremas a partir de los que ya se conocen mediante derivaciones lógicas.

Este punto no es fácil de alcanzar, requiere de una buena guía (léase arquitectura + convenciones) y sobre todo de una gran disciplina y esfuerzo por mantener la cohesión de lo que se genere.

Creo que en esto consiste "programar bien" y es lo que persiguen por diferentes vías las metodologías existentes.

En la analogía, que no pretende ser muy estricta, en nuestro programa crearemos nueva funcionalidad a partir de la existente, ya sea reutilizando o modificando. Mientras más fácil sea comprender lo que ya se ha hecho, y cómo funciona, más fácil será reutilizarlo y modificarlo para lograr nuestro objetivo.

Mantener la cohesión requiere aplicar las "buenas prácticas", en especial:
  • Asignar nombres explicativos absolutamente a TODOS los elementos (métodos, variables, clases) por muy insignificante que parezcan.
  • Aplicar SIEMPRE las reglas de nomenclatura que se decidan, de forma que cada nombre contenga la mayor cantidad de información posible para un lector.
  • Mantener la relación entre los nombres y la funcionalidad. Sí, aunque requiera renombrar un archivo en el control de versiones.

Muchas veces he visto como alguien (incluyéndome) crea un pedazo de código "rapidito" para resolver un problema, sin pensar a largo plazo. 2 horas después este pedazo es incomprensible para todo el mundo (a veces incluso para la misma persona que lo escribió), y por lo tanto, no reutilizable ni modificable.

También he visto como se hace una modificación de la funcionalidad sin adaptar los nombres de los elementos involucrados, con idénticas consecuencias.

Estos fragmentos de código actúan como aglutinantes y en poco tiempo habrá más código dependiente de este que tampoco será reutilizable ni modificable.

Lo mínimo que debe hacer un buen programador es mantener la cohesión al nivel que le corresponda:

  • Desarrollador: clases, funciones, propiedades, variables.
  • Arquitecto: todo

Desafortunadamente, las reglas de negocio que debemos implementar seguramente están entre las teorías con menos cohesión que existen. A veces incluso ni se pueden considerar teorías porque hay reglas que se contradicen! Pero ya eso no está en nuestras manos. Lo que podemos hacer es mantener el desorden al mínimo, localizado en la implementación de esas reglas.

Monday, January 12, 2009

Sin llegar al absurdo: entrega al cliente algo sobre lo que pueda opinar

La comunicación con el cliente es mucho más sencilla cuando ambas partes pueden referirse a algo tangible. Por lo tanto, creo que siempre que sea posible se debe hacer un despliegue temprano de la aplicación y fomentar la crítica del cliente.

http://feeds.jeffreypalermo.com/~r/jeffreypalermo/~3/501921276/

Esto tiene el incoveniente de que para el cliente siempre es difícil determinar la profundidad con la que debe probar una funcionalidad, pero si se gestiona bien y con tacto esto es mucho mejor que obtener la opinión del cliente cuando ya se ha avanzado mucho en el desarrollo.

Thursday, October 30, 2008

Análisis de las valoraciones

A pesar de haber leído mucho sobre el tema e intentar hacerlo lo mejor posible, invariablemente los proyectos requieren muchos más recursos que los que valoro inicialmente.

También invariablemente, estas son las causas que he detectado:

Poca profundidad y claridad de los requerimientos iniciales. Los clientes envían un pliego técnico en el que expresan a muy grandes rasgos lo que desean. Basándose en ese documento es que se debe hacer la oferta.

La solución ideal sería "obligar" al cliente a que el documento que aporte sea más completo.

Esta solución no siempre se puede aplicar, que para eso el cliente es el cliente, y estoy seguro de que a mi empresa no le interesa perder de esos sólo porque el arquitecto se niega a hacer una valoración sin un documento de requerimientos más completo.

Por eso, una alternativa más viable sería separar mucho más tiempo, al menos 4 veces el tiempo que se reserva actualmente, para la discusión con el cliente. La mayor parte de este tiempo debería utilizarse antes de que haya más de una o dos personas en el equipo que puedan ir generando contenido inicial e ir haciendo pruebas para determinar la arquitectura final de la aplicación.

Otro aspecto importante es que la valoración debe hacerse en módulos que el cliente pueda entender. Por ejemplo, no se puede poner:
Acceso a base de datos -> 40 horas
sino que hay que adaptarse a la terminología del cliente, y poner
Módulo funcional 1 según documento -> 32 horas
aunque a la hora de implementar se genere primero la interacción con la base de datos de todos los "módulos" del cliente.

La solución obvia sería hacer una valoración interna utilizando las categorías y tareas que mejor reflejen el desarrollo real y después distribuyendo las horas entre los "módulos" del cliente. Pero, por algún motivo, este paso actúa como una lupa de gran aumento, y a todo el mundo le parece demasiado tiempo, incluso a mí mismo, y se comienzan los recortes. ERROR!! La valoración inicial es la correcta.

Debe existir una valoración interna utilizando las categorías y tareas que mejor representen el proceso real de desarrollo, y toda discusión, observación, reducción, etc, que afecte a la cantidad de horas debe hacerse sobre esta valoración. Para entregar al cliente se debe preparar un modelo más comprensible que requiera la misma cantidad de horas.

Por último, se debe reservar tiempo en la valoración para las pruebas de desarrollo que seguramente se harán, y para el "maquillaje" final de la aplicación, algo que el cliente ve como "sencillo" pero que siempre requiere un tiempo extra considerable.

Análisis de mi desempeño actual en la ejecución de proyectos

¿Qué NO hago suficientemente bien? (según mi propio criterio)

1. Valoraciones.
2. Control de las tareas asignadas a los subordinados.
3. Orientación al resto de miembros del equipo de trabajo sobre las tareas a realizar.
4. Selección de las tecnologías, frameworks, metodologías, etc, a utilizar durante el proyecto.
5. Mantener visión global del proyecto.

Mi gestión de proyectos informáticos

Estoy muy inconforme con la manera en que se van desarrollando las cosas en lo referente a los proyectos de desarrollo de aplicaciones informáticas en los que he participado y participo. Es una actividad que me gusta, y además, es mi trabajo, así que este es el primer aspecto en el que intentaré mejorar.

Nota: Hay más cosas que quisiera mejorar, pero no están relacionadas con la informática ni mi con vida profesional, así que no aparecerán en este blog :-)

La ejecución de un proyecto es algo que no depende solamente de mí, pero creo que hay muchas cosas en las que debo mejorar. Publicaré una entrada para el análisis de cada uno de los aspectos.

¿Cómo mejorar?

Para mejorar es necesario determinar:

1. Lo que ya haces suficientemente bien.
2. Lo que NO haces suficientemente bien.
3. En cual de las cosas que NO haces suficientemente bien deseas mejorar.

Se puede hacer un autoanálisis o se puede pedir ayuda a una o varias personas. Casi siempre es una buena idea pedir el criterio de los demás e incluirlo en el autoanálisis, siempre que "los demás" sea gente cuyo criterio valores.

También es una buena idea no perder el tiempo explicando a "los demás" lo que pretendes hacer sino extraer sutilmente la información que deseas.