domingo, 28 de agosto de 2016

CapicuaGen: Desarrollo de software en la empresa, Parte II

Si bien las empresas pueden llegar ser muy diferentes entre sí, a nivel de software es más lo que se parece que en los que se diferencia. En cualquier de los enfoques anteriores, se dan dos constantes que hay tener en cuenta:

El software va a cambiar: Los cambios son necesarios para el negocio, estos cambios se darán de forma cada vez más frecuente y debemos poder responder a la necesidad de dicho cambio para que nuestra empresa siga vigente en el mercado de la forma adecuada.

El software se parece entre sí: Casi todo el software empresarial se parece entre sí, casi todas las empresas gestionan recursos de algún tipo (humanos, económicos, etc.) y generan un producto (dinero, servicios, o bienes de alguna naturaleza). Técnicamente hablando casi todas los sistemas software tienen características como acceso a datos, seguridad, interacción con el usuario o trazabilidad.

En el escenario donde una misma empresa fabrica su propio software, se deseara que este sea homogéneo entre los distintos sistemas que posee, para disminuir la curva de aprendizaje entre sus usuario y fomentar la imagen corporativa unificada.

En las fábricas de software, se deseara reusar los máximos componentes posibles entre desarrollos diversos, para optimizar el uso de recursos y reducir los costos de producción.

En el caso de la empresa que vende un producto de software, esta querrá vendérsela al máximo número de posibles clientes, con las mínimas y menos costosas personalizaciones posibles.

En cualquier de estas opciones, se tiende a desarrollar componentes y elementos software, que se reúsan en los diversos sistemas. Los sistemas a su vez, se parecen a otros sistemas con los que comparten una funcionalidad semejante, o tienen elementos técnicos semejantes como características y aspectos comunes. La parte que hace diferencia a un software, aunque en el producto final es la que más destaca, en proporción es la que menor código representa, con respecto a la parte de código que puede reciclarse.

Veamos una serie de ejemplos que muestren las constantes sobre el cambio y las semejanzas del software.

Si existe un mercado que evidencie la necesidad rápida de cambio de un software es el de la telefonía movil. En menos de 10 años se convirtieron en un elemento imprescindible, tanto en lo laboral, como en lo personal. Actualmente viene dominado por dos gigantes de la industria, Apple (con su teléfono iPhone) y Google (con Android), ambos ofrecen sistemas de funcionalidades idénticas, y llevan años en una carrera de cambios, que en el fondo son semejantes en lado y en el otro. La diferenciación entre ambos no se da en los que hace sus sistemas, sino en que Apple ofrece una experiencia ligada a su hardware y a un ecosistemas de productos completo, y Google a se basa en una interconexión de multitud de servicios, independientes del hardware. Anualmente estas compañías presentan cambios y novedades a sus sistemas, y siguen vendiendo teléfonos manteniendo al mercado interesado.

En el lado contrario tememos a RiM, el creador de la BlackBerry. BlackBerry fue el primero en entrar en el mercado de los teléfonos inteligentes con un gran éxito, pero se conformaron con tener un nicho seguro dentro del mundo empresarial, y perdieron de vista los cambios en la sociedad que solicitaba tener al alcance de su mano una forma diferente de servicios y conectividad global. Cuando emergieron los IPhone y los Android Phone, que si supieron entender las necesidades de cambio, se quedaron estancados y terminaron por casi desaparecer del mercado.

Microsoft, en cambio fue el último en entrar en este mercado, si bien entendió las necesidades, no lo hizo en el momento adecuado, sino en uno en que ya no podía competir con los dos grandes ya establecidos. Motorola y Nokia se enfocaron en sacar un producto para cada sector consumidor según sus estudios de mercado, pero no comprendieron que si bien, una persona necesita un teléfono para trabajar, también lo va a necesitar para otras actividades, así que hicieron muchos teléfonos mediocres en lugar de pocos que resuelvan un amplio aspecto de necesidades. Estos fueron ejemplos de empresas que no supieron adaptarse al cambio de una manera adecuada.

