domingo, 17 de diciembre de 2017

Procesos de Negocio. Importancia


Nota del autor: algunas cuestiones no resultan importantes entre ciertos profesionales de la ingenieria en general, tal es el tema de los procesos, bueno  aqui va mi opinión, espero quede bien fundamentada.

Me gusta pensar que los procesos generan igualdad. En una organización, los procesos colaboran a que cualquiera de sus integrantes obtengan la misma meta, independientemente de quienes son, cual es su rol, o que poder poseen.

También me gusta pensar que los procesos dan garantías. Esto es, que ejecutando sus tareas / actividades se alcanzan o concretan las metas para las que estan diseñados.

Me gusta imaginar que los procesos completos ( aunque es díficil que lo esten) cubren la mayoría de los casos, lo que permite a la organización ser estable. Todos saben que deben hacer y cuando; esto no es un tema menor.

Por último, los procesos forman la cultura en la organización. Esto es casi consecuencia de todo lo anterior.

En algunos momentos hemos conversado con otros colegas sobre la importancia de tener  documentados los procesos de negocio y sobre la forma de documentación. Solo quiero decir esto al respecto:
  • Se debe documentar lo que se considera importante. Lo que sirve para lo mencionado arriba.
  • Si se desea comprar o desarrollar aplicaciones para ser más eficaces y eficientes, los procesos deberian estar concientes, entonces deben existir más allá de las personas que hoy trabajan en la organización. Los procesos deben estar institucionalizados.
  • Los procesos explicitados permiten a la organización desarrollarse sobre base cimientales fuertes
  • Si vas a estudiar un sistema de información necesitarás documentación que avale los requerimientos y posibles oportunidades de mejora. Bueno allí necesitas procesos documentados.
  • Entender un sistema de información suele implicar entender primero el proceso de negocio subyacente.
Respecto de la documentación he encontrado múltiples variantes que van desde texto puro a gráficos. Personalmente me gustan los diagramas de actividad y los casos de uso con alcance de negocio, pero no son los únicos. También existen formas como: manuales de procedemiento y cursogramas, diagramas de flujos de datos, entre otros. Debo decir que usando los diagramas de actividad y casos de uso, no he vuelto sobre otras herramientas.

Documentos relacionados: Procesos de negocio. Introducción

Procesos de Negocio. Introducción

Nota del autor: es inevitable que para llegar al punto en cuestión tenemos que buscar un punto común para comenzar el relato y de allí avanzar. Está introducción tiene ese objetivo.

Introducción
Las organizaciones, las personas, la sociedad, las ciudades, las familias, entre otras, se organizan persiguiendo metas u objetivos. Si querés, las cosas no se hacen porque si, por lo menos no en la mayoría de los casos. En la mayoría existe una meta aunque sea implícita que los moviliza.
Conseguir objetivos se hace realizando acciones, tareas y actividades, o subprocesos, procesos, incluso superprocesos. La variedad de agrupamientos ( y en breve aclararé por qué digo agrupamientos) es importante. Nota: Intentaré no copiar, ni traducir definiciones de otros, pero no puedo asegurarlo. :)
Proceso
Diremos que un proceso de negocio es un conjunto de actividades diseñadas y organizadas para alcanzar una meta dentro de un negocio u organización; sea la organización gubernamental, pública, privada, con fines de lucro, sin fines de lucro, institucional y mil etc. más.

