Existen muchas circunstancias que pueden ser catalizadores para crear software deficiente: las herramientas utilizadas, la calidad de la comunicación en un equipo, las cualidades personales de los desarrolladores, las metodologías, etc. Y hay una cosa entre ellas que es la raíz de casi todos los demás: problemas imaginarios.
La mayoría del software complejo o zagabovannoy no fue planeado para ser complejo y, aún más, zagabovannoy. Fue creado simplemente para llevar a cabo no aquellas tareas que se basan en el plan original.
Historia de podcast
Imaginemos que está grabando un podcast popular y en algún momento está pensando en crear su propio sitio, bueno, ya sabe, con información sobre su podcast, registros de lanzamientos anteriores, artículos y posiblemente algo de publicidad. De hecho, ¿cuánto puede compartir las ganancias con algunos editores externos?
Y entonces decide contratar personas que harán este sitio por usted. Escribes requisitos absolutamente claros para ellos:
- Carga rápida del sitio en Norteamérica
- Soporte para descargar versiones pasadas de podcasts y transmisión en vivo de las actuales
- La transmisión no debe caerse o congelarse durante los primeros 15 minutos para el 99.99% de los usuarios. Nunca deseable, pero aun así.
- Integración con Google Adwords (y en el futuro, posiblemente con análogos)
- Integración con transmisiones de Facebook, porque allí pasas tus transmisiones. Si puede crear una solución alternativa que le permita transmitir de manera más conveniente, incluso mejor.
Usted da estos requisitos a los desarrolladores y, tal vez, se comunica un poco con ellos. Pasan 2 meses. Te muestran una demostración y estás cubierto de manchas rojas. Queda claro que solo arrojaste $ 15,000 al abismo. Lo que te mostraron es completamente inaceptable en cualquier lado, solo un montón de basura. Quiere recuperar su dinero, pero el tren ya se fue.
Enojarse ante la vista de un sitio demostrado es muy simple. En la primera apertura, todo se congeló. Luego pareció funcionar y usted preguntó cómo cambiar el tipo de publicidad que se mostrará en el sitio. Le mostraron una interfaz de giro y bicicleta para esto, que no es realista dominar por su cuenta. Las transmisiones de Facebook son lentas. Todo es terrible
Pero el equipo de desarrollo no comprende por qué está molesto. Desde su punto de vista, lograron una hazaña, habiendo hecho un producto tan complejo en solo 2 meses. Pusieron todo su talento en él, toda su alma. Juzga por ti mismo qué características maravillosas le agregaron:
- Increíble sistema de recomendaciones
- ¡Algoritmo de reconocimiento de voz que muestra subtítulos debajo de su transmisión EN TIEMPO REAL!
- La página principal del sitio se carga en 200 ms en cualquier parte del mundo
- El protocolo de transmisión y el cliente se escriben desde cero, y Facebook ha sido agregado por un complemento. ¡Puedes agregar complementos para otras plataformas en cualquier momento!
- Es posible integrarse con 20 plataformas publicitarias diferentes
Ya ves cuál es el problema, ¿verdad? Solicitó un producto muy específico y altamente especializado con un par de características adicionales que necesita. El equipo de desarrollo lo escuchó de manera diferente. Para ellos, todos sus "deseables", "más convenientes" y "en el futuro" se convirtieron en una tarea emocionante para desarrollar un producto común, ampliable, escalable y complementado de enormes proporciones, durante la implementación de los cuales puede resolver heroicamente un montón de problemas interesantes. Bueno, y, por supuesto, no hay nada que distraerse con cosas tan pequeñas como pulir y llevar al ideal la funcionalidad básica del producto: tenemos qué escala, ¡no hay tiempo para cambiarlo ahora!
Otro problema es que lo más probable es que no se haya comunicado directamente con los desarrolladores directos del sistema. Jugaste un teléfono estropeado: hablaste con un vendedor que entregó tareas a alguien de la gerencia media de su empresa, escribió especificaciones comerciales allí, se las entregó al gerente del proyecto, escribió especificaciones técnicas y se las entregó al líder del equipo, que las dividió en tareas y entregado a los desarrolladores. Bueno, cada uno de los desarrolladores también entendió y realizó sus tareas en el contexto de su comprensión.
Mecanismo para evitar la realidad
Los problemas imaginarios son más interesantes de resolver que los reales. Las personas muy inteligentes juegan juegos complejos, resuelven problemas matemáticos, escriben libros sobre temas abstractos, gratis o casi gratis. Al mismo tiempo, el programador de clase media para una aplicación móvil bastante estándar le fijará una factura muy considerable. Esto no se debe a que un programador promedio sea más difícil de encontrar que un genio. Esto se debe a que es fácil y agradable realizar tareas interesantes, pero no una rutina.
La mayoría de los programadores quieren trabajar en tareas interesantes y obtener un buen dinero por ello. Esto es difícil de lograr. Por supuesto, puede especular sobre qué es un "problema interesante", pero para la mayoría de los desarrolladores es algo que está muy cerca del límite del campo de los problemas teóricamente solucionables. Algo que es difícil de lograr, pero posible.
Déle a una persona racional muchas tareas rutinarias, no automatizadas, y tarde o temprano lo llevará a su cargo. Sin embargo, el cerebro humano, después de millones de años de evolución, ha desarrollado bastantes trucos diferentes para mantenerse en un estado adecuado. A medida que las víctimas de la violencia pueden escapar al mundo de sus fantasías, de manera inocente condenada a años de desarrollo empresarial o trabajo independiente en la web con el tiempo, encuentra la salvación para resolver problemas imaginarios.