Si vemos a las empresas que tuvieron éxito, observamos las constantes que hemos mencionado:


  • El negocio cambia, cambia frecuentemente, y la vigencia del producto viene definido por el cambio, y este debe estar sostenido un sistema software.
  • Los sistemas se parecen entre sí, el software tiene más semejanzas que diferencias.

Si obtenernos el porcentaje del código de un sistema que se asemeja a otro código, en comparación al que es exclusivo de nuestra aplicación, descubriremos que el código semejante es mucho mayor que el que no es.

El problema es que se invierte más tiempo y recursos en desarrollar las partes semejantes (por su volumen) que en desarrollar las partes exclusivas de un sistema, sin embargo las partes exclusivas de un sistema son las que le dan su identidad, con lo que debieran ser en las que se dedique más recursos y tiempo.

Para poder invertir los mencionados recursos y tiempo en el lugar adecuados, necesitamos una herramienta que nos ayude a generar las características comunes del sistema con el mínimo esfuerzo. La herramienta nos debe permitir escoger dichas características de un catálogo general común para una empresa, para un ámbito de negocio, o para un aspecto de nuestro software en particular e implementarla de forma automática en el sistema.

En base a esto se puede construir una línea de desarrollo de productos de software con un enfoque generativo.

martes, 23 de agosto de 2016

CapicuaGen: Desarrollo de software en la empresa, Parte I

Es un hecho que cualquier empresa, sea cual sea su tamaño, necesita un ambiente software adecuado que facilite su negocio, y le ayude en los cambios, constantes y rápidos que se dan en cualquier industria, más aun en la época de globalización e interconectividad en la que vivimos actualmente.

Los escenarios en los que se crean software empresarial son muy variados, vamos a enunciar principalmente tres de ellos:

Empresas con un departamento de desarrollo de software: En este escenario la empresa considero que es más factible para ella, tener un equipo que se dedique a construir el software que necesita en lugar de adquirirlo por medio de un ente externo. Este equipo puede tener más o menos madurez, además tener un tamaño variable.

Las ventajas de este enfoque, es que el equipo de desarrollo, tiene un solo “cliente” (la misma empresa) y debido a la cercanía, entre empresa y desarrollo, el conocimiento y las necesidades son más cercanas entre los unos y los otros, generalmente tiene un costo fijo al basarse principalmente en nóminas.

La desventaja es que no siempre se consigue la madurez necesaria para construir software lo suficientemente escalable para permitir al negocio crecer de manera adecuada. Frecuentemente se mantiene un mismo software durante años, haciéndole los mínimos cambios posibles, porque cada cambio tiene un gran impacto, haciendo sus sistemas difíciles de mantener. Al pasar del tiempo, es necesaria una restructuración completa del sistema software de la empresa, que muchas veces viene impulsara por cambios en el personal del mismo equipo de desarrollo.

Fábricas de software que son contratadas para tal efecto: En este enfoque la empresa contrata recursos externos para construir el software que necesite para para su negocio, puede ser para la creación de un producto, o otros eventos desarrollo y construcción en particular.

Las ventajas de este enfoque es no se debe invertir en recursos de construcción de una forma constante, solo cuando es necesario un desarrollo.

El problema es que posiblemente la fábrica tendrá más de un cliente, con lo que su atención hacia la empresa puede no ser la más adecuada, fases de análisis y diseño se pueden alargar en lo que la fábrica conoce las necesidades de la empresa y por ultimo cualquier cambio en los requisitos (que sin duda se darán en las revisiones de los productos) generada un costo adicional para la empresa.

Empresas de software que vende uno o varios productos: En este caso la empresa busca a otra empresa que venda o proporcione un producto adecuado a sus necesidades.

La ventaja de este enfoque es que generalmente se busca un producto que ya está realizado y construido, con lo que podría decirse que el problema se reduce a la puesta en producción de este.

La desventaja de este acercamiento, es que la empresa debe adaptarse al producto, y no lo deseable, que es que el producto se adapte a las necesidades de la empresa. En cualquier caso es muy posible que el software deba comunicarse con otros sistemas de la empresa, con lo que habrá que desarrollar una serie de interfaces para permitir la comunicación, perdiendo la ventaja de obtener un software completo y funcional desde el primer momento.