lunes, 26 de agosto de 2013

A propósito de Ingeniería de Sistemas y desarrollo de software


En diferentes entornos profesionales y académicos, cada vez que se intenta establecer la causa del bajo nivel de desarrollo de la industria de software en el país, se sugieren algunas explicaciones como las siguientes: no hay inversión en este campo; hacen falta profesionales calificados que puedan generar desarrollos; las herramientas requeridas para los desarrollos son importadas y los costos son muy altos; los ingenieros de sistemas no saben vender sus productos y sus servicios; hay un alto grado de desconfianza en el cliente por la mala calidad en los desarrollos.

Las grandes organizaciones, tanto privadas como estatales hacen inversiones significativas en Tecnologías de la Información y a pesar de que no se ha alcanzado alta conectividad aún, también la pequeña empresa está dispuesta y le da un fuerte valor a la inversión en este campo. El acertado manejo de la información representa una ventaja competitiva.
No hay que dudar de la suficiente capacidad y creatividad del ingeniero colombiano, lo cual se refleja en los egresados de universidades del país que trabajan desarrollando software en el exterior y en el interés de empresas extranjeras fabricantes de software por la ingeniería nacional.

Ante avances tan rápidos como los que hay en las Tecnologías de la información, en el desarrollo de software es necesario partir de productos y estándares ya establecidos en el mercado. Esto hace necesario la importación de insumos y a costos muy altos. Sin embargo, ¿cómo explicar que en la India se desarrolle software de buena calidad y de bajo costo, a pesar de que en este sentido se encuentre en iguales condiciones que en Colombia? Sería útil estudiar la estrategia que los ha llevado a ocupar un lugar privilegiado en el mundo, en la producción de software y de servicios de tecnologías de información.

Al hablar de “saber vender” los servicios de ingeniería de sistemas,  se puede pensar que la dificultad se encuentra en la venta de intangibles. Siendo así, es fundamental estudiar cual es el método que utilizan otros profesionales exitosos que realizan este tipo de ventas y con esto se estaría diciendo que una vez superada la barrera de la comercialización de servicios, se tendrían en el mercado productos de software.

Pero el escenario que se presenta es diferente. Los servicios de ingeniería de sistemas y los productos de software se compran a firmas extranjeras. Se desarrolla a la medida para vender una sola vez. La producción de software empaquetado es mínima y los clientes desconfían de la calidad de estos productos. Aun en la implantación de software  se presentan fallas que generan desconfianza. Las empresas compran costosas soluciones de clase mundial, con implantaciones complejas pero no se logran los resultados esperados. Con frecuencia se dice: “el sistema no funciona”, “los sistemas son inestables”, “nuestro proceso tiene dificultades por fallas en el sistema”.  Con esto el cliente se está refiriendo indistintamente al software y al computador.

La asociación que hace el cliente de la ingeniería de sistemas con el comercio de computadores y de software, hace pensar que no se está identificando el servicio o el producto que se vende y que en esto radica la dificultad para vender y por supuesto si no vendemos para que producimos.

Es común escuchar la referencia que se hace del profesional de la ingeniería de sistemas como quien conoce  marcas de computadores, programas o  paquetes de software. El ingeniero que opera bien el computador, el que hace programas. Quien le dice al cliente cual fue el último programa que se publicó en una página de Internet  y le sugiere adquirirlo para mejorar su producción o para vender mas o quizá le mejorará la imagen de la organización. ¿Son esas las necesidades reales del cliente? ¿Estamos ofreciendo soluciones o estamos generando problemas al cliente?

Siendo conscientes de nuestras debilidades y nuestras fortalezas, pienso que  lo importante es identificar claramente el servicio y el producto que se está vendiendo y establecer esa diferencia competitiva, entendiendo y rescatando la verdadera esencia de la ingeniería de sistemas para generar la estrategia que nos permita desarrollar una industria de software.  Quizá diseñando el modelo de nuestro propio sistema.

Si se quiere hacer claridad respecto a las diferencias entre el comercio de computadores y software y la profesión que se asocia con estas actividades, lo primero que se puede plantear es la definición de esta.  ¿Qué es la Ingeniería de Sistemas? Se puede decir inicialmente que como otras disciplinas de ingeniería, se ocupa de llevar el conocimiento científico al uso práctico. La ingeniería de Sistemas consiste en adquirir conocimiento para crear un conjunto de procesos en procura de lograr un objetivo definido por el cliente o el patrocinador.



Hay un valor agregado en esta práctica y se refiere al sistema considerado como un todo y la contribución independiente de sus partes, que nos dice como se relacionan o como están conectadas internamente. 

Se pueden  identificar dos objetivos en el proceso de la Ingeniería de Sistemas. Los diseñadores de un sistema dirigen el objetivo de este a lo que están tratando de lograr en la fase de diseño. El sistema que está siendo desarrollado tiene como objetivo, lo que hace.

La Ingeniería de Sistemas, como la define Bayhill2, es una disciplina de ingeniería holística, orientada al producto, cuya responsabilidad es crear y ejecutar un proceso interdisciplinario para asegurar que las necesidades del cliente y socios interesados sean satisfechas con alta calidad, confiabilidad, costos eficientes y cumplimiento de acuerdo con los planes establecidos durante todo el ciclo de vida del sistema. 

