Los programas son como dominó. Las “fichas de dominó” se mantienen erguidas cada vez antes de que comience el programa, y luego “caen” a lo largo de los caminos prescritos a medida que se ejecuta el programa.
Pero los programas son en realidad mucho MUCHO más complejos que las fichas de dominó. Tienen múltiples rutas y esas rutas cambian mientras se ejecutan los programas. Dependiendo de cuán complejo sea el programa, puede haber miles o incluso millones de rutas diferentes a través del sistema.
Los programadores tienen una comprensión bastante buena (aunque nunca perfecta) de cómo caen todos los dominó cada vez que se ejecuta el programa. No recuerdan todos los dominós, pero tienen una buena imagen en mente (un “modelo mental”) de cómo las diferentes partes se relacionan entre sí.
- Como nuevo graduado, ¿debería trabajar para Uber, Facebook / Google u otra startup como ingeniero de software? ¿Cómo se compara el talento de ingeniería en Uber con Google / FB y otras startups populares como Dropbox, Pinterest y Airbnb?
- ¿Qué son las clases selladas? ¿Por qué no se heredan las clases selladas?
- ¿Debo hablar con mi gerente acerca de no obtener una promoción de ingeniero de software?
- ¿Cómo es la entrevista para Principal SDE en Amazon?
- ¿Por qué un ingeniero de software elegiría ser un consultor independiente para la empresa en lugar de un FTE?
El modelo mental que tienen para el programa es probablemente muy diferente del modelo mental que usted tiene.
Cuando les pides que cambien el programa, les pides que reevalúen todas esas relaciones y que recreen ese modelo mental.
La mayoría de los programadores no tienen miedo al cambio. De hecho, a menudo lo ven como un desafío, una parte agradable de su trabajo. Pero tienen que poder justificarlo primero. Tienen que entender cómo esos cambios afectan a todos los dominós que ya están en el tablero.
Este es un problema muy común en el diseño de software. Esto equivale, simplemente, a la comunicación, o tal vez a la falta de comunicación.
Su modelo mental no es mejor que el tuyo, en el gran esquema de las cosas, y no es peor. No es una diferencia en la resolución o la cantidad de detalles, no es un abismo cerebral izquierdo o derecho o gatos y perros.
Pero tienen una perspectiva diferente. Después de todo, están mirando una parte muy diferente del negocio que tú. Así como su modelo mental de los aspectos comerciales es más sofisticado que sus modelos mentales de los aspectos comerciales, lo mismo es cierto para ellos con respecto a los aspectos técnicos.
Por lo tanto, su responsabilidad, y la de ellos también, es encontrar formas efectivas de explicarles su modelo mental y viceversa.
Tienes que explicarles exactamente lo que quieres. Tienes que ser tan preciso, y tan paciente, como ellos necesitan que seas. Tienen que hacerte muchas preguntas, como millones, ¿sabes? – para descubrir todos los entresijos. Use ejemplos, diagramas, imágenes, casos de uso, experiencia personal, citas de clientes o cualquier otra cosa que pueda ayudar. Escuché que los sobornos amigables son geniales, pero YMMV.
Y también tienes que estar abierto al desafío. Están interesados en el éxito del negocio, por lo que no están haciendo preguntas difíciles solo para hacerte la vida difícil. Escuche sus preguntas e intente comprender si están planteando dudas razonables. Podrían estimar que el costo, por ejemplo, es prohibitivo. Es muy posible que algunas de sus preguntas o sugerencias sean en realidad intentos de compromiso.
Entonces el diálogo, como sugiere Guy Maslen, es extremadamente efectivo. Y puede aprender a conducir este tipo particular de diálogo mejor. Puedo ofrecerte dos libros que realmente me han ayudado en mi carrera. ¡Ambos libros fueron escritos para personas familiarizadas con la industria del software, en cualquier rol!
- The Mythical Man-Month de Frederick P. Brooks habla sobre la complejidad del software, los desafíos de comunicación y muchos otros temas relacionados. Ayuda a explicar exactamente por qué la falta de comunicación es tan común.
- El diseño impulsado por dominio de Eric Evans proporciona un enfoque para administrar software en evolución que tiene en cuenta este tipo de desafíos. Por ejemplo, habla extensamente sobre cómo los programadores y los “expertos en dominios” pueden crear juntos un tipo de lenguaje compartido (un “lenguaje ubicuo”) que hace que la comunicación sea más fácil y efectiva.