Durante treinta versiones, la confirmación en la lente de nuestra cámara decía esto, en cualquier idioma que estuvieras usando: "Desaparece del mundo para todos, y esto no puede deshacerse." Un drop es un objeto virtual que cualquier usuario puede dejar en un lugar real para que un desconocido lo encuentre. Lo que hacía el botón era eliminarlo de una lista en tu propio teléfono. El drop seguía exactamente donde estaba, en todos los demás teléfonos, para siempre.
Nadie descubrió la mentira, y esa es la idea. La lente oculta tus propios drops de tu propio radar, porque ya sabes dónde los dejaste. Así que, en el instante en que desaparecía la copia local, la pantalla no mostraba nada donde había estado el drop, y parecía correcto para la única persona que alguna vez lo comprobaría. Así es como una mentira sobrevive a treinta versiones: no escondiéndose, sino siendo indistinguible de la verdad desde cualquier ángulo que un usuario pueda ocupar.
La solución tiene una segunda mitad. Redactado, revisado, probado, cada verificación en verde. Luego una revisión adversarial, en la que los lectores intentan romper el trabajo en vez de aprobarlo, encontró que el nuevo botón de eliminar llamaba a una dirección que no existía. El lente es una página web y el backend está en otro dominio, así que cada acción pasa por una pequeña ruta de reenvío del propio lado del lente. Existían tres: colocar, reclamar y mover. La cuarta, eliminar, nunca se había creado. Todas las pruebas pasaron, porque las pruebas reemplazan la red con un sustituto y verifican que se solicitó la dirección correcta. Demuestran que el cliente hace la pregunta correcta y nada sobre si algo responde. Enviarlo habría sido una regresión: el botón antiguo al menos vaciaba tu propia bolsa, y el nuevo habría mostrado un error para siempre.
Ahora viene la parte que esta sala reconocerá. Cada elemento que un negocio puede entregar a alguien en bonuz, un cupón, una membresía, una tarjeta de puntos, un pase, se acuña a partir de un contrato de participación único en Base. Ahora hay dos: uno más antiguo y su sucesor mejorado. El antiguo nunca se retirará de la pantalla, porque retirarlo borraría cosas que la gente ya posee. El fundador estableció la regla en voz alta: "El antiguo eventualmente se eliminará para acuñar, pero nunca se eliminará para mostrar y exhibir". Luego pidió algo que nadie había contemplado: "El nuevo contrato inteligente es solo una mejora. Vuelve a comprobar si lo hiciste bien, compáralo con el antiguo".
Las interfaces coincidían casi exactamente. Los datos no. Una tarjeta de puntos registra cuántos golpes tienes y cuántos necesitas. En el contrato antiguo, ese segundo valor se guarda con el nombre max punches, con un espacio. En el nuevo es max_punches, con un guion bajo. La app solo leía el guion bajo. Así que cada tarjeta de puntos en el contrato antiguo informaba que necesitaba cero golpes: sin barra de progreso, sin contador leyendo tres de diez, y como la verificación de finalización requiere un máximo mayor que cero, una tarjeta terminada nunca podía reconocerse como terminada. Alguien podía llenar su tarjeta y nunca recibir la recompensa.
Ninguna comparación de interfaz lo habría mostrado. Ningún verificador de tipos, ningún conjunto de pruebas, ningún esquema. Solo se veía leyendo elementos reales de la cadena en vivo y poniendo las dos cosas lado a lado. Cuando dos cosas deben admitirse, romper cualquiera de las dos debe fallar. Eliminar el nuevo contrato de una lista es la prueba obvia. Eliminar el antiguo es la prueba que la gente olvida, y la que protege la promesa.
La misma preferencia está en la puerta principal. El modo LIFE está bloqueado, y una wallet lo abre sosteniendo una Life Key, un objeto cuyo atributos en cadena dicen qué concede. La puerta lee la cadena y nada más. No mantiene una lista de wallets aprobadas, porque una lista es algo que una persona tiene que mantener y una cadena no.
Antes de que hicieran falta, construyeron dos cercas. Los usuarios pueden colocar diez gotas en cualquier periodo rodante de veinticuatro horas: "Por eso ahora limitamos a los usuarios a diez gotas por día, para que no pueda abusarse". El límite llegó primero, antes de la función social que protege. Las gotas también pueden reportarse de forma anónima, porque exigir una cuenta para reportar algo objetable significa que la mayor parte no se reporta. Pero los reportes anónimos nunca pueden ocultar nada, a ningún volumen. Solo cuentan las cuentas distintas identificadas para el umbral; una cuenta que reporta la misma gota repetidamente cuenta una sola vez, y ocultar siempre es reversible. Una función de moderación que ese volumen anónimo puede activar es un arma de retirada dirigida contra quien a alguien no le gusta.
Luego nuestra propia caída. Un cambio agregó un nuevo tipo de registro a la base de datos. El sistema que guarda registros mantiene una tabla de bloqueos de edición con una columna por tipo de registro, y construye una sola consulta nombrando todas las columnas a la vez. El nuevo tipo entró en la configuración y no en esa tabla, así que la consulta nombró una columna que no existía, y entonces cada escritura en la base de datos falló. Cada escritura, de cualquier tipo, incluso el botón de guardar del propio panel de administración. Setenta y cinco minutos: autoinfligido y reportado. Los tipos pasaron, el conjunto de pruebas pasó y la verificación que existe para ensayar cambios en la base de datos pasó, porque aplica el cambio a una base de datos vacía donde la columna faltante también está igualmente ausente. Un ensayo en verde significa que el cambio se aplica. No significa que el resultado esté completo.
En la cadena fuera del alcance están las fallas que ningún monitoreo puede ver. Un servicio de teselas de mapa se movió detrás de una clave y, en lugar de negarse, sirvió una imagen válida con API KEY REQUIRED impreso en diagonal sobre ella: estado doscientos, tipo de archivo correcto, tamaño razonable, cada verificación en verde. Veintiocho fotografías de sedes resultaron generadas en vez de tomadas, todas producidas alimentando el nombre de la sede a un modelo de imágenes, que es así como Wild Wadi Waterpark, un parque acuático en Dubái, terminó ilustrado con un valle desértico. Las veintiocho ya no están en producción. "Realmente tomaste unas fotos muy mal hechas. Esto es algo en Arizona, no existe".
El estado honesto. El lente está en vivo, se ejecuta en veinticuatro idiomas, ahora las gotas se pueden eliminar de verdad, y las tarjetas de lealtad en ambos contratos se muestran y completan correctamente. Aproximadamente un ciento setenta fotografías aún esperan atribución. Cerca de un tercio de la biblioteca de imágenes está por debajo del tamaño que la app prefiere, y reprocesarlas no puede arreglarlo, porque el sistema no agranda imágenes. Algunas de las tarjetas de puntos más antiguas se acuñaron sin el objetivo de puntos, y ningún código cliente llega a esas. Y la app no se ha reconstruido desde que cayó una cantidad significativa de este trabajo, así que varios de los arreglos descritos aquí existen en el repositorio y aún no están en el teléfono de nadie.
Todas las personas a quienes estas fallas habrían perjudicado no pudieron reportarlas. La persona cuya tarjeta de puntos no se completaba asume que se equivocó al contar.
"Las actualizaciones se toman muy en serio. Debemos tener cuidado. Enviar menos, pero solo las perfectas."
