14 апр. 2025 г.·7 мин чтения

Процесс удаления данных: отслеживайте каждую копию данных клиента

Создайте процесс удаления данных, который картирует живые системы, резервные копии, экспорты и инструменты поставщиков, чтобы вы могли отвечать на запросы клиентов с понятными доказательствами.

Процесс удаления данных: отслеживайте каждую копию данных клиента

Почему простые ответы об удалении не работают

Большинство ошибок при удалении начинаются с одного неверного предположения: если строка аккаунта исчезла, значит и клиент тоже. Это редко так.

Данные клиента распространяются. Человек может появиться в базе данных приложения, логах ошибок, почтовых ящиках поддержки, заметках по биллингу, аналитических инструментах и в CSV, который кто‑то скачал несколько месяцев назад. Команда проверяет основной продукт, не видит профиль и отвечает «удалено» слишком рано. Потом тот же клиент появляется в восстановлении из резервной копии, на общем диске или в старом экспорте, который использовался для отчёта.

Обычные проблемные места легко распознать, если их поискать:

  • данные в рабочем продукте
  • логи и записи мониторинга
  • письма поддержки и вложения
  • CSV или таблицы-экспорты
  • резервные копии и снимки

Резервные копии — самая частая «слепая зона». Они существуют, чтобы сохранять старые копии данных, поэтому часто хранят записи дольше, чем основная система. Если вы удалите запись сегодня, резервная копия с прошлой недели может всё ещё её содержать до истечения срока хранения. Если это не объяснить ясно, ответ звучит полным, хотя это не так.

Экспорты хуже, потому что расползаются тихо. Кто‑то из продаж выгружает CSV. Агент поддержки сохраняет скриншоты в папку. Основатель скачивает список пользователей перед заседанием совета и забывает файл на ноутбуке. Эти копии не хранятся в продукте, но они всё равно важны, когда клиент просит удаление.

Малые команды сталкиваются с этим чаще, чем ожидают. Люди действуют быстро, используют простые инструменты и сохраняют файлы там, где ведут работу. Это нормально. Проблема начинается, когда процесс удаления покрывает только приложение и игнорирует всё вокруг.

Важна и формулировка. «Мы удалили ваш аккаунт» не значит то же самое, что «мы удалили ваши данные из активных систем, а оставшиеся копии устареют в соответствии с политикой хранения резервных копий». Первая фраза звучит окончательно. Вторая — честно.

Хороший процесс удаления данных начинается с карты, а не с кнопки. Нужно знать, куда могут попадать данные клиентов, кто может создавать дополнительные копии и какие системы очищаются только после заданного периода хранения. Без этой карты быстрое «да» — просто предположение. А предположения дорого обходятся, когда старая копия появляется позже.

Где обычно прячутся данные клиентов

Удаление одной записи в основной базе приложения редко закрывает задачу. Большинство команд знают, где хранится рабочая информация, но забывают о копиях, созданных для поддержки, отчётности, восстановления или удобства.

Первые места очевидны: ваша продукционная база данных и файловое хранилище. Если приложение хранит профили в PostgreSQL и загрузки в объектном хранилище, оба учитываются. Аватары, контракты, вложения чатов, сгенерированные PDF и кэш‑файлы часто живут вне основной таблицы, где хранится аккаунт пользователя.

Затем идут бизнес‑инструменты вокруг приложения. Служба поддержки хранит историю тикетов. Биллинг системы содержат счета, имена, адреса электронной почты и метаданные платежей. Почтовые платформы хранят списки контактов, логи сообщений и сегменты рассылок. Удалённый аккаунт всё ещё может появиться в переписке по возврату денег или в старой последовательности писем для онбординга.

Аналитические и операционные инструменты часто захватывают больше, чем ожидают. Продуктовая аналитика может логировать user ID, email, IP или свойства событий. Трекер ошибок может сохранять полезные нагрузки запросов, значения форм и трассировки, связанные с сессией клиента. Админ‑утилиты создают ещё одну тихую копию. Если панель для сотрудников позволяет экспортировать запись пользователя или вставить детали в заметки, эта информация теперь существует и в другом месте.

Копии, о которых люди забывают

Экспорты — частая ловушка. Команды генерируют CSV отчёты для финансов, отправляют таблицы в customer success или кладут отчёты в общую папку. Как только файл покинул приложение, ваш обычный процесс обработки запросов на удаление не затронет его, если вы его заранее не определили на карте.