Una organización, para alcanzar sus objetivos organizacionales, debe crear e implementar procesos de negocio que interactuan o se realcionan entre ellos y posiblemente con otros que están fuera de la organización.Superprocesos
Cuando tomo varios procesos de varias organizaciones cuya interralación pemiten alcanzar metas más altas, entonces estamos en precencia de superprocesos.  Por lo tanto un superproceso de negocio es un conjunto de proceso en donde participan al menos 2 organizaciones distintas para alcanzar metas que las trascienden.
Bueno pero no vayamos tan alto.
En una organización puede tener varios procesos que al unirse alcance metas mayores. El concepto de negocio surge como agrupamiento dentro del límite de una organización. Ahora esas fronteras estan en jaque. Si se conjugan todos los procesos de la organzacion tambien estamos en presencia de un superproceso; en este caso el superproceso es intra organizacional.
Subproceso
Un proceso de negocio podria subagrupar sus actividades en subprocesos. si se quiere, un subproceso es un proceso de negocio que alcanza un meta, pero esta no alcanza por si sola a cumplir una meta organizacional. Aqui me quiero detener pues la meta de un proceso tampoco  es exclusiva de las metas de la organización, podemos estar refieriendonos a otra cosa. Ejemplo el proceso de pago de empleados no cumple una meta organizacional en una organizacion cuya meta es de negocio; sin embargo tiene la fueza de un proceso. La linea es delgada :(
Actividad 
En cuanto a las actividades, para este documento coincidirán con tarea. En ambos casos las trataremos como sinónimos. Una actividad es un conjunto de acciones diseñadas y organizadas para alcanzar una meta dentro de la misma línea de tiempo. Esto es, una actividad se resuelve en forma continuada hastaalcanzarse la meta o fallar, a esto suelo denominarlo continuidad temporal.
En un proceso la continuidad temporal es interrumpida, en la actividad no. Dicho de otro modo, cuando realizó acciones en forma continua y continuada, entonces estás en presencia de una actividad, de otro modo será un proceso.

Me gusta pensar que no tengo la última palabra, pero avanzo en la dirección planteada. Espero estás ideas sumen.

No se si habrá procesos de una sola actividad, pero si he encontrado actividades de una sola acción. No puedo asegurar que las otras combinaciones no existan.

sábado, 11 de marzo de 2017

Matriz de Dependencia de requerimientos

Introducción

Cuando realizamos proyectos en donde los requerimientos no están estabilizados, se produce mantenimiento o evolucionan por alguna otra razón, es más que conveniente establecer las relaciones de dependencias entre los mismos.
No suele ser muy visto en la práctica profesional, pero es una técnica importante para establecer y medir los impactos rápidos de los requerimientos ante la presencia de un cambio.

La matriz

La matriz de dependencias de requerimientos suele ser utilizada para varios fines. Un fin inmediato es poder observar el impacto que se tiene en los requerimientos, ante el cambio de un requerimiento.
La matriz de dependencias puede ser util para determinar los grupos de requerimientos altamente relacionados para que sean trabajados en distintos equipos en cualquiera de las disciplinas de un desarrollo clásico: análisis, diseño, programación y prueba.
Matriz de dependencias de ejemplo

Expliquemos las dependencias

El requerimiento 4 es un requerimiento de información, por lo que este muestre debe ser ingresado (y posiblemente modificarse). Esto es natural, la información no aparece de la nada, necesita de un alta; pero si se desconoce que se requiere consultar; lo que se presuma en el alta estará incompleto hasta llegar al requerimiento 4, entonces será necesario ajustar el alta posteriormente. No conviene comenzar por los requerimientos que no son de información. 
El requerimiento 3 refiere  a una modificación; existen muchos datos (quizás todos) que puedan ser modificados; pero para crear una modificación se debe primero saber que es posible modificar y cuales datos de los ingresados; consecuencia es conveniente conocer el alta (o altas) para aplicar la modificación.
No todas las dependencias son tan lineales, existen complejidades adicionales, pero uno puede suponer con escaso margen de error que si se requieren nuevos datos del requerimiento 4, posiblemente habrá impacto en el requerimiento 1 y con otra probabilidad en el requerimiento 3 que es un requerimiento que depende del requerimiento 1.

Los profesionales de sistemas sabemos que rapidamente aparecen nuevos requerimientos y hablar de un sistema con 50 requeirmientos no es ni lejano, ni loco. Si esta situación se presenta se deben agrupar los requerimientos. ejemplo en casos de uso.

Otras utilidades

El orden de dependencia sirve para que el analista pueda establecer una estrateria de trabajo si lo necesitara.


domingo, 5 de febrero de 2017

La Documentación

Luego de muchos años de profesión como analista de sistemas , ya no me caben dudas sobre algunas cosas:
  1. la documentación es sumamente importante para soportar y mantener el trabajo de un proyecto o producto
  2. documentar absolutamente todo es demasiado y poco probable. En algunos casos inútil.
El reto de cualquier profesional de sistemas es el de encontrar el equilibrio sobre qué documentar, con qué grado de talle y cuándo hacerlo.

La documentación es cultural, si el profesional no documenta su obra, en mi criterio esa persona no es un profesional, es un artista hasta el primer mantenimiento y luego sin lugar a dudas un malabarista con todas las letras.

Es muy importante dejar rastro de la obra, sino la obra termina no existiendo.

Las documentación sirve para facilitar el mantenimiento y reducir las sensaciones, los conflictos y las malas interpretaciones.

Nadie lee todo y nadie sabe todo, pero existe un responsable del producto que debe tener ciertos elementos para hacer evolucionar  al producto de software desarrollado e implementado , en nuestra cultura es el analista-diseñador del sistemas.

El programador para bien o para mal tendrá siempre una visión parcial del producto total, excepto que el programador sea analista en el mismo proyecto, pero es algo que va perdiendo fuerza y sostenibilidad con los softwares cada vez más complejos.

La primera premisa básica en cualquier intervención sistémica es que debe existir un mínimo de documentación y no es el código ese mínimo, excepto que sea un prototipo, aún así lo pongo en dudas.
La documentación permite comunicar ideas, conceptos y decisiones. Alguna documentación resulta crítica para el proyecto / producto y otra resulta complementaria.
Como sea, y en cualquier metodología con la que desarrollemos nuestro  trabajo profesional, este debe quedar documentado.

Se documenta para los cambios, para la evolución del producto y para tener un punto de partida para el crecimiento del software, del sistema o de la aplicación (o como te guste llamarlo).
Se documenta para conocer el impacto.

No te olvides que los requerimientos, cambian, las reglas cambian, el cliente cambia y los trabajadores de tu organización cambian, incluso cambian los equipos, entonces tenemos buenas razones para documentar, pero no perdamos de vista que debemos documentar lo que merece la pena ser documentado. Por esto, la documentación irá evolucionando en la medida que se necesite.
Los requerimientos funcionales son necesariamente documentables; en definitiva ellos dicen que debe hacer el software.
Las reglas de negocio refieren a las normas y pautas sobre la que el software está limitado a funcionar dentro del marco de, por ejemplo, una organización.
Luego puede aparecer un set de modelos interesantes que serán más relevantes en ciertos proyectos que otros. En mi opinión es visión del profesional expandir la documentación, o bien, retraerla en la medida que así lo vea necesario.
Es importante pensar en un mínimo y en la calidad. Generar documentación que nadie entiende o nadie le resulta de utilidad es una pérdida de dinero.

domingo, 25 de diciembre de 2016

La prueba ataca

La prueba ha evolucionado; pasando de ser vista y tratada como arte hasta un visión de proceso.

De la nada y, observando la poca calidad de la entrega de un producto de software, la prueba se transformó en el primer instrumento de control, luego se hizo fase, más tarde un proceso que atravesaría todo el ciclo de vida de proyecto primero y de producto después.

Sin embargo, en el ADN de los profesionales de sistemas, la prueba continúa siendo maltratada y demonizada.
La prueba es un trabajo para principiantes, es poco relevante, es un trabajo "menor". Si un profesional piensa esto, tendrá que volver a re-pensarse.  Fea la actitud.
La prueba no es una actividad de segunda mano. Veamos que con los años se ha transformado en un proceso, a pesar de los profesionales, en segundo plano ha continuado creciendo a pesar de nosotros mismos, los profesionales de sistemas. Algo tiene que haber.
Me gusta ver la prueba como una guía para una planta que está creciendo. Me gusta ver a las personas que realizan esa función como "GUARDIANES de la calidad"
El probador, tester o responsable de ejecución de la prueba tiene una función vital. Asegurarse de encontrar errores antes que los encuentre el cliente en PRODUCCION.

La prueba es inevitable. Sin prueba no hay calidad y los errores aparecerán por docenas (para ser humilde) .

La prueba que no encuentra errores es una prueba deficiente. El responsable de prueba ( y no solo de ejecución) debe encontrar errores. Es su fin.

Con el tiempo se asimiló que cuanto antes se encuentran errores, más fáciles son de corregir.
También se observó que los errores no solo están en el código, sino que en el diseño, en el análisis, en la definición del producto y hasta en la misma prueba. Este pensamiento hizo que la prueba atravesara a todo el ciclo de vida del producto.

Otro mito interesante que surge en que la prueba es sentarse y ejecutar un programa y, ver que onda,  o sea, onda veo si encuentro error. Este es otro error.
La prueba debe ser pensada, por esto, algunos autores definen al proceso como:

Definir que probar
Diseñar la prueba
Ejecutar la prueba
Corregir los errores

Estas super actividades son subprocesos en si mismos, requieren diferentes roles y no refieren a sentarse y probar.
Así que ahora además tendremos que pensar que si la prueba está al menos involucrando estas cuestiones entonces se trata de algo más sentarse frente a un equipo, correr un programa y fijarse si se encuentra un error.

El proceso de prueba se irá "desarrollando" a lo largo del proyecto de desarrollo, no cabe de duda. Es un proceso continuo.

¿Por qué los programadores reniegan de los probadores?
Ponete a pensar que un programador, genera una “obra de arte” y el probador es el crítico de la obra de arte. Además si bien el probador realiza una crítica constructiva o regenerativa; el ego del programador le impide verla. Claro, esto también está cambiando; es CULTURAL.
Incluso algunas organizaciones contribuyen a la desmejora CULTURAL considerando el valor hora de la prueba de menor rango. Otro pensamiento erróneo instalado.

Igualmente convengamos que la ejecución de la prueba no es una actividad "FELIZ", pero habrá que buscarle la vuelta.
La actividad requiere de un perfil, me refiero a la ejecución, metódico y estructurado, que permita ver que su trabajo engrandece la calidad del producto. Una persona con espíritu crítico pero no soberbio. Al fin y al cabo cuando el probador encuentre el error, nadie podrá negarlo.
El probador debe tener las libertades para proponer nuevas miradas sobre la prueba en cualquiera de sus partes; el probador es el usuario de lo que se prueba.
El subproceso que define que probar necesita del conocimiento del sistema que se desarrolla, el diseño de la prueba requiere de algún conocimiento del negocio.
El área de control de calidad tiene la responsabilidad de definir buenas prácticas y lineamientos de trabajo. La Gerencia debe sponsorear la calidad sosteniendo la prueba a pesar del stress, los líderes de proyecto son artífices de sostener la prueba a pesar del stress.
Las auditorías internas y externas, las revisiones de pares son otras formas de controlar la calidad, son otra forma de probar.
Es muy significativa la imagen de la bola de nieve que comienza pequeña en la punta de la montaña pero se es impresionantemente grande al llegar al pie de la misma.
Un requerimiento mal encarado al principio produce ese efecto en el final del desarrollo de un producto. Probar lo antes posible es una premisa de este proceso continuo.
Por lo mencionado, es importante validar los requerimientos desde su concepción.

La prueba falla cuando no se encuentran errores. Ojo siempre hay errores algunos aun subyacentes, pero están.
Cuando una prueba no es eficiente deben encontrarse variantes.

lunes, 28 de noviembre de 2016

El secreto de las herramientas. Un secreto gritado a voces.

Todos sabemos que las herramientas ayudan a los profesionales de todos las áreas en su trabajo.

Algunas herramientas son más completas, otras más eficaces, algunas facilitan el trabajo, otras permiten hacer el trabajo más rápido. Como sea, sin herramientas muchos trabajos no se podrían realizar.

Clavar un clavo sin un martillo o ajustar los tornillo de una rueda sin al menos un llave CRUZ, serían tareas demasiado complejas, difíciles o imposibles de ejecutar, incluso para profesionales avezados.

La herramienta sola no es nada, dependemos de la habilidad de quien la usa, la herramienta debe estar en manos de un trabajador (worker); él es quien cambia el destino de una batalla.

Tener la herramienta sin el worker sólo te hace poderoso en una mesa, durante una charla, pero no en el campo de batalla.

En el área de conocimiento de software las personas y las herramientas son elementos importantes de la calidad, diría que la interacción producida entre la persona y la herramienta es mucho más importantes que los elementos por separado. La persona tiene el conocimiento y el herramienta el don de facilitarlo. El conjunto es un simbiosis fundamental.

No es concebible desarrollar software sin ambos elementos, mucho menos con calidad; pero recuerda el verdadero secreto no es la herramienta sino la persona que la usa.

De este modo comprenderás que si pones tu éxito sólo en las herramientas te estarás equivocando y si solo lo ponés en las personas será insuficiente deberás realizar una mezcla útil.

Tampoco puedes esperar que la relación se base en tomar un individuo  y darle una herramienta. El individuo debe conocer y saber hacer con la herramienta.

El éxito de la relación lo consigues cuando el profesional sabe usar la herramienta y tiene arraigado los conceptos que le permiten volverla más eficaz.

De nada sirve que se tenga una herramienta para modelar diagramas de actividad, si el profesional no conoce sobre  diagramas de actividad. Puede que haga un dibujo con componentes de diagrama de actividad, pero ¿estará haciendo un diagrama de actividad?

domingo, 20 de noviembre de 2016

Tareas de Análisis. Características

Introducción

Sin importar la forma que le des al proyecto, ni cual ciclo de vida tomes como base; un proyecto de desarrollo siempre tendrá las tareas de análisis, diseño, codificación y prueba. Son tareas básicas.

Puedes tener motivos y razones super convincentes para negar una actividad básica. Puede suceder que utilices un generador de código y la programación se simplifique, estamos de acuerdo; se consume menos esfuerzo; pero la tarea existe.

La forma que adquiera el proyecto no es nuestro centro. Algunas personas prefieren invisivilizar ciertas tareas, diciendo que no hay diseño, o que no se realiza la prueba. No importa lo que digan. Si no explicitas la prueba te está faltando o esta oculta bajo otro título.

No se debería pasar un producto de software al cliente sin hacer pruebas; no debería comenzarse la programación sin un diseño mínimo. Lo que no se haga donde corresponde quedará en manos del que sigue en un proceso de desarrollo. Si el que sigue es el cliente, bueno es tu riesgo.

Luego según la cultura de tu empresa, de tu equipo o tu región realizarás proyectos en donde algún tipo de tarea destaque sobre otra; siendo, por ejemplo, las pruebas mínimas y de un solo tipo.

En este blog trataremos las características de las actividades básicas. Nuestro centro es la tarea de análisis.

Objetivo

Explicitar las características generales de la tarea básicas de análisis dentro del marco de un proyecto.

Análisis

El análisis es un tarea que puede especializarse en muchas subtareas y muchas formas; pero una característica casi natural es que es una actividad netamente iterativa y cognitiva; estas son las características que la destacan.

Un analista realiza un conjunto de acciones para comprender el sistema bajo estudio, volviendo y una otra vez sobre tareas que parecían terminadas, pero no lo están.

Característica 1. Materialización del producto de trabajo.
Un analista realiza una entrevista y comienza el análisis; como consecuencia descubre omisiones, falta de información y otras yerbas; el resultado volver a realizar una entrevista.

El párrafo anterior muestra que avance pero no produje nuevos artefactos; comencé con una entrevista y por el estado del arte regresé por una nueva entrevista. Es cierto que he avanzado pero no en forma lineal sino iterativa. Continuo relevando el sistema pero con otro conocimiento inicial.

Luego pasaron 2 días y el analista tiene más dudas que productos de trabajo elaborados. Esto es y debe considerarse completamente natural. Lo importante no es documentar el sistema, sino comprenderlo y luego documentar la comprensión. Como sea, pueden pasar varios días de borradores, bosquejos y anotaciones; pero ninguna producción concreta.

Es importante tener presente está característica pues, en una tarea de análisis de una semana es probable que comencemos a ver producción a partir del día 3 o 4; esto es aproximadamente en el 50% del esfuerzo ejecutado. En una tarea de análisis de 15 días se puede comenzar a ver la producción de la documentación cuando la tarea lleva un 20 %, pero no será cerrado hasta un 90%  avanzada su ejecución.

Estas ideas son cuestionables; en el sentido que las personas tienden a tener distintas estrategias de trabajo. Algunos profesionales crean al principio todos los documentos que saben que usarán, lo cual puede parecer que se han desarrollado muchísimos artefactos; pero ninguno está ni siquiera completado con contenido significativo; ver muchos documentos realizados es una falsa presunción de avance en muchos casos.

Característica 2. Cantidad de productos de trabajo
El análisis es una de esas tareas que crea un número interesante de artefactos: listas de requerimientos, reglas de negocio, maquinas de estado, modelos del dominio, tabla de actores, diccionarios de datos.

Mientras que en otro tipo de negocios cada actividad produce un producto de trabajo ( o 2), en el análisis se producen al menos una decena. Algunos ni siquiera estaban planeados...grrrr.

Esta cantidad no es sinónimo de tamaño. Hacer 10 productos de trabajo sobre un total de 20 no significa que se ha realizado el 50 % de la tarea. Si pensabas eso, pues lo siento no es así.

Característica 3. Evolución de productos de trabajo
El análisis tiene eso viste, pensás que estás terminando un producto de trabajo y cuando comenzás (o continuás con) otro; descubrís que estabas errado.

Ey!!!!, no debería decir que la tarea de análisis es una tarea compleja; pues bien lo es.

Ahora bien, la tarea de analisis es de estas tareas que cuando más crees que avanzaste, más seguro estás que no; luego finalmente como por arte de magia, se estabiliza y todo fluye.

Aquí se presentan algunos ejemplos que muestran la evoluciones típicas en la producción de artefactos / productos de trabajo:
Ejemplo 1
Este podría decirse que es el más natural, escasos o nulos artefactos al comienzo de la actividad / tarea y luego de superado el 50 % un crecimiento continuo.
Observe que no se indica el tiempo en números es simplemente una idea de evolución teórica.
Ejemplo 2

En este caso se intenta mostrar que al principio no existen artefactos, pero luego comienza a aparecer hasta alcanzar la totalidad de artefactos que debían crearse. En este fenómeno el analista estuvo un tiempo importante realizando procesos mentales hasta que decidió que el trabajo ya podría comenzar a materializarse. Tiene ciertas semejanzas con el ejemplo anterior.
Ejemplo 3

Aquí se intenta mostrar que se producen una serie de artefactos al principio y el resto al final.
Este es el caso del analista se apresura a crear artefactos pero no completará mucho hasta acercarse al final.
Ejemplo 4

Este caso no es real en el análisis. Aquí se muestra que la producción de artefactos es continua y constante, nada más irreal en la tarea de análisis.

Claro está que no son las únicas evoluciones, pero la intensión es simplemente ejemplificar la idea.