TECNOLOGIA

Cuando el código afecta a miles (y cómo evitarlo)

Por: Roberto Juárez
Última actualización:

La discusión alrededor de cómo nos afectan los algoritmos se ha acrecentado con la masificación de las inteligencias artificiales y en particular con los coches autopilotados, cuya decisión en caso de algún accidente a quien proteger no es algo fácil y lleva varias implicaciones morales al respecto como nos cuenta Forbes desde el 2016, sin embargo no es necesario llegar hasta ahí porque desde que se hace código “a la antigüita” se afectan a los usuarios con nuestras propias decisiones.

¿Cómo escribir código afecta a los usuarios?

Si bien la Inteligencia Artificial ha ayudado a visibilizar éste problema, éstas se alimentan de los datos que nosotros le damos y encontrar las afectaciones que lo provocan a veces resulta complicado

A modo de resumen, la principal diferencia entre el software tradicional y las inteligencias artificiales es que en el primero nosotros ponemos las reglas para una entrada y así recibir una salida y en el segundo caso nosotros damos los datos de entrada y salida y el algoritmo trata de reconstruir las reglas. Así que en el primer caso, nosotros somos los responsables directos al escribir las reglas (no únicamente el desarrollador, sino todos los involucrados para que esa regla de negocio exista y posteriormente se convierta en líneas de código) y en consecuencia, son nuestras decisiones las que tendrán un impacto en los de más ¿Interesante, verdad?


La principal diferencia entre el software tradicional y las inteligencias artificiales, es que en el primero nosotros ponemos las reglas [...] y en el segundo caso [...] el algoritmo trata de reconstruír las reglas.

Quizá para éste momento lleguen a su mente algunos ejemplos donde el código de algún algoritmo o software o producto afectó a una buena cantidad de usuarios, pero aqui les dejo 3 de los que consideré más relevantes.

3 casos donde el software afectó a miles

Cuando el 911 dejó sin servicio a más de 6,000 usuarios

Según el reportaje de The Washingtong Post, esto sucedió un 9 de abril, día en que se llegó a un límite preestablecido de 40 millones de llamadas, por lo que el sistema de ruteo de las llamadas de emergencia simplemente dejó de aceptar las llamadas nuevas.

Como se menciona en el reportaje, además de existir este límite máximo de llamadas (¿a quien se le ocurrió?), el problema pasó desapercibido y se percataron hasta que fue demasiado tarde, ésto debido a que aunque el sistema detectó las fallas, éstas se categorizaron como fallas de "bajo nivel", por lo que los incidentes no se reportaron hacia algún responsable.

Pérdidas de Knight Capital por USD $440 Millones en 30 minutos

Esta empresa se dedicaba a hacer transacciones en la bolsa de valores y decidieron implementar un nuevo software para automatizarlas y… los primeros 30 minutos de operación del software el 1 de Agosto del 2012 provocaron una pérdida de $440 millones de dólares.

Aunque los motivos apuntan a un software de baja calidad o -como el staff de Knight Capital lo llamó- "un defecto de software", éste defecto no fueron esclarecidos del todo, como se menciona en  éste artículo de CIO, lo que provocó que éste software diseñado para realizar transacciones masivas y en alta frecuencia, combinado con las malas e inoportunas decisiones que tomó desencadenaran en éste desastre.

Not Stonks Meme

Sistema de espionaje Pegasus

Esto no fue desgracia no es algún accidente, sino que es un sistema de espionaje diseñado específicamente para eso y se ha vendido, según los hallazgos de la empresa CitizenLab que se encuentran en éste reportaje, a 45 países hasta el 2018, entre los que destacan México por su uso contra abogados, periodistas, defensores de derechos humanos entre otros grupos.

Lo lamentable por destacar en éste caso es que las afectaciones no solo se extienden más allá de los involucrados en crear y comercializar el producto, sino en todas aquellas personas que fueron elegidas como objetivo del software.

 

En fin, como hemos visto las causas pueden ser varias, una variable que no debió existir, falta de testeo o falta de escrúpulos, aunque hay otras causas, veámos cómo minimizar el impacto que causamos.

¿Cómo dejar de afectar a las personas?

Recordemos que el código no son más que las reglas de la empresa automatizadas. Teniendo esto en mente, la lógica del negocio es la que está siendo aplicada por por algún algoritmo y es justamente una máquina la que ejecutará las acciones y, como todo buen autómata no se preguntará si lo que está haciendo es correcto o no. Así que más vale discutir entre los involucrados, qué es lo que se debe automatizar y cuando conviene conservar el tacto humano.

