Cómo clasificar una app real
Un procedimiento de seis preguntas para situar cualquier producto real en la taxonomía, y una explicación de por qué casi todo el marketing del sector anuncia el ideal más barato de vender y calla el más caro de cumplir.
Cierra el nivel la parte operativa: tienes cuatro términos, un eje de autoridad y una tabla de dos dimensiones, y ahora hace falta convertir todo eso en un procedimiento que puedas aplicar en veinte minutos a un producto que no has escrito tú. Es una habilidad más útil de lo que parece, y no solo para escribir comparativas. Sirve para evaluar una dependencia antes de casarte con ella, para auditar tu propia aplicación y descubrir que no es lo que creías, para leer el anuncio de un motor de sincronización y saber qué te está prometiendo de verdad, y para negociar con un equipo de producto que quiere las palabras bonitas sin las facturas que traen detrás. Y una advertencia previa: al final del procedimiento no obtendrás una etiqueta, sino un perfil. Los productos reales no caben en una casilla, y la taxonomía honesta consiste precisamente en decir en qué casilla cae cada parte.
- Aplicar un procedimiento reproducible de seis preguntas para situar un producto en la taxonomía.
- Sustituir la etiqueta única por un perfil que distinga entre datos y entre lectura y escritura.
- Entender el sesgo económico que hace que el sector anuncie el ideal más barato.
- Traducir la clasificación en decisiones de arquitectura y en promesas defendibles.
- Reconocer las señales recurrentes de que una etiqueta se está usando fuera de su sitio.
El procedimiento: seis preguntas
Las tres primeras se responden con las manos, cortando la red y observando. Las tres últimas exigen leer documentación, inspeccionar el almacenamiento o preguntar a quien lo construyó. Ese reparto es en sí mismo informativo: lo que se puede comprobar desde fuera es siempre disponibilidad, y lo que exige mirar dentro es siempre autoridad.
Antes de empezar conviene fijar dos reglas de método, porque sin ellas el procedimiento degenera en una impresión. La primera es que las respuestas se anotan por escrito y en una frase, no se retienen mentalmente; la mitad del valor del ejercicio está en descubrir que no puedes escribir una de ellas. La segunda es que se responde sobre un dato concreto y nombrado, no sobre la aplicación en abstracto; preguntar si esta aplicación funciona sin red produce respuestas vagas, y preguntar si este documento concreto se abre sin red produce hechos.
¿Arranca en frío sin red?
Cierra todo, desactiva la conectividad y abre la aplicación desde cero. Distingue tres desenlaces: no arranca, arranca vacía, arranca con tus datos. Esto mide disponibilidad de lectura y nada más.
¿La escritura sobrevive a un reinicio?
Escribe sin red, cierra por completo la aplicación y vuelve a abrirla, todavía sin red. Si tu cambio no está, la escritura vivía en memoria y la durabilidad local era aparente.
¿Qué ocurre cuando el servidor rechaza?
Provoca un rechazo real editando desde dos sesiones o retirando un permiso. Observa si hay reversión, si el aviso es escapable y si lo que escribiste se conserva en algún sitio recuperable.
¿Réplica completa o subconjunto de trabajo?
Averigua si el dispositivo tiene todo tu corpus o solo lo que has abierto últimamente. Una caché parcial no puede sostener ninguna promesa de soberanía, por muy rápida que sea.
¿Qué queda si el proveedor cierra?
Pregunta por el formato en disco y por la exportación. Si la exportación necesita servidor, o si el formato es una serialización opaca de un motor concreto, la longevidad no está resuelta.
¿Quién resuelve un conflicto y con qué regla?
Busca la regla escrita: última escritura gana, reejecución en el servidor, fusión convergente, intervención del usuario. Si nadie sabe responder, la regla existe igualmente y es un accidente.
flowchart TD Q1[arranca en frio sin red] -->|no| K1[ni offline first ni local first] Q1 -->|si| Q2[la escritura sobrevive a un reinicio] Q2 -->|no| K2[offline first solo de lectura] Q2 -->|si| Q3[el servidor puede revocar tu escritura] Q3 -->|si| K3[sync first con autoridad en el servidor] Q3 -->|no| Q4[queda algo legible si el proveedor cierra] Q4 -->|no| K4[replica primaria pero sin longevidad] Q4 -->|si| K5[local first en sentido fuerte] style K3 fill:#f9e2af,color:#11111b style K5 fill:#94e2d5,color:#11111b
El árbol es deliberadamente severo en su tercera bifurcación, porque ahí está el filtro que casi nadie aplica. Todo lo que llega a ese punto se siente igual de bien al usarlo; lo que separa las ramas es una propiedad que solo se manifiesta en el peor día. Nota además que el nodo penúltimo, la réplica primaria sin longevidad, es una categoría real y frecuente: sistemas donde tu escritura es efectivamente irrevocable pero el formato en disco solo lo entiende un motor propietario. Han resuelto la autoridad y no la supervivencia, y merecen crédito por lo primero y una pregunta incómoda por lo segundo.
Sobre la cuarta pregunta, la de la réplica completa, conviene aclarar que la respuesta correcta no siempre es todo. Hay corpus que no caben en un dispositivo y hay datos que no deben bajar a él por razones de confidencialidad o de licencia, y en esos casos un subconjunto bien elegido es la solución adecuada y no una carencia. Lo que la pregunta busca no es el volumen sino la política: si existe una definición explícita del conjunto de trabajo, si el usuario la conoce, y si esa definición la controla él o alguien remoto. Una porción decidida por el usuario es soberanía acotada; una porción decidida por el proveedor es dependencia con otro nombre.
La sexta pregunta, la de la regla de conflicto, es la que más silencio produce y la que más información aporta. En la mayoría de los productos existe una regla, pero nadie la escribió: es la que resultó de la implementación, casi siempre alguna forma de que la última escritura recibida sobrescribe a la anterior. Esa regla no es intrínsecamente mala, pero al no estar escrita tampoco está pensada, y por tanto nadie ha comprobado si produce resultados aceptables en los casos que importan. Cuando la respuesta a esta pregunta es un encogimiento de hombros, el diagnóstico no es que falte documentación, es que falta una decisión.
Del binario al perfil
Aplica el procedimiento a un producto real y descubrirás enseguida que las respuestas cambian según qué parte del producto mires, y eso no es un defecto del método sino su hallazgo principal. El cuerpo de un documento puede ser convergente mientras su lista de colaboradores la dicta un árbitro. Los borradores pueden vivir en una réplica primaria mientras lo publicado exige ratificación. Las preferencias de interfaz pueden ser puramente locales mientras la facturación es del servidor y no admite discusión.
Por eso el resultado útil no es una etiqueta sino una tabla de dos columnas: qué datos y qué autoridad. Escribirla obliga a una precisión que la etiqueta única permite evitar, y suele revelar incoherencias que nadie había formulado: un dato clasificado como soberano cuya única copia legible está cifrada con una clave que gestiona el proveedor, o un dato sujeto a una regla de unicidad global que se está sincronizando por convergencia y por tanto puede duplicarse.
| Familia de dato | Autoridad observada | Consecuencia para el usuario |
|---|---|---|
| Contenido creado | Réplica del usuario | Lo escrito no se revoca y sobrevive al proveedor |
| Estructura compartida | Árbitro central | Puede revertirse si otro colaborador o una regla lo impide |
| Metadatos de interfaz | Solo local, sin réplica | Se pierden al cambiar de dispositivo y a nadie le importa |
| Identidad y facturación | Árbitro central sin excepción | Sin conectividad no hay cambios posibles |
Rellenar esa tabla para un producto real produce casi siempre una sorpresa concreta: alguna fila cuya autoridad observada no coincide con la que el equipo creía haber diseñado. Suele ocurrir en la segunda fila, la estructura compartida, donde las decisiones se tomaron por comodidad de implementación y nunca se revisaron a la luz de la promesa que el producto hace en su página principal.
La pregunta operativa no es si tu aplicación es local-first, sino qué porcentaje de las interacciones de tu usuario ocurren sobre datos cuya autoridad es local. Un producto en el que el noventa por ciento del tiempo se pasa editando contenido soberano y el diez por ciento restante toca administración arbitrada entrega casi toda la experiencia local-first sin pretender que la parte administrativa lo sea. Ese reparto se puede diseñar a propósito, y es la forma en que los sistemas maduros consiguen la sensación sin pagar la factura completa. Lo que no funciona es dejar el reparto al azar y luego describirlo con la etiqueta que más convenga.
Por qué el sector usa mal las palabras
La respuesta corta es que hay siete ideales y no cuestan lo mismo. La rapidez sin ruleta de carga se compra con una caché y un motor de sincronización, es visible en la primera pantalla y se puede demostrar en un vídeo de quince segundos. El trabajo multidispositivo y la colaboración se compran con ingeniería considerable pero conocida. La longevidad, la privacidad y el control último del usuario no se compran: exigen renunciar a la posición de árbitro, publicar un formato, permitir que el usuario se lleve sus datos y aceptar que se pueda operar el sistema sin ti. Es decir, exigen ceder poder comercial.
El resultado es un incentivo perfectamente racional y perfectamente corrosivo: se implementa el ideal barato, se comunica con el vocabulario que evoca los caros, y como el usuario solo puede observar el barato, el mensaje resulta verificable en la práctica y falso en la sustancia. No hace falta mala fe para llegar ahí; basta que el departamento que elige las palabras no sea el que elige la arquitectura.
Hay un segundo mecanismo, más sutil, que opera dentro de los equipos técnicos y no en su comunicación. Los términos de este campo funcionan como identidad profesional: describirse como un equipo local-first señala pertenencia a una comunidad, sofisticación técnica y una postura sobre la relación entre usuario y proveedor. Esa función identitaria es legítima y motiva trabajo excelente, pero también hace que la etiqueta se adopte antes de que la arquitectura la merezca y que revisarla se sienta como una renuncia personal. Los términos que sirven a la vez para clasificar y para pertenecer siempre acaban con sus fronteras erosionadas.
Y hay un tercer factor, puramente estructural: el término no tiene guardián. No existe una especificación, un organismo de certificación ni una prueba de conformidad que decida quién puede usarlo, a diferencia de lo que ocurre con otras etiquetas técnicas. Un vocabulario sin autoridad que lo defina se desplaza inevitablemente hacia el uso más laxo, porque el uso laxo es más útil comercialmente y no tiene coste. La única defensa disponible es la que este nivel intenta darte: la capacidad de comprobarlo tú mismo.
Cinco indicios recurrentes, ninguno concluyente por sí solo y muy sólidos en conjunto. Primero, que toda la comunicación gire en torno a la latencia y ninguna mención sea sobre propiedad, formato o longevidad. Segundo, que no haya ninguna descripción escrita de cómo se resuelve un conflicto. Tercero, que la exportación exista pero no funcione sin conexión. Cuarto, que la documentación técnica hable de reversión de mutaciones mientras la página de producto habla de datos que son tuyos. Quinto, y el más revelador, que no exista ninguna respuesta pública a la pregunta de qué pasaría con tus datos si el servicio cerrara. El silencio en ese punto casi nunca es un descuido de redacción.
Ninguno de esos cinco indicios acusa a nadie de mentir, y esa es su virtud como herramienta. Todos son ausencias, y las ausencias tienen la propiedad de ser difíciles de fabricar: se puede escribir una página de producto entusiasta en una tarde, pero no se puede documentar una regla de conflicto que nunca se decidió ni publicar un formato que no existe. Buscar lo que falta es sistemáticamente más informativo que evaluar lo que se afirma, y este campo lo ilustra con una claridad poco común.
Conviene equilibrar la crítica con una observación que este nivel ha ido repitiendo: la mayoría de los productos así etiquetados son buenos productos con una arquitectura sensata. Un sistema sync-first con autoridad en el servidor es la elección correcta para casi todo el software colaborativo con permisos y reglas de negocio, y elegirlo no es una traición a nada. El problema no es la arquitectura, es la etiqueta. Y la etiqueta importa porque fija expectativas que la arquitectura no puede cumplir, y esas expectativas se cobran en el peor momento posible: cuando alguien pierde trabajo o cuando el servicio se apaga.
Qué hacer con la clasificación
Clasificar no es un fin. Sirve para tres cosas concretas y vale la pena nombrarlas antes de cerrar.
Sirve para elegir dependencias con los ojos abiertos. Adoptar un motor de sincronización es adoptar su posición en el eje de autoridad, y esa posición no se puede cambiar después sin reescribir el modelo. Preguntar a un motor dónde sitúa la autoridad, antes que por su rendimiento o su ergonomía, es la pregunta que más futuro te ahorra. Y conviene hacerla también sobre el propio motor: si el proyecto se abandona, ¿qué queda de los datos que gestiona y en qué formato?
Sirve para auditar lo propio. Casi todo equipo que aplica las seis preguntas a su producto descubre al menos una incoherencia: un dato al que se le prometió soberanía y que en realidad puede ser revocado, o una regla de conflicto que nadie escribió y que resultó ser la que el último desarrollador dejó por defecto. Esas incoherencias no se descubren usando el producto, solo interrogándolo.
La auditoría gana mucho si se convierte en algo periódico en lugar de en un ejercicio único. La disponibilidad se degrada sola, como vimos, y la autoridad se desplaza sin que nadie lo decida: una comprobación de permisos añadida en el servidor para resolver un incidente puede convertir en revocable un dato que se había diseñado como final, y ese cambio no aparece en ninguna revisión porque nadie lo formuló como un cambio de arquitectura. Volver a pasar las seis preguntas una vez por trimestre cuesta una tarde y detecta ese tipo de deriva antes de que se vuelva estructural.
Y sirve para escribir promesas defendibles. La versión honesta de una página de producto no dice local-first: dice qué ocurre con tus datos si cierras la cuenta, quién decide cuando dos personas editan lo mismo, y si puedes exportar sin conexión. Tres frases concretas informan más y envejecen mejor que cualquier etiqueta.
Vale la pena señalar que esas tres frases tienen además una virtud interna, más allá de la comunicación. Escribirlas obliga al equipo a fijar por escrito decisiones que de otro modo permanecen difusas y se resuelven de forma distinta en cada módulo. Un documento de una página que diga dónde vive la autoridad de cada familia de dato hace por la coherencia de un producto más que cualquier revisión de código, porque convierte una intuición compartida y variable en un criterio consultable.
Descubrir que tu producto no es lo que decías admite tres salidas honestas y una deshonesta. Puedes cambiar la arquitectura, que es caro y a veces lo correcto. Puedes cambiar el vocabulario, que es barato y casi siempre suficiente. Puedes acotar la afirmación a la parte que sí la cumple, diciendo con precisión qué datos son soberanos y cuáles no, que suele ser la mejor de las tres. La salida deshonesta es redefinir el término para que tu producto quepa dentro, y es la que ha llevado a que estas palabras signifiquen cada vez menos. Este nivel existe, en buena medida, para que reconozcas esa maniobra cuando la veas y para que no seas tú quien la ejecute.
La razón de dedicar un nivel entero a distinguir cuatro palabras no es pedantería taxonómica, y quiero dejarla explícita antes de pasar a la mecánica. Los términos de este campo describen compromisos, y cada compromiso tiene una factura que se paga en un momento distinto de la vida del producto. Offline-first factura en ingeniería de caché y en el diseño del arranque, y se cobra el día del lanzamiento. Sync-first factura en el diseño de la reversión y en la honestidad de la interfaz sobre lo no confirmado, y se cobra el día en que un usuario pierde trabajo por un rechazo silencioso. Local-first factura en invariantes que renuncias a prometer, en criptografía para los permisos, en compatibilidad bidireccional del esquema y en la publicación de un formato, y se cobra a lo largo de años. Cuando un equipo usa un término cuya factura no ha pagado, no está solo engañando a su mercado: está construyendo sobre un modelo mental que no corresponde a su sistema, y ese desajuste reaparece como una clase concreta de fallos —pérdidas silenciosas en la reconciliación, permisos que fugan porque se aplicaron filtrando en vez de cifrando, migraciones que rompen dispositivos que llevaban meses apagados— que resultan inexplicables desde dentro precisamente porque el vocabulario impedía verlos venir. Por eso la disciplina que este nivel intenta instalarte es una sola y es de higiene profesional: antes de nombrar una arquitectura, describe dónde vive la autoridad de cada dato, qué pasa cuando dos versiones discrepan y qué queda cuando el proveedor desaparece. Si las tres respuestas están escritas, la etiqueta sobra. Si no lo están, la etiqueta es un sustituto del pensamiento, y ningún motor de sincronización, por bueno que sea, arregla eso.
- Elige un producto que se anuncie como local-first o sync-first y aplícale las seis preguntas. Documenta cada respuesta en una línea y sitúalo en el árbol de decisión.
- Construye su perfil por dato en una tabla de dos columnas, y marca las filas donde la autoridad real no coincide con lo que su comunicación sugiere.
- Repite el ejercicio completo con un producto que hayas construido tú o con el que trabajes ahora. Anota las incoherencias antes de justificarlas.
- Redacta las tres frases defendibles del último apartado para ese producto: qué pasa al cerrar la cuenta, quién dirime un conflicto y si la exportación funciona sin red. Si alguna no la puedes escribir, has encontrado tu siguiente tarea de arquitectura.
- Busca los cinco indicios de la lista en la comunicación pública de los dos productos y cuenta cuántos aparecen en cada uno. Compara ese recuento con la etiqueta que cada uno reclama.
- Elige la fila de tu tabla en la que la autoridad real más se aleja de lo que el producto sugiere y estima el coste de corregir la diferencia por los dos caminos: cambiando la arquitectura o cambiando el texto.