domingo, 28 de abril de 2024

Herramientas de visualización de código abierto

 El acceso a las herramientas de visualización de datos nunca ha sido tan fácil. Las bibliotecas de código abierto, como D3.js, brindan a los analistas una forma de presentar datos de manera interactiva, lo que les permite atraer a un público más amplio con nuevos datos. Algunas de las bibliotecas de visualización de código abierto más populares son:

  • D3.js: es una biblioteca de JavaScript de frontend para producir visualizaciones de datos dinámicas e interactivas en navegadores web. D3.js (enlace externo a IBM) utiliza HTML, CSS y SVG para crear representaciones visuales de datos que se pueden ver en cualquier navegador. También proporciona funciones para interacciones y animaciones.
  • ECharts: una potente biblioteca de gráficos y visualización que ofrece una manera fácil de agregar gráficos intuitivos, interactivos y altamente personalizables a productos, trabajos de investigación, presentaciones, etc. Echarts (enlace externo a IBM) se basa en JavaScript y ZRender, una biblioteca gráfica ligera.
  • Vega: Vega (enlace externo a IBM) se define como una "gramática de visualización", que proporciona soporte para personalizar visualizaciones en grandes conjuntos de datos a los que se puede acceder desde la web.

jueves, 25 de abril de 2024

Gestión de impedimentos en scrum

 Un impedimento en Scrum es cualquier obstáculo o problema que afecta la productividad del equipo y retrasa las actividades. Estos impedimentos pueden variar desde problemas técnicos hasta barreras comunicacionales o problemas organizacionales.

ejemplos:  1. Falta de participación de los DBA (Administradores de Bases de Datos): Si los DBA no están involucrados en los ciclos de liberación, pueden surgir problemas relacionados con la base de datos durante la implementación. Por ejemplo, cambios en el esquema de la base de datos pueden afectar la funcionalidad de la aplicación. 

2. Errores en el despliegue de código: Si el proceso de implementación no se realiza correctamente, pueden surgir errores en la producción. Por ejemplo, una actualización de software que no se probó adecuadamente podría causar fallos en el sistema en vivo. 

En Scrum, la gestión de impedimentos es fundamental para el éxito del equipo de desarrollo. Aunque no se considera directamente parte del ciclo de desarrollo, su manejo es crucial para mantener la eficiencia y la calidad del proceso. Aquí tienes algunas consideraciones importantes: 

El Scrum Master es el responsable de identificar, registrar y ayudar al equipo a superar los impedimentos2. 

Cuándo se Deben Contabilizar: Aunque no se cuentan directamente como parte del ciclo de desarrollo, los impedimentos deben ser capturados y gestionados durante todo el proceso. 

Los impedimentos pueden surgir en cualquier momento: durante la planificación, la ejecución o la revisión del sprint. 

Impacto en el Ciclo de Desarrollo: Los impedimentos pueden afectar la entrega de requisitos y la calidad del producto. 

Por ejemplo, problemas con ambigüedad en las características, falta de recursos, errores en el despliegue de código o decisiones que requieren intervención de múltiples partes interesadas. 

Resolución de Impedimentos: El equipo debe trabajar en conjunto para resolver los impedimentos lo antes posible. 


El Scrum Master debe ayudar al equipo a identificarlos y definir un plan para su eliminación3. 

Resumen de lo que me parecio clave de una consulta o 2 ;-) con  Origen: Conversación con Bing, 25/4/2024

jueves, 11 de abril de 2024

Modelo de arquitectura C4, con ejemplo

 fuen

Método de arquitectura: modelo C4

¿Qué es el modelo C4?

El modelo C4 es un marco utilizado en ingeniería de software para visualizar y describir la arquitectura de sistemas de software. 

Desarrollado por Simon Brown, significa 

"Contexto, 

Contenedores, 

Componentes y 

Código", 

que representan diferentes niveles de granularidad para representar la arquitectura de un sistema.

Contexto

El propósito de esta sección es ofrecer una perspectiva global del sistema, destacando sus interacciones y conexiones con entidades externas como usuarios, sistema de correo electrónico y otros sistemas externos. Aquí hay algunos puntos clave:

Partes interesadas: analistas de sistemas y negocios, propietarios de productos, líderes de equipo y nuevos miembros del equipo.

