domingo, 31 de agosto de 2014

Regla N°1 de la Ingeniería de Software: Va a cambiar

En serio va a cambiar...

Esta debería ser la primera regla en cuanto al diseño de software, la regla sobre la que se debe sustentar todo el enfoque con respecto al análisis, el diseño y la codificación de un sistema software.

Todo cambia muy rápido en el proceso de desarrollo de un software, el mismo software construido, genera nuevos requisitos, la satisfacción de las necesidades de un proyecto, genera a su vez nuevas necesidades.

Explicado de otra forma la resolución de un problema, genera un entendimiento más claro de dicho problema, y en esta situación, se abren nuevas posibilidades sobre las capacidades del software y el negocio que sustenta.

Actualmente es muy difícil encontrar un proyecto que funcione con las fases tradicionales de la ingeniera de software, y que no requiera regresos continuos a las fases de análisis y diseño, además de un alargamiento innecesario de las fase de construcción. Ese el motivo del auge de la metodologías ágiles. Están pensadas desde un principio para ser validas en un contexto donde el cambio de los requisitos y las necesidades de los usuarios son constantes.

¿Significa esto que los cambios en mitad de la construcción de un software, es algo bueno y deseable?, no necesariamente, no es algo que se deba plantear en esos términos, más bien es algo que se debe aceptar como la realidad el día a día, y preparar nuestros procesos y enfoques para el cambios, si nos negamos a él, solo repercutirá en inacabables horas extras de construcción.

Desde un primer momento debemos estar listos y asumir que nuestro proyecto va a cambiar, y adaptarnos rápidamente a ese cambio, para lo cual necesitamos apoyarnos (entre otros) en los siguientes puntos:

  • Metodologías que estas diseñadas para gestionar los cambios.
  • Herramientas para gestionar los cambios en el software (como herramientas de control de versiones).
  • Herramientas para gestionar las necesidades y los requisitos.
  • Herramientas para probar el software de manera automatizada, para controlar el impacto del cambio en nuestro software de una manera rápida.
  • Software diseñado (y construido) desde el puntos de vista del cambio.
  • Software generado automáticamente, mediante técnicas de generación automática de código.
  • Equipos cuyos integrantes que compartan un "mismo lenguaje", esto es que entienda y apoyen un conjunto de prácticas y estándares de programación, y objetivos comunes para todos.

Profundizare en un futuro en cada uno de estos puntos.

lunes, 25 de agosto de 2014

¡Odio las horas extras!

¡Odio las horas extras!

Aunque es una verdad a medias...

Como muchos otros profesionales del ramo de la ingeniera del software y particularmente la programación, comencé desde muy joven en este mundo, fascinado por la magia de esta profesión, trasnochando para poder encontrar una solución a un problema que se resistía o a un nuevo desafío que me mantenía despierto. Era una sensación difícil de explicar.

Llegado el inicio de mi vida profesional, me vi embarcado en multitud de proyectos, en los que hacer horas extras era los más habitual, pero la sensación no era la misma, no estaba disfrutando lo que estaba haciendo. En cada problema que resolvía, me preguntaba cual era el motivo por el cual habíamos a este punto, y porque nos veíamos mas enfocados a resolver problemas (ya fueran por nuestra culpa o persistentes) que en desarrollar software, que era lo que realmente nos gustaba.. Pareciera que cuanto más esfuerzo y tiempo se dedicaba a un problema, mas problema surgían a su alrededor que requerían a su vez mas tiempo y esfuerzo.

Desde entonces tuve una inquietud creciente, sobre la inutilidad de dedicar tiempo y recursos a proyectos mal enfocados, en los que se desperdiciaban recursos y energías en tareas repetitivas y poco optimizadas. Empecé a interesarme por cualquier proceso que ayudara a aumentar la productividad y la calidad del software.

Los temas en los que más profundice (sin ningún orden en particular) son:

  • Creación de estándares de desarrollo empresariales.
  • Reutilización de código.
  • Creación de software sostenible.
  • Uso de herramientas que ayudan a la codificación
  • Patrones de software
  • Generación automática de código.
  • Automatización de procesos
  • Integración de equipos de desarrollo

El objetivo de este blog, es compartir mi experiencia para ayudar a minimizar al máximo las horas extras, y poder dedicar nuestro tiempo a lo que realmente nos gusta, o nos importa.

¡Allá vamos!