De una forma u otra, todos diseñamos e implementamos sistemas. Ya se trate de sistemas de software, infraestructura o soluciones de plataforma. Y como parte de este trabajo, nos enfrentamos constantemente con el concepto de un "sistema complejo". Como parte de esta publicación, quiero compartir mi visión de la complejidad de los sistemas y la "lucha" con ellos.
Comencemos definiendo el sistema. Me gusta la definición dada en el libro de Arquitectura del Sistema . Desarrollo de estrategias y productos para sistemas complejos . La traducción suena así:
Un sistema es un conjunto de componentes y sus relaciones. La funcionalidad de todo el sistema es mayor que la suma de las funcionalidades de sus componentes individuales.
Esta es una definición muy importante. Sugiere que el sistema debe generar "utilidad". Si el sistema no proporciona un aumento en la "utilidad", en comparación con los componentes que lo componen, entonces probablemente ese sistema no sea muy necesario.
La siguiente pregunta que puede hacerse es qué es un "sistema complejo". Puedes hablar mucho sobre esto, pero en mi opinión es difícil llamar a un sistema que es difícil de evaluar con tu mente, difícil de trabajar, difícil de entender, difícil de tener en cuenta todas las interacciones que ocurren en este sistema.
Y aquí para nosotros, como ingenieros, es importante tener un mecanismo, alguna forma de medir esta complejidad. Como base para este mecanismo, los muchachos del MIT sugieren usar el conocido "número mágico siete más menos dos". Hay un estudio original sobre este tema, así como artículos sobre las presentaciones de Habré y TED . En pocas palabras, la idea de todos estos estudios es que la "memoria de trabajo" de una persona puede sostener y trabajar simultáneamente con un número limitado de objetos diferentes. Aquí el concepto de "varios" objetos es muy importante, porque el cerebro está luchando con la complejidad al agrupar objetos. Por ejemplo, las conexiones entre objetos del mismo tipo o tipo se pueden tener en cuenta como una conexión. O, más claramente: no es necesario imaginar un sistema de montones de bolas mixtas de diferentes colores. Simplemente agrúpelos en su cabeza, diga que hay, por ejemplo, cinco bolas rojas, siete amarillas y tres azules. Esto simplifica el trabajo con el sistema, reduciendo el número de objetos de quince a tres. Por lo tanto, en el contexto de la evaluación de la complejidad, estamos hablando de diferentes objetos, atómicos, que no se pueden agrupar.
Al final, hay diferentes estimaciones de la capacidad de la memoria de trabajo. Alguien habla de cuatro objetos, alguien, unos cinco, alguien, unos siete. En mi razonamiento, me adheriré al enfoque clásico: "siete más menos dos" .
Con base en estas estimaciones, se puede decir que si se vuelve difícil trabajar con un sistema, mantener sus componentes y comunicaciones en la memoria, entonces, aparentemente, excede el mismo límite de capacidad de "siete más menos dos". Esto a su vez significa que este "número mágico siete" puede usarse como una estimación básica de la complejidad del sistema. Creo que lo siguiente, hasta ahora, una definición provisional, tiene derecho a la vida:
Un sistema complejo es un sistema que consta de 7 + -2 componentes atómicos y sus enlaces en varias relaciones.
Maneras clásicas de lidiar con la complejidad.
Ahora recordemos brevemente las formas o herramientas clásicas para lidiar con la complejidad en la etapa de diseño. Hay pocos de ellos: abstracción, descomposición, jerarquía y descomposición jerárquica.
- Abstracción : un método que le permite resaltar la función principal de un sistema o subsistema y ocultar el contenido
- Descomposición : una forma de dividir el sistema en bloques o componentes más pequeños
- La jerarquía es una forma de dividir el sistema en niveles, donde los niveles tienen un cierto lugar en la estructura y se ubican uno encima del otro
- Descomposición jerárquica : un método que combina jerarquía y descomposición
Todas estas herramientas están diseñadas en última instancia para simplificar los subsistemas individuales de nuestro sistema para que cuando trabaje con cada unidad individual, "encaje en la cabeza" como un todo.
¿De qué se trata todo esto?
¿Qué nos dan todas estas cosas? En pocas palabras, la idea es, utilizando varios métodos, convertir un conjunto no estructurado de componentes del sistema en una especie de forma estructural. Además, recordando los siete mágicos, podemos decir que cada bloque en la descomposición no debe contener más de siete elementos más / menos dos. De lo contrario, con un examen detallado de dicho bloqueo, será difícil de controlar.
Por otro lado, si tenemos un sistema con un gran número de bloques, dividido en niveles jerárquicos, entonces el número de dichos niveles, preferiblemente, no debe exceder siete (más / menos dos). Como ilustración, quiero traer una diapositiva de Fundamentals of Systems Engineering . Como puede ver en la diapositiva, la complejidad del sistema aumenta con el número de niveles de descomposición.

Por lo tanto, el proceso correcto de diseño del sistema puede describirse aproximadamente mediante la siguiente tesis:
No construyas sistemas complejos. Construya sistemas con el nivel de complejidad necesario.
Literatura