Резервные копии, снимки и системы аварийного восстановления требуют специального подхода. Обычно не стоит редактировать старые резервные копии по одному файлу. Вместо этого нужны понятные правила хранения, способ не допустить возвращение удалённых данных при восстановлении и честный ответ о том, как долго удалённая запись может оставаться в носителях восстановления.

Тестовые системы часто самые запущенные. Разработчики копируют данные продакшена в стейджинг, сохраняют дампы локально или хранят пример полезной нагрузки для отладки. Эти копии могут лежать на ноутбуках, временных серверах или старых контейнерах долгое время.

Маленькая SaaS‑команда может удалить пользователя в приложении за минуты и при этом хранить его данные ещё в шести местах. Поэтому картирование данных клиента должно охватывать каждый инструмент, каждый экспорт и каждую копию для восстановления, а не только приложение, которое видят пользователи.

Как замапить каждую копию

Начните с систем, а не с людей. Люди забывают. Системы оставляют следы.

Если вы хотите, чтобы процесс удаления выдерживал проверку, составьте простой список всех мест, куда могут попадать, жить или уходить данные клиента.

Начните с полного пути данных

Большинство команд начинают с базы приложения и останавливаются слишком рано. Идите дальше. Добавьте платежный инструмент, почту поддержки, CRM, аналитический инструмент, почтовую платформу, файловое хранилище, логи, резервные копии и любой инструмент отчётности, который копирует записи клиентов в своё хранилище.

Затем ищите копии, которые сотрудники создают вручную. Агент поддержки может выгрузить CSV, чтобы ответить на вопрос о счёте. Менеджер по продажам может хранить лиды в таблице. Инженер может скопировать продакшен в окружение для тестирования. Эти копии важны, потому что клиенту всё равно, какая команда сохранила файл — он просил удалить свои данные.

Короткий рабочий лист обычно достаточен:

  • система или место хранения
  • какие данные клиента там хранятся
  • кто за это отвечает
  • как данные туда попадают
  • как долго они там остаются

Зафиксируйте факты, которые имеют значение

Для каждой системы запишите точные данные, которые она держит. Будьте конкретны. «Информация о клиенте» слишком расплывчато. Напишите «адрес электронной почты, имя в платеже, ID счета, вложения поддержки, IP‑логи» или то, что фактически хранится.

Также нужно знать, какие действия поддерживает каждая система. Некоторые системы позволяют полное удаление. Некоторые — только анонимизацию. Некоторые зависят от тайм‑аута. Некоторым нужен ручной тикет поставщику. Эти различия определяют реальный процесс выполнения запроса на удаление.

Важно и владение. Если за систему никто не отвечает, никто не выполнит действия при поступлении запроса. Каждое хранилище данных, путь экспорта и инструмент поставщика нуждаются в человеке, ответственном за проверку.

Постройте рабочий процесс удаления шаг за шагом

Обращайтесь с каждым запросом как с небольшим инцидентом, а не как со срочной задачей поддержки. Если кто‑то удалил строку в приложении и на этом остановился, команда может пропустить экспорты, файлы поддержки или резервные копии, которые всё ещё содержат те же данные клиента.

Начните с установления личности и объёма. Убедитесь, что запрос делает владелец аккаунта или утверждённое контактное лицо, затем определите, что именно нужно удалить. Кто‑то хочет закрыть аккаунт. Кто‑то хочет стереть одно рабочее пространство. Кто‑то — удалить все профили, счета, вложения и переписку, связанные с их именем.

Простой порядок действий работает хорошо:

  1. Заблокируйте создание новых копий. Остановите плановые экспорты, приостановите ручные выгрузки и попросите команду не создавать новые таблицы или дампы для этого клиента, пока дело не закрыто.
  2. Удалите живые данные. Удалите или анонимизируйте записи в базе продукта, инструментах администрирования, логах, используемых в нормальной работе, и в любом хранилище приложения, к которому пользователи всё ещё имеют доступ.
  3. Отправьте задачи везде, что вне основного приложения. Обычно это включает резервные копии, аналитические системы, платежных или поддерживающих поставщиков, файловые шары и внутренние папки. Некоторые системы позволяют полное удаление сразу. Другие — только истечение срока хранения.
  4. Запишите даты, владельцев и ограничения. Если резервные копии хранятся 30 дней — отметьте это. Если поставщику нужен ручной тикет — назначьте человека и дату выполнения.
  5. Закрывайте запрос только после проверки карты. Сравнивайте выполненные задачи с картой данных клиента, а не с памятью.