Descripción general estratégica: el contexto proporciona una visión estratégica del sistema, destacando cómo encaja e interactúa con el entorno empresarial más amplio. Esta perspectiva es vital para que las partes interesadas vean el sistema no como una entidad aislada sino como parte de un proceso o ecosistema empresarial más amplio.

Aclaración de límites: al delinear las interacciones del sistema con entidades externas, el contexto aclara los límites del sistema. Esta comprensión es crucial para identificar áreas potenciales de riesgo, dependencias y puntos de integración.

Orientación para el diseño y el desarrollo: comprender el contexto guía tanto el diseño como el desarrollo del sistema. Garantiza que el sistema esté alineado con los objetivos comerciales y las necesidades de los usuarios, haciéndolo más eficaz y centrado en el usuario.

Facilita la comunicación con las partes interesadas: el contexto proporciona un lenguaje común y una comprensión para diversas partes interesadas, incluidos ejecutivos de negocios, usuarios y equipos técnicos, fomentando una mejor comunicación y alineación con los objetivos del sistema. Es un momento en el que el enfoque del Domain Driven Design se vuelve muy útil.

Ejemplo de un esquema de contexto

Contenedores

Esta sección tiene como objetivo representar las decisiones tecnológicas de alto nivel tomadas para el sistema, detallando componentes clave como servidores web, bases de datos, sistemas de archivos y otros elementos integrales que constituyen la arquitectura del sistema. Aquí hay algunos puntos clave:

Partes interesadas: desarrolladores, arquitectos, líderes tecnológicos y equipos de operaciones.

Descripción general de la arquitectura: los contenedores ofrecen una vista de alto nivel de la arquitectura del sistema, presentando las principales tecnologías y plataformas utilizadas. Esto es vital para los nuevos miembros del equipo, los socios externos o cualquier persona que necesite una comprensión rápida de la composición técnica del sistema.

Marco de toma de decisiones: comprender los contenedores ayuda a tomar decisiones informadas sobre el escalado, la seguridad y la asignación de recursos. También ayuda a evaluar el impacto de posibles cambios o adiciones a la pila de tecnología.

Evaluación de riesgos: al identificar las tecnologías clave y sus interacciones, resulta más fácil evaluar y gestionar los riesgos asociados con las opciones tecnológicas, como la dependencia de un proveedor, problemas de escalabilidad o vulnerabilidades de seguridad.

Oportunidades de optimización: esta comprensión permite identificar oportunidades de optimización, como mejorar el rendimiento, reducir costos o simplificar la pila de tecnología.

Ejemplo de un esquema de contenedor

Componentes

Esta sección está diseñada para proporcionar una comprensión más profunda de los componentes fundamentales del sistema, ilustrando los elementos principales dentro de cada contenedor y cómo interactúan entre sí. Aquí hay algunos puntos clave:

Partes interesadas: equipos de desarrollo (incluidos desarrolladores y arquitectos de software).

Información arquitectónica detallada: proporciona información detallada sobre el diseño arquitectónico del sistema, ilustrando cómo funcionan juntas las diferentes partes del sistema. Esto es fundamental tanto para mantener las funciones existentes como para planificar nuevos desarrollos. Aquí hay algunos puntos clave:

Facilita el desarrollo modular: comprender los componentes ayuda a modularizar el desarrollo, lo que permite a los equipos trabajar en diferentes partes del sistema simultáneamente sin causar conflictos o dependencias.

Mejora la calidad y la capacidad de mantenimiento: una visión clara de los componentes permite un mejor control de calidad, un seguimiento de errores más sencillo y un mantenimiento más eficiente. También ayuda a identificar partes redundantes u obsoletas del sistema que necesitan refactorización.

Base para la escalabilidad: una comprensión detallada de los componentes es esencial para escalar el sistema de manera efectiva, garantizando que cada componente pueda manejar una mayor carga y complejidad.

Ejemplo de un esquema de componente para el componente Back for Frontend

Código

Esta sección presenta la capa más detallada del sistema, centrándose en la implementación real. Por lo general, incluye diagramas UML o representaciones similares para ilustrar cómo se implementan los distintos componentes del sistema. Aquí hay algunos puntos clave:

Partes interesadas: equipos de desarrollo (incluidos desarrolladores y arquitectos de software).

Comprensión básica: proporciona el nivel más granular de comprensión, esencial para el trabajo de desarrollo diario. Ayuda a los desarrolladores a comprender exactamente cómo se implementan e interactúan las funcionalidades a nivel de código.

Mejora la resolución de problemas: con una vista detallada del código, los desarrolladores pueden solucionar problemas de manera más efectiva, optimizar el rendimiento y garantizar la calidad del código.

Facilita la incorporación y la transferencia de conocimientos: la documentación detallada del código es crucial para incorporar nuevos miembros al equipo, ayudándoles a comprender rápidamente cómo funciona el sistema a un nivel práctico.

Permite la mejora continua: comprender el código es clave para las prácticas de mejora continua, como la refactorización, ya que permite a los desarrolladores identificar áreas de mejora e implementar cambios sin efectos secundarios no deseados.

Beneficios

Claridad

Vista integral: ofrece una comprensión multinivel del sistema, lo que ayuda en la planificación estratégica y reduce los errores al resaltar posibles problemas de diseño desde el principio.

Apoyo a la toma de decisiones: mejora la toma de decisiones informadas con respecto al diseño, la tecnología y la asignación de recursos.

Comunicación

Marco unificado: crea un lenguaje común para las discusiones entre diversas partes interesadas, mejorando la colaboración y el compromiso entre los equipos.

Alineación de las partes interesadas: mejora la alineación con los objetivos y expectativas del proyecto, crucial para el éxito del proyecto.

Documentación

Registro sistemático: proporciona documentación estructurada y estandarizada, esencial para referencia, cumplimiento y mejoras futuras. Herramientas como ADR ( Architecture Decision Record ) podrían resultar muy útiles para mantener la documentación actualizada mediante una metodología detallada.

Base de conocimientos: actúa como un valioso depósito de conocimientos para capacitar y guiar a los nuevos miembros del equipo. Este es un punto muy importante. Este tipo de conocimiento podría suponer un gran ahorro de tiempo y también evitar que surjan algunas deudas técnicas.

Compensaciones

Complejidad

Sobrecarga de detalles: para sistemas grandes, capturar cada detalle puede resultar abrumador y oscurecer la comprensión general. También puede resultar excesivo para sistemas pequeños.

Riesgo de claridad estratégica: centrarse excesivamente en los detalles puede correr el riesgo de perder de vista la visión estratégica de alto nivel. Todos conocemos la tendencia que nosotros (desarrolladores y arquitectos) tenemos a realizar demasiada ingeniería solo porque es divertido y satisfactorio.

Esfuerzo

Demandas de recursos: Requiere mucho tiempo y esfuerzo para crear y actualizar periódicamente, lo que exige recursos que podrían asignarse a otros lugares. Por lo tanto, hay que calcular el retorno de la inversión (ROI), un proyecto que es sólo de corto plazo o de transición no debería requerir este tipo de inversión.

Desafío de mantenimiento: Mantener la documentación actualizada con los cambios del sistema es una tarea continua y, a menudo, que requiere muchos recursos, así que vuelva a centrarse en el retorno de la inversión.

Gestión de detalles

Dificultad de equilibrio: lograr el nivel correcto de detalle sin complicar ni simplificar demasiado es un desafío. Necesita recursos experimentados, especialmente en arquitectura.

Necesidades variadas: Adaptar la documentación para satisfacer las diferentes necesidades de las partes interesadas sin redundancia ni confusión requiere una consideración cuidadosa. Nuevamente, debe confiar en un arquitecto experimentado que pueda garantizarlo.

Conclusión

En conclusión, el enfoque estructurado de documentar y comprender los sistemas de software a través del contexto, los contenedores, los componentes y el código ofrece importantes beneficios. Esta perspectiva multinivel es crucial para una comprensión profunda del sistema, lo que ayuda en la toma de decisiones, la participación de las partes interesadas y la gestión eficaz de proyectos. Sirve como una base de conocimientos vital y un marco estandarizado para las discusiones y la alineación entre las diversas partes interesadas.

https://lab.scub.net/architecture-modeling-c4-model-bd050c13964c