A lo largo de los años como arquitecto, he visto diferentes clientes, y uno de los errores más comunes en la formulación de especificaciones técnicas y deseos de los clientes es mezclar diferentes niveles de abstracción. Viene una persona y dice:
- Necesito una pieza de hardware que controle el accionamiento de las puertas y muestre el estado actual en una pantalla de siete segmentos, y siempre con un servidor externo para control remoto, para que se pueda comunicar con este servidor vía TCP, y tomar VueJS para el panel de control.
Parece que está claro lo que quiere la persona. Alguien incluso tiene un TK que causa entusiasmo; una persona, al parecer, entiende claramente lo que quiere. A menudo, incluso apunta a controladores / componentes / marcos / protocolos específicos.
Y para tal orden, por supuesto, puede hacer la pieza de hierro necesaria. E incluso funcionará si los componentes seleccionados no se contradicen entre sí. Pero si el cálculo no es para un proyecto, sino para un producto, y luego necesitará soporte, entonces es mucho más útil dedicar tiempo y dividir cuidadosamente estos deseos en niveles, para entender por qué tal pantalla, por qué TCP y dónde entra VueJS. Bien puede resultar que estas sean tecnologías por las cuales el cliente tenga sentimientos agradables debido al síndrome del patito. O simplemente no sabe que hay otros tipos de pantallas.
En este caso, hablamos primero del primer nivel: el dispositivo que controla el accionamiento, con indicación y mando a distancia.
Luego comenzamos a especificar los requisitos (pero no tecnologías específicas).
Dispositivo en caja IP68, con alimentación de 230V, que controla un variador asíncrono de 800W mediante variador de frecuencia vía modbus, que tiene un indicador claramente visible, cuyos cuatro estados (abierto / cerrado / en curso / avería) debe ser reconocido por una persona a 10 metros, que disponga de mando a distancia. desde navegadores modernos a través de Internet.
Y solo después de eso, puede comenzar a seleccionar el nivel de implementación para los requisitos. Aquí hay tal controlador, aquí hay un transceptor rs485, aquí hay una fuente de alimentación, aquí hay un indicador.
Separar estos dos niveles (requisitos e implementación) es fácil; en la mayoría de los casos, puede elegir diferentes implementaciones para los mismos requisitos, y esto no cambiará el nivel de requisitos de ninguna manera. El nivel de requisitos puede cambiar debido al hecho de que la implementación es demasiado cara, o no le gusta visualmente, pero no debería cambiar debido a la elección de un controlador que sea más conveniente para el desarrollador; de lo contrario, analizó demasiado los requisitos o simplemente fue demasiado perezoso para descubrir por qué se formuló. tal requisito.
Digamos que un cliente quiere una pantalla con caracteres de 8 centímetros. En este punto, el arquitecto o gerente de producto debería preguntar por qué exactamente 8 centímetros. En la mayoría de los casos, resulta que el cliente tiene un requisito de “visibilidad desde 10 metros” en el interior, pero decidió simplificar la tarea e inmediatamente expresó un requisito específico. O simplemente no puede mirar de forma abstracta, porque piensa en el proyecto en objetos más comprensibles: una "pantalla visible desde 10 metros" abstracta es más complicada que "una gran, bueno, ya sabes, una pantalla de este tipo hecha de segmentos, en una caja, estoy aquí Lo colgaré en la pared ".
Pero el cliente, por definición, no tiene la competencia para desarrollar proyectos, de lo contrario no habría acudido a usted. E incluso si posee estas competencias, no puede aplicarlas en el desarrollo de este proyecto específico, porque ¿por qué acudió entonces a ti?
Las decisiones en los proyectos deben ser tomadas por quien será responsable de ellos. Si el cliente no es responsable de la sincronización del desarrollo del código para una pantalla específica que ha elegido, entonces no debe seleccionar esta pantalla. La tarea del cliente es decir qué requisitos, en su opinión, implementa el modelo de pantalla elegido.
El desafío para el tomador de decisiones arquitectónicas es seleccionar la solución más adecuada para cumplir con estos requisitos. Puede ser una pantalla LED, una LCD o simplemente un semáforo de 4 colores y un tablero con inscripciones pegadas.
Pero el arquitecto no debe dar por sentado todo lo que dice el cliente: si de esta manera fuera posible elaborar una especificación técnica suficiente para el desarrollo, entonces el cliente no necesitaría intermediarios entre él y el desarrollo.
La descripción de requisitos no al nivel de la arquitectura a la que pertenecen es algo peligroso que garantiza enterrar la arquitectura del proyecto, reduciéndola no solo a una descripción de deseos, sino a una peligrosa mezcla de gases que son seguros por sí solos, pero listos para explotar cuando se mezclan. Y el sistema implementado de acuerdo con esta arquitectura tarde o temprano explotará, con abstracciones actuales, modificaciones complejas o muletas que caen con cualquier cambio en la funcionalidad.
Imagina que estás construyendo una casa. El elemento básico de la casa es el ladrillo. No se puede comprar medio ladrillo, pero comprar cinco camiones volquete de ladrillos no compra una casa. E incluso cien ladrillos no se convierten en una pared. Para construir, al nivel más bajo, tendrás que operar con exactamente un ladrillo, ni más ni menos.
Pero diseñar una casa en ladrillos, e incluso en conglomerados de ladrillos, es una muy mala idea.
Primero, la complejidad crece. La memoria y los recursos son finitos y es mejor gastar menos que más. La casa, que describe la ubicación de cada ladrillo, es demasiado difícil de percibir, consta de demasiados elementos. Es difícil dibujar (en lugar de dibujar rápidamente habitaciones individuales, dibujamos cada ladrillo), los dibujos son difíciles de leer, los modelos 3D tardan mucho en renderizarse, las listas de compra funcionan con la cantidad exacta de ladrillos en lugar de toneladas.
En segundo lugar, se pierde flexibilidad: mover un ladrillo ya es un error. No damos margen de maniobra en un nivel bajo de desarrollo, lo que nos obliga a hacer el trabajo de otra persona, y recibir mensajes de error que no son críticos para nosotros. Si establecemos la tarea como “hacer una pared de ladrillos de 30 centímetros de espesor”, entonces el constructor tiene la oportunidad de colocar los ladrillos como quiera, siempre que no viole la resistencia u otras restricciones. Si le damos un dibujo exacto de la ubicación de los ladrillos, en la siguiente verificación, la diferencia acumulada en el grosor de la costura de un par de milímetros nos dará un error de medio centímetro en la ubicación de un ladrillo en particular, lo que dará lugar a un desajuste entre la pared y su TK. A veces esto es un error, pero en la mayoría de los casos, la posición incorrecta de un ladrillo no afecta nada y está dictada por las circunstancias.que no pudimos tener en cuenta a la hora de diseñar: por ejemplo, dimensiones incorrectas de los ladrillos de producción. Puede regresar, puede construir a partir de eso, será más fácil y económico. Diseñar a nivel de ladrillos individuales nos priva de esta elección, lo que nos obliga a igualar el resultado ideal o desechar todo el trabajo.
En tercer lugar, no podemos pasar a otro nivel, empezar a pensar en habitaciones, siempre y cuando solo tengamos conglomerados de ladrillos fluyendo infinitamente entre sí y algún tipo de espacios entre ellos. Los ladrillos son más importantes para nosotros que el espacio entre ellos, es solo la ausencia de ladrillos y no un lugar para la vida. Parece que se está construyendo una casa por el bien de las habitaciones, pero todo deseo de cambiar la pared de una habitación es tan difícil, lleva a tantas operaciones de mover ladrillos y construir un nuevo pedido de mampostería, que casi dejamos de hacer esto: es más fácil estar de acuerdo con una pared incómoda que mover ladrillos constantemente allí. -aquí en el plan.
Cuarto, la idea de reemplazar el elemento base es insoportable. Todo está construido sobre ladrillos, cuentas las distancias en ladrillos, cuentas el costo en ladrillos, cuentas el peso en ladrillos, cuentas la conductividad térmica de la pared en ladrillos. Esto es conveniente, ya que no crea unidades de medida innecesarias, abstracciones innecesarias. La conductividad térmica en los ladrillos se traduce fácilmente en distancia y el costo se deriva fácilmente de la distancia.
Pero es imposible abordar una casa hecha de otros materiales: hay que dejar de enfocarse en los ladrillos, y esto destruye toda la imagen del mundo. Aunque, con la separación correcta de las capas de abstracción, diseñará perfectamente las habitaciones en metros, calculará el costo en rublos, la carga en las pilas en toneladas, calculará la conductividad térmica en W / (m K) y solo en el último nivel de diseño, usted decide qué llevar: ladrillos , hormigón celular o paneles de hormigón. Y si al cliente no le gusta la solución, cámbiela sin tocar el resto del proyecto.
Trabajar en arquitectura consiste en atravesar niveles de abstracción. La visión de estos niveles es una propiedad imprescindible para un buen arquitecto.