Для этого не нужен тяжёлый инструмент. Часто достаточно общей таблицы: имя системы, тип данных, требуемое действие, владелец, дата отправки, дата выполнения и правило хранения. Малые команды могут держать это в том же месте, где ведут инциденты или работу поддержки.

Ещё одно правило: назначьте одного человека владельцем всего запроса от начала до конца. Когда владельца нет, команды предполагают, что кто‑то другой сделал работу по резервным копиям или отправил тикет поставщику. Так «удалённые» данные могут висеть месяцами.

Процесс удаления работает только тогда, когда команда может показать, что она сделала, кто сделал и что остаётся в тайм‑ауте хранения. Это даёт поддержке, юристам и инженерам одну и ту же картину истинного состояния.

Простой пример от небольшой SaaS‑команды

Превратите заметки в доказательства
Настройте простой реестр, который ваша команда сможет защитить, когда клиент задает уточняющие вопросы.

Небольшая SaaS‑команда получает запрос на удаление от бывшего клиента. Она отменила подписку, а затем написала в поддержку с просьбой стереть профиль. Команда предполагает, что это займёт пару минут.

Разработчик начинает с приложения. Он удаляет аккаунт клиента, удаляет загруженные файлы и очищает сессии, чтобы пользователь не смог войти по старым токенам. Это покрывает основные данные продукта, и многие команды останавливаются на этом.

Но поддержка проверяет почту до закрытия тикета. Клиент присылал два вопроса по биллингу месяц назад, значит хелпдеск всё ещё хранит её email, полное имя и скриншоты из приложения. Эти скриншоты показывают названия проектов и часть номера счёта. Команда не может сказать, что данные удалены, пока эти тикеты не будут обработаны.

Финансы находят ещё одну копию. Каждый неделю кто‑то экспортирует данные о подписках в CSV для быстрого сверки доходов и кладёт файл в общую папку. В прошлую пятницу в файле ещё есть email клиента, план и статус оплаты. Никто не думал об этом экспорте при первом проходе, потому что он живёт вне продукта.

Вот где рабочий процесс удаления окупает себя. Он превращает одну расплывчатую задачу в короткий список проверок с владельцем и понятным действием:

  • аккаунт в приложении, файлы и сессии — удалить сейчас
  • тикеты поддержки и скриншоты — редактировать персональные данные или удалить вложения
  • экспорт финансов в общей папке — удалить строку или файл, если он больше не нужен
  • резервные копии — зафиксировать период хранения и отметить, что делать при восстановлении старых данных

Шаг с резервными копиями важен, потому что большинство команд не редактируют архивы резервных копий по одной записи. Разумный подход — сначала удалить клиента из живых систем, документировать период хранения резервов и убедиться, что процесс восстановления включает второй проход удаления. Такой ответ честен. Говорить «мы удалили всё», когда резервные копии всё ещё содержат данные, — неправильно.

Команда закроет запрос только после того, как каждая копия получит статус. Один человек подтверждает удаление в приложении. Поддержка подтверждает очистку почтового ящика. Финансы подтверждают, что экспорт исчез. Затем команда фиксирует заметку о сроке хранения резервных копий в карточке дела.

Это убирает ложную уверенность. Запрос считается выполненным, когда у каждой известной копии есть принятое решение, а не потому что первая кнопка удаления сработала.

Ошибки, создающие ложную уверенность

Исправьте ваш runbook по удалению
Работайте с опытным Fractional CTO, чтобы превратить разбросанные шаги в выполняемый рукописью план.

Большинство сбоев при удалении начинаются с чистой панели и запутанной реальности. Запись исчезает из приложения, поддержка закрывает тикет, и команда предполагает, что работа сделана. Тем временем старые копии лежат в местах, которые никто не проверял.

Резервные копии приводят к этому постоянно. Команды часто считают их невидимыми, потому что никто не открывает их в обычной работе. Но резервная копия — это всё та же копия данных клиента. Если вы не можете удалить одного человека из набора резервов, скажите об этом прямо и сопоставьте ответ с политикой хранения резервных копий. «Удалено из продакшена» — не то же самое, что «удалено везде».

Экспорты — ещё одно частое упущение. Сотрудники скачивают CSV для отчётов, сохраняют их на ноутбуках или в общих папках и забывают. Месяцы спустя приложение чистое, но старый файл всё ещё содержит имена, email, счета или заметки. Эти файлы легко игнорировать, потому что они живут вне продукта, но при запросе на удаление они имеют такое же значение.

