¿Salvará la compilación a las supply chains?

Por compilación me refiero al arte de crear compiladores, es decir, programas de computadora que traducen código fuente a otro lenguaje. Pocas personas fuera del ámbito de los programadores saben lo que hace un compilador, y pocas personas dentro del ámbito de los programadores saben cómo se diseña uno. Al principio, las preocupaciones de la compilación parecen lejanas (por decir lo menos) a las preocupaciones de supply chain. Sin embargo, hoy en día, en Lokad, es la compilación lo que sigue salvando el día; un proyecto de supply chain tras otro.
Shameless plug: los ingenieros de software con habilidades en compilación no crecen en los árboles, y estamos contratando. ¿Quieres trabajar en cosas que importan? Bueno, la próxima vez que tu avión llegue tarde porque faltaba una pieza, o la próxima vez que el medicamento que buscas esté faltante de stock, recuerda que podrías haber marcado la diferencia al unirte a Lokad :-)
Las supply chains son complejas, increíblemente complejas. La globalización ha multiplicado las oportunidades de abastecimiento, pero los retrasos son más largos y erráticos que nunca. Los canales de venta también se están multiplicando: hay tiendas físicas, tiendas online, marketplaces, revendedores, mayoristas, … Y ahora, gracias a Amazon, todos, en todas partes, esperan que todo se pida y se reciba de la noche a la mañana. Las expectativas de supply chain están más altas que nunca.
Abordar problemas de supply chain con algo menos que la expresividad completa de un lenguaje de programación no funciona. Así como la programación en Lego no va a suceder, los desafíos de supply chain no se encajan en casillas de verificación y menús desplegables. Esto no impide que los proveedores de software lo intenten, claro. Las soluciones que incluyen más de 1000 tablas, cada una con alrededor de 100 campos en promedio, son demasiado comunes. Y aunque la empresa cliente solo use alrededor del 1% del área de características de la solución, aún tienen que lidiar con su complejidad omnipresente.
La compilación salva el día porque proporciona un enorme cuerpo de conocimiento y saber hacer en lo que se refiere a crear abstracciones de alta calidad destinadas a servir como herramientas potentes para resolver problemas estadísticos y combinatorios (y mucho más, en realidad). Y la mayoría de los desafíos de supply chain resultan ser precisamente estadísticos y combinatorios. Por ejemplo, en Lokad, al introducir un álgebra de distribuciones, logramos erradicar problemas complicados de lead time que se resistían a nuestros enfoques más directos a través de características de software empaquetado.
Lo que diferencia a las características del lenguaje de, por ejemplo, las características habituales de una app (wysiwyg), es que las características del lenguaje son mucho menos sensibles a las especificidades de un desafío dado que sus contrapartes en las características de app. Por ejemplo, consideremos una situación en la que tu lógica de detección de faltante de stock sale mal en el caso específico de productos ultraseasonales. Si la característica se entrega a través de un constructo del lenguaje, entonces siempre puedes reducir el alcance de los datos hasta que la característica funcione exactamente donde se supone que debe hacerlo; posiblemente ajustando dinámicamente el alcance a través de un análisis numérico ad hoc. En contraste, con una característica de app, estás atascado con las opciones de filtrado que se han incorporado a dicha característica. Las características de app son adecuadas solo si tus problemas son estrechos y bien definidos, lo cual es en realidad muy poco parecido a la optimización de supply chain.
En supply chain, la programabilidad destaca porque:
- Los problemas son tanto altamente numéricos como muy estructurados
- Las supply chains son modulares y esta modularidad necesita ser aprovechada
- El número de variables es significativo pero no abrumador
- Adaptar la forma precisa de los problemas es crucial
Es algo divertido ver cómo muchos proveedores de software tienden a reinventar gradualmente la programabilidad. A medida que la interfaz de usuario crece en profundidad y complejidad, con la posibilidad de agregar filtros, opciones, ganchos de pre-procesamiento o post-procesamiento, alertas con plantillas, monitores de KPI, la interfaz de usuario se convierte gradualmente en algo programable, y alcanza el punto en que solo un programador puede realmente entenderlo (precisamente gracias a sus habilidades de programación preexistentes). Programable, sí, pero de una manera altamente enrevesada.
La compilación es el arte de amplificar las habilidades de ingeniería: hay que crear abstracciones y constructos del lenguaje que agilicen el pensamiento en la resolución de problemas. Como Brian Kernighan escribió famosamente: Todo el mundo sabe que depurar es dos veces más difícil que escribir un programa en primer lugar. Así que, si eres tan inteligente como puedes al escribirlo, ¿cómo lo depurarás? La misma lógica se aplica a la optimización de supply chain, porque es esencialmente lo mismo que escribir código. Bueno, en Lokad, literalmente es lo mismo.
La sabiduría convencional de TI establece que se deben automatizar primero las partes fáciles, dejando que los expertos humanos se ocupen de los elementos más complejos. Sin embargo, en supply chain, este enfoque falla estrepitosamente cada vez. Las partes más complejas de supply chain son casi siempre las más costosas, las que necesitan atención urgente. Las partes fáciles pueden encargarse de sí solas mediante inventario min/max o Kanban. Así como no construirías software para coches autónomos refinando software para operaciones automáticas de trenes, no puedes abordar problemas difíciles de supply chain refinando software diseñado inicialmente para resolver desafíos simples.
Naturalmente, la compilación por sí sola no es suficiente para enfrentar los desafíos de supply chain. Machine learning, el procesamiento de big data y una cantidad considerable de habilidades humanas también merecen ser mencionados. Sin embargo, en todos los casos, contar con abstracciones de alta calidad cuidadosamente elaboradas ayuda considerablemente. El machine learning es mucho más sencillo cuando los datos de entrada están bien preparados. El procesamiento de big data también es mucho más directo cuando los cálculos se prestan fácilmente a un alto grado de paralelización.