El número y la complejidad de los problemas inventados son funciones del nivel de imaginación del programador y la complejidad de sus tareas reales. Cabe señalar que este enfoque en sí no es exclusivo de los desarrolladores de software. Los gerentes, vendedores, RRHH, soporte, abogados y contadores encuentran sus propias formas únicas de crear y superar heroicamente problemas inexistentes. Se involucran en decisiones que están más allá de su competencia, hablan en reuniones donde su presencia es pura formalidad, etc. También sobreestiman la escala de los problemas y su papel para resolverlos ("¡Nuestra nueva aplicación Doggy Diary debería ser 101% compatible con GDPR desde el primer día! ¡No podemos esperar a que el cliente se queje!"). Inflan al personal para crear la apariencia de la importancia del trabajo de su equipo y luego abordan los problemas de crecimiento, escala y logística (y siempre habrá tales problemas en un equipo grande).
Muchos de los desarrolladores son inteligentes, pero muchas de sus tareas son bastante tontas. Esta contradicción obliga a las personas inteligentes a pensar en otras, aunque no existan en la realidad, sino tareas interesantes.
Arquitectura de teléfono estropeada
A veces, los problemas imaginarios no son el resultado de las fantasías de los desarrolladores aburridos. A veces esto es el resultado de un "teléfono roto".
Trabajo a veces por cuenta propia. Cuando recién comencé, no podía permitirme clasificar a los clientes. Esto significaba la necesidad de llevar a todos en fila y observar en todos los colores las manifestaciones más diversas de las desviaciones de la psique humana. He visto cadenas de cientos de letras sobre el tema de detalles prototipo completamente inmateriales. Vi gente cambiando absolutamente cada párrafo de la especificación cada semana. Tuve clientes que para proyectos de algunos sitios triviales me preguntaron sobre la oportunidad de salir inmediatamente con ellos al ICO o vincularlos con inteligencia artificial.
Hubo clientes bastante sensibles que, sin embargo, carecían de conocimiento (¿o vocabulario?) Para expresar todos sus requisitos en formulaciones comprensibles. Esto en sí mismo no es un problema. Parte del trabajo de los desarrolladores de software es precisamente la recopilación de requisitos y la redacción de especificaciones. Esto es lo que se nos paga, incluido el dinero, y este trabajo incluso se puede hacer más o menos normalmente si tiene acceso normal al cliente y tiempo suficiente. El problema es que a veces este acceso no lo es y hay varios intermediarios entre ustedes.
A la mayoría de las empresas les gusta tener "vendedores" en publicaciones separadas. Estas son personas especiales que están buscando clientes potenciales, discutiendo tareas, plazos y precios con ellos. Son estas personas las que pueden descubrir lo más útil y hacer la mayor cantidad de preguntas. Pero estas no son las personas que escribirán este proyecto. Entre vendedores y programadores hay 2, 3, 4 o más capas de gerentes, arquitectos, analistas y líderes de equipo de nivel medio y bajo. Sí, puede ser gente muy experta. Pero aún así, estas son capas adicionales. No importa cuánto lo intenten, la información que pasa a través de ellos cambiará. Alguien descartará algo (en su opinión) que no es importante, otro aclarará algo no especificado, pero (en su opinión) obvio, el tercero reemplazará la estúpida redacción con el término correcto (como está seguro), y ahora la tarea inicial ya no puede ser reconocida. Un vendedor puede lanzar una frase al cliente como "pero por 39,999 también podemos hacerlo en la cadena de bloques". Si el cliente muerde, el equipo de desarrollo tendrá que estrujarse el cerebro en dos niveles por debajo, pero ¿cómo puede hacerse esto en la cadena de bloques? Pero ya está vendido y pagado, lo haremos.
Por lo tanto, el problema original se pierde en la especulación y el replanteamiento. Hay una brecha entre los nuevos problemas inventados (si ni siquiera se hubieran abierto allí) y hay personas que quieren llenarlos con sus propios problemas imaginarios y sus soluciones brillantes. Porque sigue siendo libertad, no rutina.
Complejidad artificial y selección natural.
A menudo hay un lado aún más oscuro. Inventar problemas imaginarios y métodos para resolverlos puede convertirse en el motor del crecimiento de la compañía y, en el futuro, quizás en su negocio principal, la parte más importante de su existencia, que no puede abandonarse.
"Las personas seleccionadas para resolver problemas complejos no tienen ningún incentivo para resolver problemas simples" - Taleb
¿Has oído hablar de los tres mejores ingenieros que de repente descubrieron que la banca en línea es, en general, algo bastante simple? Crearon un software simple y, por lo tanto, sin problemas, utilizaron las técnicas correctas y los lenguajes de programación, y luego transfirieron todos los bancos principales a su plataforma.
No, no escuché? Esto se debe a que esto no fue así. Pero lo que sucedió, es y será: equipos separados de miles de programadores que trabajan para diferentes bancos y, literalmente, durante medio año, capaces de utilizar a todo el equipo para implementar una función como la "transacción de reversión". Así es como se escribe el software bancario, sí.
Y esto, por supuesto, no es porque mover un número de una columna a otra es tan difícil, no. No es dificil. Aquí, indexe todo el Internet y luego muestre los resultados de búsqueda relevantes en una fracción de segundo; esto es difícil. Sin embargo, un par de chicos en el garaje lo hicieron. Y para la reversión de la transacción, se necesitan 1000 personas y seis meses.
El problema aquí es que el ecosistema bancario es increíblemente bueno en su tarea principal: apoyar el ecosistema bancario. Las ruedas giran, los papeles crujen y mañana todo seguirá igual que ayer. Todo tiene inercia. Y, si hemos estado trabajando en un problema imaginario durante los últimos 5 años, también lo haremos mañana.
"Es difícil hacer que una persona entienda algo si recibe su salario por no entenderlo". - Upton Sinclair
Y todos continúan trabajando en tareas ficticias, porque si se detienen por un momento y miran las reales, quedará claro que todo su sistema está roto. De repente, puede resultar que Vasya, sentado en esa esquina, haya estado monitoreando el estado de la granja de servidores internos durante los últimos 10 años, la migración desde la cual a AWS se realizó con éxito hace 5 años. De repente resulta que todo el trabajo de Masha es enviar los informes de Dasha a alguien. Dicha conciencia es muy difícil y las personas inconscientemente intentan evitar situaciones en las que se pueden hacer accidentalmente.
Y seguimos resolviendo problemas imaginarios.