Cada fila que escribes sobrevive a la funcionalidad que la escribió. Se emite una licencia, se conecta un dominio, se acuña un token, y el registro se queda ahí mucho después de que la petición que lo creó se haya olvidado. Nadie convoca una reunión sobre gestión de datos. Los datos se acumulan calladamente hasta que alguien pregunta «¿podemos borrar los datos de este usuario?» o «¿por qué esta tabla pesa cuarenta gigas?», y la respuesta es una carrera en lugar de un plan.
Este capítulo cubre lo que una primera pasada por la gestión de datos siempre se salta: la retención declarada en el modelo y no recordada dentro de una tarea programada; migraciones y rellenos que sobreviven a ser interrumpidos a mitad de una tabla viva; qué ocurre de verdad, mecánicamente, cuando alguien te pide borrar su cuenta; y el archivado como decisión de diseño tomada antes del borrado, no como plan de recuperación deseado después.
Los datos para los que no tienes un plan intencionado son un pasivo disfrazado de activo.
Los datos tienen coste y dueno
La regla: cada columna, cada blob JSON, cada tabla que añades es algo que tu equipo posee ya para siempre, tanto si alguien vuelve a leerlo como si no. El almacenamiento es la parte barata. La cara es saber qué significan los datos, si es seguro borrarlos y quién puede pedirlos de vuelta.
Mira cómo crece settings en un Bearer a lo largo de un par de años. Una versión añade productos indexados por plan. Una posterior lo necesita indexado por proveedor, porque planes y proveedores dejaron de ser una relación uno a uno. Ahora posees dos formas de los mismos datos hasta que alguien escriba una migración que las colapse. Nadie planeó ese cambio de forma: ocurrió funcionalidad a funcionalidad, y el blob JSON lo absorbió en silencio porque los blobs JSON no protestan.
La propiedad significa algo concreto: para cada tabla, una persona o un equipo puede responder «por qué guardamos esto y durante cuánto tiempo» sin abrir el código. Si nadie puede responder eso, los datos no tienen dueño. Tienen un casero que ha dejado de prestar atención.
- Coste: almacenamiento, tamaño de las copias de seguridad, planificación de consultas y la carga cognitiva de un esquema que nadie entiende del todo.
- Dueño: el equipo al que sirven los datos, no el equipo cuya migración creó la columna por casualidad.
- Justificación: una razón de una línea que sobreviva a que quien la escribió se marche de la empresa.
Una tabla sin dueño y sin justificación no es neutral. Es deuda con un interés más lento que la deuda de código, que es justamente por lo que es más peligrosa. Nadie se da cuenta hasta que vence la factura.