Команды также попадают в ловушку, когда смешивают запросы на удаление с правилами хранения или судебными удержаниями. Некоторые записи нужно хранить для налогов, расследования мошенничества, логов безопасности или по контракту. В таком случае команда должна прекратить использовать данные в обычной работе, ограничить доступ и записать причину сохранения. Если действует судебная удерживающая мера, скажите об этом прямо. Не помечайте запрос как полностью выполненный, если часть данных должна остаться.

Поставщики тоже вылетают из процесса по простой причине: контрактом управляет другая команда. Инженерия может проверить приложение, в то время как финансы или операционные команды управляют биллингом, почтовой платформой, тикетинговой системой или аналитикой. Клиенту всё равно, кто владеет поставщиком. Если поставщик хранит данные, ваша команда всё равно должна это учесть.

Перед закрытием запроса сохраняйте письменные доказательства каждой проверки:

  • какие системы команда проверяла
  • содержат ли резервные копии ещё данные и когда они истекают
  • искали ли сотрудники старые экспорты и удалили ли их
  • какие поставщики подтвердили удаление или ограничения хранения
  • какие записи остались и почему

Тикет, помеченный как «готово» без заметок, — просто догадка. Письменные доказательства заставляют людей замедлиться, проверить каждую копию и дать ответ, который можно будет отстоять позже.

Быстрые проверки перед закрытием

Перед тем как закрыть запрос, проверьте работу так, как это сделал бы скептически настроенный клиент. Процесс удаления данных реален только тогда, когда кто‑то из команды может простыми словами объяснить, куда ушли данные, что вы удалили и что остаётся на заданный срок.

Простое правило помогает: если никто не может пройти полный путь от базы приложения до логов, экспортов, резервных копий и инструментов поставщиков, у вас нет законченной карты. У вас есть частичная память.

Используйте этот короткий чек‑лист перед закрытием любого запроса:

  • Попросите одного человека проследить запись клиента по всем системам, не спрашивая окружающих. Если он останавливается на «думаю» или «возможно», в карте есть пробелы.
  • Проверьте, что у каждой системы в карте есть назначенный владелец и понятное действие. Удаление, анонимизация, подавление и ожидание автоматического истечения — это разные вещи.
  • Посмотрите за пределы самого приложения. Команды часто забывают CSV‑файлы в общих папках, выгрузки аналитиков на ноутбуках, вложения поддержки и единичные файлы, отправленные партнёрам.
  • Запишите правила резервного копирования простыми словами. Укажите, сколько живут резервные копии, удаляете ли вы внутри них записи и что происходит при восстановлении старого снимка.
  • Прочитайте ответ поддержки перед отправкой. Поддержка должна отвечать фактами, а не предположениями или юридически звучащими формулировками.

Пункт с резервными копиями подводит многие маленькие команды. Вы можете не удалить одного пользователя из всех исторических архивов, и это может быть приемлемо, если ваша политика гласит, что резервные копии запечатаны, доступ к ним ограничен, а старые копии истекают по расписанию. Ошибка — притворяться, что данные полностью исчезли, когда они всё ещё могут появиться при восстановлении.

Экспорты создают другую проблему. Они распространяются быстро и оставляют слабую бумажную тропу. База продукта может быть чистой, в то время как три таблицы всё ещё лежат в почте, облачном хранилище или папке sales ops. Если команда не искала эти копии, запрос не выполнен.

У поддержки должен быть короткий внутренний лист ответов. Он должен покрывать пять вещей: что удалено сейчас, что анонимизировано, что остаётся в резервных копиях, когда эти резервные копии истекают и кто разбирается с пограничными случаями. Этот небольшой шаг экономит время и предотвращает неаккуратные ответы.

Если хотите финальную проверку, попросите нового сотрудника прочитать запись и пересказать дело. Если он может сделать это за две минуты, процесс, вероятно, надёжен.

Что делать дальше

Добавьте надзор CTO
Привлеките внешнюю помощь, когда удаление охватывает слишком много инструментов и владельцев.

Начните с малого. Откройте один документ и перечислите все места, куда может попадать запись клиента: ваша основная база, логи, почтовый ящик поддержки, экспорты, аналитические инструменты, файловое хранилище и резервные копии. Первый черновик будет неполным. Это нормально. Грубая карта лучше, чем ложная уверенность.

Обновляйте эту карту каждый раз, когда команда добавляет инструмент, меняет синхронизацию или создаёт новый экспорт. Формат важнее привычки. Для большинства команд достаточно простой таблицы с названием системы, хранимыми данными, сроком хранения, методом удаления и владельцем.