Con el concepto anterior, ¿Qué brinda realmente la Ingeniería de Sistemas?  La respuesta tiene que ver con su orientación al producto y el proceso interdisciplinario que se crea. En este sentido, la Ingeniería de Sistemas brinda dos elementos que usualmente no están presentes en el desarrollo de un proyecto:
a) Una disciplina para enfocar el producto final, que contempla los productos disponibles y un ambiente operacional interno y externo. El producto final, es el objeto que ejecuta la misión del sistema.   Los productos disponibles son los que utiliza quien desarrolla para producir, probar, desarrollar, instalar, operar y mantener el producto final. El ambiente operacional son todas las interacciones que cruzan las fronteras del sistema.
 b) Una visión consistente de las expectativas del cliente y de los socios interesados, independientemente de las demandas que presenta el proyecto diariamente. Las expectativas se pueden agrupar en tres categorías: costo, agenda y desempeño.





El proceso interdisciplinario que crea y ejecuta la ingeniería de sistemas, es de descubrimiento y muy diferente a un proceso de manufactura. En este último, el enfoque va orientado a ejecutar tareas repetitivas para obtener salidas de alta calidad con el mínimo tiempo y costo. El proceso de ingeniería de sistemas, comienza descubriendo y definiendo el problema real  que necesita ser resuelto. Después de esto, se procede a descubrir una solución basada en las necesidades y expectativas del cliente y socios interesados, teniendo en cuenta una apropiada mezcla de costo, tiempo y medidas de desempeño. Una gran falla que puede tener un ingeniero de sistemas es encontrar una solución elegante para el problema equivocado. Durante el ciclo de vida de la solución, se pueden tener otro tipo de descubrimientos relacionados con el desarrollo, construcción, entrenamiento, depuración, afinamiento y retiro del sistema. El proceso es ejecutado por personas quienes pueden ayudarse con herramientas de soporte automatizado.


Existen unos principios pragmáticos en el proceso de la ingeniería de sistemas:

1) Conocer el Problema, el Cliente y el Consumidor
2) Usar criterios efectivos, basados en necesidades, para la toma de decisiones del sistema
3) Establecer y administrar requerimientos
4) Identificar y evaluar alternativas, así como converger a una solución
5) Verificar y validar requerimientos y ejecutar la solución
6) Mantener la integridad del sistema
7) Administrar con base en un Plan

Las actividades del proceso de ingeniería de sistemas se realizan en forma paralela y repetitiva según sean requeridas por el sistema objetivo. Estas actividades se pueden sintetizar en las siguientes siete tareas o funciones: Definir del problema, Investigar alternativas, Modelar el sistema, Integrar, Implantar el sistema, Evaluar desempeño y volver a Valorar.

La relación que existe con el desarrollo de software se presenta en la implantación del sistema. Esta fase comprende el diseño de detalle, desarrollo y producción. Los diferentes componentes pueden ser construidos o comprados, integrados en sub-sistemas y probados. Es un proceso iterativo que incorpora y ajusta nuevo conocimiento al sistema en el transcurso de su desarrollo.  

El proceso iterativo es entonces, el motor básico de la ingeniería de sistemas y se caracteriza por una estrategia de sentido común:
1) entender un problema antes de intentar resolverlo,
2) examinar soluciones alternativas (no saltar al diseño) y
3) verificar que la solución seleccionada es correcta antes de continuar con la definición de actividades o proceder con el siguiente problema.

Así como la ciencia y la ingeniería tradicional establecen aspectos diferentes para el desarrollo de la humanidad, la ingeniería de sistemas también identifica o determina algo muy particular. La ciencia a través del desarrollo de hipótesis teóricas y experimentación y por las leyes que la rigen, determina lo “que es”. Todas las disciplinas de ingeniería aplican conocimiento y conceptos de ciencias y matemáticas. El diseño de componentes de la ingeniería tradicional utiliza principios científicos para crear soluciones a una especificación o lo “que puede ser”. La ingeniería de sistemas actúa como la interfaz entre la ingeniería de componentes (las personas en búsqueda de soluciones físicas) y la sociedad (las personas con una necesidad). Los ingenieros de sistemas, trabajan con ambos grupos, en un conjunto coordinado de equipos para determinar lo “que debería ser”.  Es decir, el conjunto de requerimientos para la solución de la necesidad.

El ingeniero de sistemas tiene la responsabilidad de diseñar e integrar el sistema. Debe tener una visión del sistema total, así como de sus elementos y las interrelaciones entre ellos. Su contribución con el desarrollo de la industria de software, está directamente relacionada con encontrar la solución apropiada al problema definido, para brindar al cliente un sistema exitoso. El cliente quedará satisfecho porque se han identificado sus necesidades. El sistema le será útil y le parecerá sencillo. Esto es más que la compraventa de tecnología. Es más que el genial desarrollo de un programa.



Espero haber ayudado en algo. Hasta la próxima oportunidad!

2 comentarios:

  1. Uno de los problemas, (al menos lo veo como estudiante), es la gran cantidad de asignaturas que se ve en la universidad y la casi nula acoplación entre los contenidos de las asignaturas. De igual forma es demasiado complicado dominar un lengua de programación, con escasas 64 horas dictadas por un profesor en el mejor de los casos, que es ingeniero, pero que de docencia sabe poco.

    ResponderEliminar
    Respuestas
    1. Hola, comparto totalmente los dos puntos que planteas y a ello le agregaría la presencia de profesionales que no se formaron como ingenieros de sistemas dirigiendo la escuela, cuya gestión a veces se refleja en un plan curricular muy pobre.

      Bien Henry Garcia Ospina, gracias por la visita y el aporte de tu comentario.

      Éxitos!! Hasta cualquier momento...

      Eliminar