El problema con la codificación de software, es que el solo hecho de invertir mucho dinero en ello no garantiza el éxito.
Muchas empresas están luchando para que sus sistemas de software funcionen. El Volkswagen id.3 será el primer vehículo totalmente eléctrico producido en masa. Está absolutamente listo en lo mecánico, pero su lanzamiento se ha tenido que retrasar. Inicialmente, unos “widgets” de software que se consideran esenciales para la venta (se rumorea que es la conectividad al teléfono inteligente y la asistencia con realidad aumentada para estacionar) no estarán presentes, se agregarán más tarde. Pero vw no es la única empresa grande batallando con su software.
El año pasado los bancos ingleses fallaron en la actualización de su software y dejaron a millones de clientes sin la posibilidad de hacer o recibir pagos. El modelo 737 max de Boeing fue sacado de circulación cuando dos accidentes fatales fueron causados parcialmente por fallas del software. También hay fallas menos públicas: se le ha recomendado a las líneas aéreas apagar y prender ciertas marcas de aviones cada 51 días y a otras cada 149 horas, para que las computadoras dejen de mostrar data falsa en pleno vuelo.
La culpabilidad de las empresas frecuentemente termina a nivel de Junta Directiva. En ocasiones eso es justo, como ocurrió con el CEO de Boeing que fue obligado a renunciar después de las desastres del 737. Pero no siempre es así. El software es complejo y no es fácil mantenerlo. Los empleados que deben producirlo son frecuentemente el producto de una disciplina que curiosamente en muchos aspectos es premoderna y cuándo el software es uno de los principales sectores de la economía mundial eso es muy relevante e importante.
Errores en códificación
La programación requiere la mezcla de una enorme capacidad literal y también de creatividad. Pequeños errores, como un signo de puntuación mal ubicado, pueden cambiar totalmente el comportamiento de un sistema. Una regla de oro del sector, es que dependiendo de lo cuidadosamente que trabajen, los programadores comenten entre 0,5 y 50 errores en cada 1.000 líneas de código que escriben. Debido al hecho que autos y aviones contienen millones de línea de código, la probabilidad de un sistema libre de errores es efectivamente cero. Aun cuando los errores (bugs) no produzcan catástrofes, limitan la productividad de la empresa. Una encuesta mostró que el programador promedio le dedica 21 hora semanales corrigiendo código viejo o malo.
Ingeniería de software
Las dificultades inherentes de la programación se complican con las deficiencias de la ingeniería de software como profesión. En el libro “The Problem With Software: Why Smart Engineers Write Bad Code” se ilustran algunas de esas deficiencias. Muchos de los codificadores, son por lo menos parcialmente autodidactas. Eso lleva a malos hábitos, que los cursos de ingeniería de software no corrigen. Hay muy poca comunicación entre la academia y el sector, y no existe un acuerdo real sobre lo que se debe enseñar y los hábitos a infundir. El resultado es que frecuentemente es el folklore o las modas las que se imponen sobre los estándares profesionales.
Como ilustración, existe una práctica popular en empresas como Google o Apple, de contratar a candidatos sobre la base de la resolución de un problema de programación en una pizarra. Muy pocos en otros campos se comportan así, ya que asumen que una vez graduados los candidatos ya han adquirido un nivel básico de competencia. A los médicos no se les hacen exámenes de anatomía antes de contratarlos. Los ingenieros mecánicos no necesitan escribir las leyes de Newton para probar sus conocimientos.
Obsolescencia
Todos estos problemas son exponenciados por la increible tasa de cambio de la ingeniería de software. Aun cuando un sistema funcione, su obsolescencia llega rápidamente. Los problemas de los bancos ingleses fueron principalmente el resultado de esos sistemas “legados”, escritos por programadores que tenían mucho tiempo sin trabajar en la empresa o el outsourcer, en lenguajes de computación semi-olvidados que respondían a criterios que ya casi nadie recordaba. Los codificadores, adicionalmente trabajando bajo presión para agregar nuevas características hacen recortes, acumulando problemas para el futuro.
El resultado es que ese atractivo nuevo sistema puede rápidamente evolucionar a un tambaleante artilugio que funciona con alguna pega y un rezo. Eventualmente, el costo de mantenimiento se hace difícil de ignorar y las empresas deben actualizar (reprogramar) sus sistemas. Este puede además convertirse en una otra instancia peligrosa, ya que el nuevo sistema debe hacer todo lo que hace el parcialmente-entendido y más.
Cómo resolver
VW está trabajando para resolver los problemas de software del id.3. La empresa quiere regresar la mayor parte del desarrollo de software a su fuerza de trabajo y ya ha invertido US$8.000 millones en una nueva “unidad digital”. El problema con la codificación de software, es que el solo hecho de invertir mucho dinero no garantiza éxito. Una de las grandes ventajas que tienen emprendedores como Tesla o Monzo es que sus programadores reciben una página en blanco. Sin sistemas legados que mantener, y menos bugs del pasado que eliminar, su software es más robusto y los programadores pueden dedicar más tiempo a las funcionalidades que los clientes desean.
Se hace referencia a Why companies struggle with recalcitrant IT y también aparece en mi blog https://bit.ly/31T7CKD.