¿La compilación salvará las cadenas de suministro?
Con 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 un compilador. Al principio, los problemas de compilación parecen estar muy alejados (por decir lo menos) de los problemas de la cadena de suministro. Sin embargo, en la actualidad, en Lokad, es la compilación lo que sigue salvando el día; un proyecto de cadena de suministro tras otro.
Auto-promoción descarada: los ingenieros de software con habilidades de 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 se retrase porque falta una pieza, o la próxima vez que el medicamento que buscas esté agotado, solo recuerda que podrías haber marcado la diferencia al unirte a Lokad :-)
Las cadenas de suministro son complejas, desesperantemente complejas. La globalización ha multiplicado las oportunidades de abastecimiento, pero los retrasos son más largos y más erráticos que nunca. También se están multiplicando los canales de venta: hay tiendas físicas, tiendas en línea, marketplaces, revendedores, mayoristas, … Y ahora, gracias a Amazon, todos, en todas partes, esperan que todo se ordene y se reciba de la noche a la mañana. Las expectativas de la cadena de suministro son más altas que nunca.
Abordar los problemas de la cadena de suministro con algo menos que la plena expresividad de un lenguaje de programación no funciona. Al igual que la programación con Lego no va a suceder, los desafíos de la cadena de suministro no encajarán en casillas de verificación y menús desplegables. Esto no impide que los proveedores de software lo intenten, cabe destacar. Las soluciones que incluyen más de 1000 tablas, cada tabla con alrededor de 100 campos en promedio, son demasiado comunes. Y aunque la empresa cliente solo esté utilizando aproximadamente el 1% del área de características de la solución, aún tiene que lidiar con su complejidad omnipresente.
La compilación salva el día porque proporciona un gran cuerpo de conocimiento y know-how cuando se trata de crear abstracciones de alta calidad destinadas como herramientas poderosas para resolver problemas estadísticos y combinatorios (y mucho más en realidad). Y la mayoría de los desafíos de la cadena de suministro resultan ser precisamente estadísticos y combinatorios. Por ejemplo, en Lokad, al introducir un álgebra de distribuciones, logramos “solucionar” problemas complicados de tiempo de entrega que resistían nuestros enfoques más directos a través de características de software empaquetado.
Lo que hace que las características del lenguaje sean diferentes, digamos, de las características habituales de las aplicaciones (wysiwyg), es que las características del lenguaje son mucho menos sensibles a las especificidades de un desafío específico que sus contrapartes de características de aplicaciones. Por ejemplo, consideremos una situación en la que la lógica de detección de faltante de stock falla en el caso específico de productos ultraestacionales. Si la característica se entrega a través de una construcción de lenguaje, siempre puedes reducir el alcance de los datos hasta que la característica funcione exactamente donde se pretende hacerlo; posiblemente ajustando dinámicamente el alcance a través de un análisis numérico ad hoc. En cambio, con una característica de aplicación, estás limitado a las opciones de filtrado que se han incorporado a esta característica. Las características de la aplicación son adecuadas solo si tus problemas son estrechos y bien definidos, lo cual es muy diferente a la optimización de la cadena de suministro.
En la cadena de suministro, la programabilidad brilla porque:
- Los problemas son altamente numéricos y muy estructurados
- Las cadenas de suministro son modulares y esta modularidad debe aprovecharse
- El número de variables es significativo pero no abrumador
- Ajustar la forma precisa de los problemas es fundamental
Es un poco divertido ver cómo muchos proveedores de software tienden a reinventar gradualmente la programabilidad. A medida que la interfaz de usuario se vuelve más profunda y compleja, con la posibilidad de agregar filtros, opciones, ganchos de preprocesamiento o posprocesamiento, alertas con plantillas, monitores de KPI, la interfaz de usuario se vuelve gradualmente programable, y llega al punto en el que solo un programador puede entenderla realmente (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: uno tiene que crear abstracciones y construcciones de lenguaje que simplifiquen el pensamiento para resolver problemas. Como escribió famosamente Brian Kernighan: Todos saben que depurar es el doble de difícil que escribir un programa en primer lugar. Entonces, si eres tan inteligente como puedes ser cuando lo escribes, ¿cómo lo depurarás? La misma lógica se aplica a la optimización de la cadena de suministro, porque esencialmente es 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 a los expertos humanos para lidiar con los elementos más complejos. Sin embargo, en la cadena de suministro, este enfoque fracasa terriblemente cada vez. Las partes más complejas de la cadena de suministro casi siempre son las más costosas, las que necesitan atención urgente. Las partes fáciles pueden cuidarse por sí mismas a través del inventario mínimo/máximo o Kanban. Al igual que no construirías software para autos autónomos refinando el software para operaciones automáticas de trenes, no puedes abordar problemas difíciles de la cadena de suministro refinando el 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 la cadena de suministro. También vale la pena mencionar el aprendizaje automático, el procesamiento de grandes datos y una cantidad considerable de habilidades humanas. Sin embargo, en todos los casos, tener abstracciones de alta calidad cuidadosamente elaboradas ayuda considerablemente. El aprendizaje automático es mucho más simple cuando los datos de entrada están bien preparados. El procesamiento de grandes datos también es mucho más sencillo cuando los cálculos se prestan fácilmente a un alto grado de paralelización.