Затем превратите процесс удаления в короткий runbook, которому люди будут следовать в рабочий день:

  • кто принимает запрос и проверяет личность
  • какие системы проверять в первую, вторую и третью очередь
  • что команда удаляет сразу, а что должно ждать истечения срока резервного копирования
  • как команда фиксирует завершение, задержки и исключения

Держите runbook коротким. Если на его объяснение уйдёт десять страниц, люди будут пропускать шаги и заполнять пробелы по памяти.

Устраивайте одну тренировку каждый квартал. Выберите реальный путь клиента или создайте тестовый аккаунт, затем пройдите весь процесс от приёма запроса до окончательной записи. Засеките время. Зафиксируйте места, где команда замедляется. Эти паузы обычно указывают на копии, за которые никто явно не отвечает.

Если ваш стек охватывает слишком много инструментов, старых поставщиков, ручных экспортов и нескольких слоёв резервного копирования, полезен свежий обзор. Внутренние команды обычно хорошо знают текущее приложение, но забывают скрипт, который кто‑то написал два года назад, или архив, который всё ещё хранит финансовый инструмент.

Если вам нужна такая проверка, Oleg Sotnikov на oleg.is помогает стартапам и малым компаниям разбирать архитектуру, потоки данных, обработку резервных копий и запутанные операционные процессы как Fractional CTO. Внешняя помощь имеет смысл, когда проблема — не один баг, а система, которая выросла быстрее, чем процессы вокруг неё.

Следующий шаг прост: сделайте первую карту, протестируйте один запрос, исправьте то, что ломается, и повторяйте после каждого серьёзного изменения. Команды, которые делают это регулярно, отвечают на запросы на удаление с доказательствами, а не с догадками.

Часто задаваемые вопросы

Достаточно ли удалить аккаунт?

Нет. Удаление строки аккаунта удаляет только одну копию. Вам всё ещё нужно проверить файлы, логи, тикеты поддержки, платежные инструменты, аналитику, экспорты и резервные копии.

Где ещё искать кроме главной базы данных?

Начните со всех мест, куда могут попадать, храниться или откуда уходить данные: база данных приложения, файловое хранилище, почтовый ящик поддержки, биллинговая система, почтовая платформа, логи, аналитика, общие папки и резервные копии. Затем спросите, где сотрудники делают ручные копии — именно они обычно ускользают.

Считаются ли резервные копии после удаления живых данных?

Да. Резервная копия по‑прежнему содержит старые снимки до тех пор, пока не истечет её срок хранения. Большинство команд не редактирует резервные копии по одной записи, поэтому удаляйте живые данные сейчас, документируйте период хранения и убедитесь, что восстановление запускает дополнительный проход удаления.

Что мы должны сообщать клиенту о резервных копиях?

Говорите точно, что изменилось. Скажите, что вы удалили данные из активных систем, объясните, что осталось в рамках политики хранения резервных копий, и укажите, когда эти копии устареют.

Как картировать все копии без покупки большого инструмента?

Используйте простую таблицу. Для каждой системы запишите, какие данные она хранит, кто её владелец, как данные туда попадают, как долго остаются и удаляются ли они, анонимизируются или ждут истечения срока.

Кто должен владеть запросом на удаление?

Назначьте одного человека ответственным от начала до конца. Этот человек проверяет карту, отправляет задания поставщикам, отслеживает даты и следит за тем, чтобы никто не думал, что за это уже кто‑то другой ответил.

Что делать со старыми CSV и таблицами?

Обращайтесь с экспортами как с реальными хранилищами данных, а не с временными файлами. Ищите в общих папках, на ноутбуках, в почтовых ящиках и папках финансового отдела, затем удаляйте строку или файл, если он больше не нужен.

Можно ли закрыть запрос, если некоторые записи должны остаться?

Нет. Если законы по налогам, проверкам на мошенничество, логи безопасности или судебная повестка требуют сохранить часть записей, скажите об этом прямо. Ограничьте доступ, прекратите обычное использование, зафиксируйте причину и не помечайте запрос как полностью завершённый.

Как остановить возвращение удалённых данных после восстановления?

Включите этот шаг в ваш runbook. При восстановлении старого снимка проверяйте его на записи, которые просили удалить, и снова удаляйте их до возобновления обычной работы.

Как понять, что запрос на удаление действительно завершён?

Попросите человека, который не работал над делом, пересказать его по заметкам. Если он сможет сказать, что вы удалили, что анонимизировали, что остаётся в резервных копиях и когда эти резервные копии истекут, запись можно считать готовой к закрытию.