Igual aquí te dejamos unos consejos a seguir para evitar generar problemas con código.

Declarar y escribir solo lo necesario

¿Recuerdas el letrero de “En este establecimiento no se discrimina por religión, sexo, etc, etc…”? Bueno, simplemente se puede decir “En este establecimiento no se discrimina”, así sin escribir tanto, se transmite el mensaje de un modo más eficiente.

Además, escribir de más puede ser sobre ingeniería, que es más difícil de mantener.

Ante cualquier duda, preguntar

Quizá al ver el código y hacer la pregunta adecuada sobre si cierta cantidad de errores menores pero repetidamente no se convierte en una emergencia mayor pudo salvar a alguien, y recordar que a veces hay reglas desactualizadas o que entran en contradicción con nuevas indicaciones, saber si vale la pena depurarlas puede salvarnos de varios estragos.

El orden de los factores SÍ altera el producto

Aunque el flujo de decisiones esté basado a las necesidades de la compañía, muchas veces éste se planea pensando en un happy path, que es el camino que un usuario normalmente debería seguir su flujo, pero generalmente no sucede así, y es posible que el orden de como se preguntan las cosas y cómo las jerarquías son tomadas en cuenta pueden tener un efecto importante, pensemos en los relatos de Yo, Robot de Isaac Asimov y sus leyes de la robótica y vean esté meme de XKCD:

Why Simov put the laws of robotics in that order BY XKCD

Realizar testing apropiado

Empezando desde las pruebas unitarias, cuyas pruebas no necesariamente deben ser escritas por el desarrollador que escribirá la función. Y en caso que sí, escribir pruebas para lo que el código debe de hacer y lo que NO debe de hacer. Pruebas de integración, pruebas manuales y automatizadas, y no te enojes por el tester por los bugs encontrados, y mejor agradece que no llegó a tirar producción.

Tener un equipo variado e integrado

Puede sonar tonto, pero uno de los errores cuando los filtros aparecieron en snapchat era que no detectaban a toda la gente por sus distintos sesgos, curioso que al ver el personal de ese entonces todos eran en su mayoría caucasicos. Siempre contar con diversos puntos de opinión y aceptarlos ayudará a que sea un producto bien integrado a todas las necesidades y no solo a las que nosotros creemos que existen. Cuando todos los miembros del equipo se involucran se obtienen discusiones mucho más ricas y las propuesta de valor que se generan son mejores que las de una sola mente ¡haz el intento!

Cuestionar la ética y moral de la empresa

Cuando no creas que las decisiones que se toman en la empresa sean las correctas y algo en tí no se siente tranquilo perteneciendo y colaborando con ellos plantéate si vale la pena seguir ello. Encontrarás mayor satisfacción y crecimiento haciendo algo que te gusta sonriendo día a día.

Conclusiones

En todas las etapas del negocio se toman decisiones y éstas pueden ser automatizadas por algo que no se pondrá cuestionar si es correcto o no, simplemente ejecutará lo que le pidamos que ejecute, así que es nuestra labor y la de todo nuestro equipo cuidar que no afectemos a nadie, así que haz que todos los miembros colaboren y toma en cuenta todas las preguntas e ideas en cada etapa de desarrollo. Juntos valemos más.

Roberto Juárez
Software and Data Engineer

He tomado proyectos end-to-end tanto centrados en datos como de desarrollo web, me gusta siempre estar estudiando de todo que hasta me involucro en cosas de UX y una que otra negociacion con los clientes. En la parte de datos estoy presente en todas las etapas del proceso entre ellos la extracción, procesamiento, limpieza y análisis de datos hasta la presentación y representación de éstos hasta lograr ofrecer una historia o tableros que den insights relevantes a áreas de marketing, catálogo y precios y así facilitar la toma decisiones basadas en datos. En la parte web estoy desde que se gesta la idea hasta que termina (o no) en producción.


Otras entradas

Placeholder image
Se sabe que han existido (y siguen existiendo) inteligencias artificiales que son sexistas, racistas y clasistas, incluso es posible que hayas sido víctima de alguna o que estés diseñando un proceso que lo sea y lo estés pasando por alto. ¿Qué puedes hacer para evitar caer en estos errores?
Placeholder image
La capacidad de ChatGPT de crear líneas de código en unos pocos segundos con poco contexto es algo que sin duda llama la atención ¿Podría ser el nacimiento de ésta herramienta el fin de de los programadores e ingenieros de software? ¿Será el nacimiento de la nueva SkyNet?