jueves, 9 de febrero de 2012
domingo, 8 de enero de 2012
- El alcance que el área de EA tiene en la organización, ya que no es lo mismo un área que solo se encargue de definir la estrategia de la arquitectura aplicativa, que aquella que tenga dentro de sus funciones la definición de la estrategia de negocio, la arquitectura tecnológica y aplicativa y la definición de tendencias del mercado.
- El nivel de madurez de la organización, ya que si la organización ejerce una planificación estratégica ordenada, se requiere menos esfuerzo de arquitectura para llevarla adelante.
- El presupuesto alocado por la organización para las iniciativas de arquitectura hará crecer o decrecer la cantidad de personas que formen el grupo de EA.
- La madurez en la gestión de los proyectos, y la facilidad para hacer que cada proyecto tenga dependencia de las definiciones de EA definirá el nivel de esfuerzo requerido, y por ende la carga de trabajo que hará aumentar o decrecer al equipo.
- Definición, que cubre la creación y establecimiento de políticas, estándares y guías base, que son el entregable para ordenar la estrategia de arquitectura de los diferentes proyectos de la organización.
- Control, asegurando que los proyectos cumplan las políticas, estándares y guías base, y detectando la necesidad de cambio de dichos entregables definidos (ya que los mismos deben evolucionar y no quedar estancos). Esta función debe entregar un reporte del cumplimiento, excepciones o evoluciones necesarias.
- Acompañamiento de los diferentes proyectos, cumpliendo la función de consultor en cualquier etapa de los proyectos IT, y guiando sobre el cumplimiento de las políticas, estándares y guias base establecidas. Obtiene también información de los proyectos como retroalimentación al repositorio de información de arquitectura y a la planificación arquitectural. No solo se participa como un consultor que aporta conocimientos técnicos, sino también de estrategia y de negocio.
- Transferencia de conocimiento a todos los stakeholders de la organización o a quien requiera contar con los conocimientos generados por el área de arquitectura. Estos conocimientos no solo están relacionados a lo definido por la función de definición, sino también a lo que al área de EA conozca por su participación en todos los proyectos o la investigación sobre tendencias.
- Investigación, que es una función mas que importante, ya que sienta las bases de los conocimientos necesarios para permitir una evolución constante de la arquitectura para brindar siempre el valor requerido.
- Velar por que los activos generados por arquitectura (relacionados a arquitectura aplicativa, arquitectura de datos, arquitectura técnica, etc.) se encuentren actualizados y sirvan para la función que fueron creados, representar el cúmulo de información necesario para conocer el estado actual y establecer el estado futuro de la arquitectura.
jueves, 1 de diciembre de 2011
Obviamente, recién recordé hacer el pedido menos de un mes antes de que se venciera el cupón, y porque me avisó Groupon. Entonces elegi las fotos, e hice el tan esperado pedido. Ahí empezó la historia.
Luego de esperar 5 días (el tiempo en que Megaphoto atiende los pedidos de sus clientes según su sitio) Me informan que los pedidos de Groupon se atienden con 15 días de demora en lugar de 5. OK, acepté las nuevas opciones (en realidad no vi la letra chica del cupon). Por cuestiones que no vienen al caso, el pedido cumplió un mes, y yo aún no tenía mis fotos. ¿Que hice? Me puse en contacto con Megaphoto vía mail, obteniendo una respuesta bastante inesperada. Su excusa fué que no podían haber previsto que el 45% de los pedidos por Groupon fueran hechos el último mes, por lo que tenían un retraso y el pedido estaría en esa semana. Otra vez, me mordí los labios y espere.
Esta semana fué que mi paciencia colapsó, e hice uso de una herramienta sobre la cual siempre utilicé para informarme o para estar en contacto con amigos y conocidos, pero nunca para reclamar: Facebook y Twitter. Escribí en el muro de Megaphoto copiando a Groupon, y publique mis quejas en twitter mencionando a Megaphoto y Groupon. A la hora tuve la respuesta de groupon interesado en saber cual era mi problema, y Megaphoto recién respondió a Facebook al día siguiente de la publicación, pero eliminando la misma (la respuesta vino por mail directo a mi, y luego un llamado telefónico). Finalmente hoy ya tengo las fotos en mi poder.
No se que hubiera pasado de no ser por mi incursión en las redes sociales para quejas, pero lo que si se es que resultó mi acción tal como esperaba, sacando algunas conclusiones interesantes de todo esto:
- Siempre ver las letras chicas de los cupones, sea cual sea su proveedor
- Confiar en Groupon, su atención es realmente muy buena
- No confiar en Megaphoto
- Cuando tengo que hacer un reclamo, usar las redes sociales. Nada hiere mas a una empresa que su reputación social.
- Si tengo una empresa en algún momento, y la misma tiene perfil social, nunca eliminar las quejas de mis clientes. Responder por el mismo canal que hicieron el contacto. Megaphoto actuó muy mal eliminando el comentario (parece que solo dejan las publicaciones que hablan bien de ellos)
domingo, 22 de mayo de 2011
- Identificación de recursos a través de URIs (Uniform Resource Identifier)
- La manipulación de los recursos se realiza a través de sus representaciones, utilizando los métodos HTTP de manera explícita (GET - consultar un recurso, POST - crear un recurso, PUT - modificar un recurso, DELETE - eliminar un recurso), y basándose en la información obtenida de la representación de los recursos.
- Mensajes auto-descriptivos, de forma tal que cada mensaje tenga la información necesaria para procesarlo (por ejemplo, estableciendo su MIME type y gestión de cache)
- La hypermedia se usa como motor de gestión de estado. Si bien es un mecanismo de integración stateless (sin estado), la interacción entre consumidor y proveedor se realiza a través de hyperlinks o hypertext presente en la representación.
Un sistema de mensajería permite la comunicación entre aplicaciones de forma indirecta. Esto se logra mediante el envío de mensajes a un administrador de mensajes, al cual están asociadas las aplicaciones, y es este último quien se encarga de administrarlos y distribuirlos según diversas configuraciones.
N
o es necesario especificar una aplicación de destino a la hora de enviar mensajes, sino que especifica el nombre de una cola.
Una aplicación puede tener una o mas colas de entrada y una o diversas colas de salida.
No es necesario preocuparse por de la tecnología existente en la aplicación destino, o si la aplicación destino no se encuentra disponible (en el caso de los mensajes asincrónicos), sino que el motor de colas se encarga de reenviar el mensaje si la misma se encuentra detenida o bien de iniciarla dependiendo del caso.
Un mensaje consta de dos partes básicas: el header (que contiene información de control que facilita el funcionamiento del administrador), y la data (información a intercambiar entre las aplicaciones).
En la implementación básica, una aplicación entrega un mensaje al administrador (motor) de mensajería, el cual mantiene el mensaje vivo hasta que llegue su tiempo de expiración, o hasta que el consumidor del mensaje lo tenga en su poder.
La integración vía mensajería se basa en la robustez mediante la persistencia de los mensajes enviados, la gestión de prioridades de entrega (por defecto, el mecanismo de entrega es FIFO, pero existen formas de adaptarlo), o expiración de los mensajes (ya que los mismos no pueden estar presentes en la infraestructura del administrador por siempre).
La implementación de colas de mensajería aseguran un bajo acoplamiento entre los sistemas (ya que implementa un modo de comunicación asincrónico, siendo el administrador quien se encargue de entregar el mensaje), al mismo tiempo que asegura la interoperabilidad (siempre y cuando se utilicen motores de colas estándares, estándares de facto o con conectores multi-tecnológicos, como IBM MQ, o implementaciones JMS como ActiveMQ o RabbitMQ).
Las calidades relacionadas a diseño dependerán del buen criterio que se implemente para crear las integraciones, lo mismo que sucede con las cuestiones de comunicación. No es una solución buena para el test.
Existen diferentes motores en el mercado, pasando de los propietarios (Microsoft MSMQ), a los estándares "de facto" (IBM MQ, Oracle AQ), y los estándares tecnológicos (Rabbit MQ, Apache Active MQ).
Cuando utilizarlo: Siempre que se pueda, y cuando el manejo de mensajería asincrónica no sea una contra (ya que, por ejemplo, se requiera conocer en el momento la entrega del mensaje y su respuesta). Tener en cuenta las tecnologías involucradas para seleccionar el motor de colas.
miércoles, 18 de mayo de 2011
Coherencia semántica
La coherencia semántica es mi atributo de calidad preferido. Cuando hablamos de integración, la coherencia semántica se refiere a la separación de incumbencias entre los diferentes sistemas. Se debe tener en cuenta que la información expuesta sea de importancia para los consumidores de la misma, pero sin dar a conocer información técnica de implementación. Así, por ejemplo, dar a conocer un id interno de una base de datos, si este no tiene ningún significado de negocio, es una mala práctica.
Reusabilidad
Hay que pensar las integraciones de forma tal que puedan utilizarse para cubrir diferentes problemáticas, y que no sean aplicables a un solo caso en particular. Para lograr esto, es imprescindible pensar a las integraciones en pos de que las mismas tengan un sentido de negocio, y que una interfaz no dependa funcionalmente de otra. Por ejemplo, si tenemos dos integraciones, una denominada "cálculo de importe" que tenga como parámetro el importe básico y los impuestos, y otro "calculo de impuestos", que también tenga como parámetro el importe básico, pero además le sumamos la categoría impositiva del cliente, es una mala práctica hacer que el consumidor de la funcionalidad deba orquestar ambas integraciones (obteniendo el impuesto de "calculo de impuestos", para luego pasarlo a "calculo de importe". Sería mejor definir una única integración, llamada "calculo de importe", con parámetros importe básico y categoría impositiva, que internamente obtenga el importe y calcule el total.
Calidades asociadas al tiempo de ejecución
Diferentes cuestiones o decisiones que tomemos van a impactar en forma perjudicial o beneficiosa en el tiempo de ejecución de los servicios. A continuación voy a describir cada una de las calidades relacionadas con las integraciones.
Disponibilidad
La disponibilidad se define como la proporción de tiempo que un elemento SW se encuentra funcionando y trabajando. Es necesario conocer los requerimientos de disponibilidad de cada uno de las integraciones, y no aplicar una única estrategia a todo el sistema en su conjunto. Me gustaría que quede claro, en este punto, que no es necesaria siempre una disponibilidad del 100%, y que no todos los consumidores de las integraciones requieren la misma disponibilidad. Recordemos que a mayor disponibilidad, mayor costo y complejidad. No sumemos complejidad sin una necesidad real.
Interoperabilidad
Es vital tener en cuenta la necesidad de interoperabilidad que tendrá el sistema en cuestión para poder pensar en las cuestiones correctas. Se llama interoperabilidad a la capacidad que tiene uno o mas sistemas para intercomunicarse entre si, de forma tal que sea simple reemplazar un componente por otro, o modificar un sistema internamente sin impactar en el resto de los participantes de la integración. Además, está relacionado con la independencia tecnológica entre diferentes sistemas. Por ejemplo, si tengo aplicaciones desarrolladas en .NET, otras en J2EE y otras en Ruby, utilizaré mecanismos de integración agnóstico a las tecnologías, mientras que si todos mis sistemas se desarrollan en una única tecnología, podrá utilizar mecanismos propietarios (convengamos que este caso es poco probable).
Facilidad de administración
Este es un aspecto pocas veces tenido en cuenta a la hora de desarrollar una aplicación en general, y también aplica muy bien cuando pensamos en integraciones entre sistemas. Debemos tener en cuenta los requerimientos de administración, gestión de incidentes, trazabilidad y seguimiento de las ejecuciones. Es vital en entornos distribuidos, donde los logs de las aplicaciones serán muy diferentes entre si, y muy pocas veces nos permitirá seguir con detalle la ejecución de un flujo de integración.
Performance
La performance, rendimiento, o la medida que nos permite conocer el nivel de respuesta ante una petición a una integración es algo que siempre será visto como "de vital importancia", siendo el requerimiento que la respuesta "sea presentada lo más rápido posible". Lo que tenemos que saber es ¿como mido "lo mas rápido posible"? ¿como impactará el rendimiento solicitado en el resto del sistema? ¿Cual es realmente el requerimiento de performance?. Debemos tener en cuenta todo el conjunto (consumidor, proveedor, medio, entorno) a la hora de hablar de performance en integraciones, y actuar en base a las mismas.
Robustez
La robustez es la capacidad de mantenerse un sistema (o componente SW) en funcionamiento ante determinadas condiciones de falla o inesperadas. En el caso de las integraciones, está intimamente relacionado con la capacidad de mantener los mensajes o pedidos hasta que sean tratados, manejar transaccionabilidad de las interacciones, o devolver alguna respuesta al sistema consumidor aunque no sea mas que un mensaje de error (ejemplo, twitter y su famosa ballena).
Calidades del sistema
Estos son atributos de calidad que deben tenerse en cuenta para poder dar una visión completa al sistema, no solo desde el punto de vista de mejoras en el diseño, desarrollo o tiempo de ejecución, sino también en el resto del ciclo de vida de un desarrollo.
Calidades de comunicación
Estamos hablando de integración entre sistemas, OK. La experiencia me dice que cuando pensamos en este tipo de integraciones, nos olvidamos que las mismas son desarrolladas por personas, y si las personas no pueden comunicarse, integrarse y trabajar en conjunto, estos desarrollos no llegan a ninguna parte. Es vital la capacidad de comunicación en estos equipos de trabajo, que por otro lado son multidisciplinarios, y con diferentes intereses. Estas calidades no impactan directamente en el desarrollo, ni en la ejecución, pero tenerlas en cuenta realmente nos hace la vida mas feliz.
Utilidad para documentación
Que mejor que tener un desarrollo que se auto-documente. Eso nos ahorra mucho trabajo, y encima es mejor cuando este trabajo es algo que no es muy feliz hacer. Si la metodología de desarrollo que estamos utilizando no requiere muchísima documentación innecesaria, es muy útil pensar en que los diseños o desarrollos de las integraciones se auto-documenten (por ejemplo, utilizando WSDL o REST para definir los protocolos).
Notas finales
En esta entrada intente explayarme sobre aquellos atributos de calidad con los que me topé en mi experiencia al desarrollar integraciones. No quiere decir que todos existan en todos los casos, ni que debamos aplicar todos a todos los desarrollos, ni siquiera que sean los únicos. Pero creo que sirve como guía para comenzar, o ayuda-memoria para no olvidarnos de cosas que creo importantes.
En este primer post (primero de esta serie hablando de integración), tengo ganas de contar sobre la importancia de tener en cuenta ciertos aspectos en la integración de sistemas, mas que nada en areas de arquitectura empresarial (aunque la integración ya no se aplica solo a empresas, sino que cualquier desarrollo de SW debe ser capaz de integrarse e interactuar con otros).
En primer lugar, como dije anteriormente, hoy en día ya es virtualmente imposible que un sistema funcione totalmente isolado. El entorno complejo en el que nos encontramos hace que un desarrollo, para poder cumplir con la funcionalidad requerida, depende de otros aplicativos (apis de herramientas de redes sociales, servicios expuestos por otros sistemas de la empresa), lo que genera la necesidad de brindar soluciones complejas, formada por sub-soluciones sw separadas que forman un conjunto en base a integración.
Por otro lado, hay que tener en cuenta que la complejidad de las soluciones y desarrollos, sumado a ciertas estrategias de vendors, y la problemática de negocio cada vez mas intrincada, hace que una se desarrollen soluciones de SW "de nicho" especializados (CRM, Sales, Billing, Gestor de campañas, Inventario y logística), estrategia encontrada con lo que se veía hace unos años atras, con el surgimiento de las grandes moles ERP. Esta tendencia, por un lado hace que las soluciones se encuentren enfocada en resolver problemáticas puntuales y específicas de una manera muchas veces mejor que las soluciones genéricas, pero por otro lado hace necesario unir estas soluciones separadas, para poder lograr una coherencia funcional entre todas ellas.
La última oración me lleva al último punto, el hecho de que las soluciones a las problemáticas de negocio en las empresas no están dadas en su mayoría por soluciones separadas e isoladas, sino que el negocio funciona en base a una serie de sistemas coexistiendo en forma colaborativa.
Entonces, la integración de sistemas me gusta decir que son "Las decisiones de arquitectura que se toman durante el ciclo de desarrollo de un software, para permitir la coexistencia y colaboración con otras soluciones de SW, teniendo en cuenta atributos de calidad definidos para la solución, sin perder en cuenta cuestiones como independencia funcional, o coherencia semántica"
domingo, 14 de noviembre de 2010
lunes, 9 de agosto de 2010
- Las que indican sucesión de la misma idea: al principio, en segundo lugar, a continuación, por último.
- Las que indican limitación: pero, no obstante, con todo, sin embargo.
- Las que indican exclusión: por el contrario, antes bien.
- Las que indican concesión (derecho a ): aunque, si bien, es cierto que.
- Las que indican distribución: bien (unos)... bien (otros).
- Las que indican consecuencia: por lo tanto, pues, luego, por consiguiente.
- Las que indican continuidad: pues bien, ahora bien, además, por otra parte, como decíamos.
- ADICION Y, también, además, más, aún, por otra parte, sobre todo, otro aspecto.
- OPOSICION Pero, sin embargo, por el contrario, aunque, no obstante.
- CAUSA EFECTO Porque, por consiguiente, por esta razón, puesto que, por lo tanto, de modo que, por eso, en consecuencia, esto indica.
- TIEMPO Después, más tarde, antes, seguidamente entre tanto, posteriormente, ahora, luego.
- AMPLIACION Por ejemplo, en otras palabras, es decir.
- COMPARACION Tanto como, del mismo modo, igualmente, de la misma manera, así mismo, de igual modo.
- ENFASIS Sobre todo, ciertamente, lo que es peor.
- RESUMEN O FINALIZACIONFinalmente, en suma, en conclusión, par terminar, para conclusión, etc.
- ORDENPrimero, segundo, siguiente, luego, a continuación, seguidamente, en primer lugar, por último, aún, al final, al principio, al inicio, pronto.
- REAFIRMACIONCon todo, decididamente, en efecto, en realidad, decisivamente, a pesar de todo, de todos modos, justamente.
- CONTRASTEPor otra parte, en cambio, por el contrario, de otra manera, por otro lado.
- CONDICIONSi, supongamos, supuesto que, siempre que, dado que.
- EJEMPLOSTal como, como caso típico, en representación de, como muestra, verbigracia, por ejemplo.
sábado, 7 de agosto de 2010
- Porter: No creo que ver las cinco fuerzas puede ayudar a mejorar la forma en que la EA soporta los requerimientos del negocio (aunque nunca esta de mas ver que esta haciendo la competencia), pero el diamante de competitividad seguro dará una visibilidad sobre las capacidades estratégicas de la empresa, y mapear eso hacia los activos de arquitectura podría ser muy útil. Por otro lado, el diamante de competitividad permite ver que hace falta para seguir en el mercado, lo que permite ver a que debe adaptarse la arquitectura.
- Métricas: Es importante que la EA sea medible y medida, publicando las resultados para ser conocidos por toda la empresa, y asi ganar apoyo. Algunos ejemplos de métricas de EA que sería util mostrar para demostrar la alineación EA-Negocio: Reutilización de activos de EA (lo que redunda en mejora en el time to market), % adopción a arquitectura de datos por los sistemas (lo que redunda en menor acoplamiento, por ende mas adaptabilidad), % de adopción de estándares de integración, tiempo de implementación de proyectos EA compliance VS non EA compliance.
- Modelar en base al negocio. La velocidad con la que cambia el negocio, y la lentitud que IT tiene para adaptarse, hace que la EA deba adelantarse a los requerimientos. Lo que la EA debe hacer es tener la capacidad de visualizar la estrategia de negocio, tal vez observando que es lo que pasa en otros mercados (por ejemplo, en telecomunicaciones ver los mercados europeos o brasilero es bueno para ver que puede llegar a pasar en uno o dos años en Argentina), y mapear los futuros requeriemientos utilizando una estrategia de modelado orientada al negocio, como la que se nombra en BusinessModelAlchemist.
- Finanzas. La EA debe tener en cuenta como las soluciones serán soportadas por el presupuesto asignado. Tener conocimientos básicos de manejo de finanzas es importante para soportar la EA. Conocer los flujos de fondos, o la gestión de un presupuesto o forecast sirve para que las soluciones propuestas sean "vendidas" al negocio.
- Negociación+Coaching. La negociación es otro punto importante a la hora de establacer una EA, para poder llevar a cabo la estrategia IT definida para dar soporte al negocio. Todo, sumado a un coaching activo en las áreas de IT.