Сначала честно: облако было бы проще
Когда строишь продукт в одиночку, любое решение проверяется одним вопросом — сколько это стоит сил. И по этому счёту облако выигрывает у local-first вчистую.
В облаке всё складывается само. Данные лежат на моих серверах — значит, я в любой момент их вижу, могу отладить баг на реальной записи, могу починить сломавшуюся синхронизацию за пользователя, могу выкатить новую фичу и прогнать её по всем данным разом. Поиск, аналитика, восстановление после сбоя — всё это в облаке пишется быстро, потому что данные под рукой и они открыты.
Local-first отбирает у разработчика ровно это удобство. Данные на чужом устройстве, в зашифрованном виде, и я к ним не имею доступа. Каждая из перечисленных задач становится в разы сложнее. Так что давайте сразу договоримся: я не выбирал local-first потому, что так легче. Я выбрал его вопреки тому, что так тяжелее.
Что Alfric на самом деле держит в руках
Чтобы понять, почему я всё-таки пошёл этим путём, надо посмотреть, с чем именно работает продукт.
Alfric слушает ваши созвоны. Он сохраняет записи и расшифровки, вытаскивает из них решения, задачи, договорённости, помнит, кто есть кто в вашей жизни. Это не рабочие таблички и не публичные заметки. Это ваш разговор с врачом. Обсуждение зарплаты с руководителем. Ссора с партнёром по бизнесу. Планы, которыми вы пока не готовы делиться ни с кем.
Теперь представьте, что всё это лежит на чьём-то сервере. Пусть даже на моём, пусть я хороший человек и обещаю не смотреть. Вопрос доверия так не работает. Если технически я могу прочитать вашу жизнь — значит, её могут прочитать: по ошибке в коде, по запросу, по взлому, по смене владельца компании через пять лет. Обещание «мы не смотрим» стоит ровно столько, сколько стоит компания, которая его дала.
Я не хочу, чтобы доверие ко мне держалось на моём честном слове. Я хочу, чтобы оно держалось на устройстве продукта. Это и есть настоящая причина, по которой всё остальное неважно.
Что значит local-first на практике
Лозунгами легко бросаться, поэтому вот конкретика — что стоит за словами.
Записи и расшифровки живут на вашем компьютере. Не на моём сервере с копией у вас, а именно наоборот: оригинал у вас, и без вашего устройства его нигде нет. Alfric открывается и работает, даже когда интернета нет вообще, — потому что данные не «где-то там», а прямо здесь.
Синхронизация между устройствами зашифрована, и ключ у вас. Да, между вашим ноутбуком и вашим телефоном данные ходят через сеть — иначе синхронизации не бывает. Но уходят они уже зашифрованными на вашей стороне, ключом, которого нет у меня. Через канал синхронизации проходит нечитаемый набор байтов. Даже если бы я захотел заглянуть внутрь, я бы увидел шифр, а не ваш разговор. Это не политика конфиденциальности, это математика.
Ключ у пользователя — значит, у пользователя. Тут нет звёздочки мелким шрифтом. Ключ не хранится у меня «на всякий случай для восстановления». Я физически не могу расшифровать ваши данные. Это сознательное самоограничение: я отрезал себе доступ, чтобы никто не смог получить его через меня.
Вот и весь манифест, если убрать красивые слова: оригинал — у вас, канал — зашифрован, ключ — ваш, доступа у меня — нет.
Что это даёт
Теперь — ради чего всё это. Польза здесь не абстрактная «приватность вообще», а несколько очень конкретных вещей.
Вы можете доверить продукту то, что раньше не доверили бы ничему. Именно самое личное — здоровье, деньги, отношения, сырые мысли вслух — и есть то, ради чего персональная память вообще имеет смысл. Инструмент, которому нельзя рассказать важное, бесполезен. Local-first снимает внутренний тормоз: можно не фильтровать, что записывать, потому что это никуда не утечёт.
Продукт не может предать вас задним числом. Компании меняют политику. Их покупают. У них случаются утечки. Когда данных нет у компании, все эти сценарии вас не касаются. Нельзя слить то, чего у тебя нет. Ваша приватность не зависит от того, останусь ли я порядочным и цела ли моя инфраструктура.
Это работает вне зависимости от связи и от меня. Нет интернета — Alfric работает. Мои серверы легли — ваши данные на месте. Я закрою проект через год (надеюсь, что нет) — ваш архив останется у вас, а не исчезнет вместе с моим биллингом. Ваши данные не в заложниках у моего аптайма.
Чего это стоит
Я обещал честно — значит, и про цену тоже. У local-first есть реальная плата, и глупо делать вид, что её нет.
Ключ у вас — ответственность тоже у вас. Раз я не храню ключ, я не могу восстановить вам доступ, если вы его потеряете. Забыли, потеряли, не сделали резервную копию — и данные останутся зашифрованными навсегда, в том числе для меня. Свобода от чужого доступа и невозможность восстановления через поддержку — это две стороны одной монеты. Поэтому в Alfric я вкладываю силы в понятное резервное копирование ключа, но снять с вас эту ответственность целиком не могу физически — иначе это уже не local-first.
Часть удобств даётся тяжелее. Синхронизация зашифрованных данных, поиск по тому, что я сам не вижу, разбор багов без доступа к записи пользователя — всё это сложнее и медленнее в разработке. Некоторые фичи, тривиальные для облака, здесь требуют отдельной инженерной возни. Я плачу этим временем, чтобы вы не платили приватностью.
Я почти слеп к тому, как вы пользуетесь продуктом. Обычный SaaS смотрит на данные пользователей и улучшает продукт по ним. Я так не могу и не хочу. Значит, обратную связь я получаю только тогда, когда вы сами мне её даёте. Это медленнее. Но это честная цена за то, что ваша жизнь — не мой датасет.
Почему я всё равно так решил
Если свести всё к одному, выбор был такой: сделать себе удобно — или сделать так, чтобы вам было безопасно доверить продукту важное. Совместить не получалось: настоящий доступ у меня либо есть, либо нет, среднего не бывает.
Я выбрал вторую сторону, потому что понял простую вещь. Персональная память — это не фича, которую оценивают по количеству кнопок. Это про доверие, а доверие либо тотальное, либо его нет. Продукт, которому можно рассказать только безопасное, не стоит того, чтобы его строить. А чтобы можно было рассказать всё, я должен был отрезать себе возможность это «всё» прочитать.
Local-first дороже мне в разработке и в поддержке. Но он дешевле вам — вы платите за него не своей приватностью. И это единственный размен, на который я в этом продукте готов пойти без колебаний.
Что с этим делать вам
Практический вывод простой и он шире, чем один Alfric. Когда в следующий раз будете выбирать инструмент, которому собираетесь доверить что-то личное, задайте ему один вопрос: где физически лежат мои данные и у кого ключ. Если ответ — «на наших серверах, доступ есть у нас» — вы доверяете не продукту, а обещанию компании. Если ответ — «на вашем устройстве, ключ у вас» — вы доверяете устройству продукта, а не чьему-то слову.
Я построил Alfric так, чтобы на этот вопрос был правильный ответ. Не потому что так проще — а потому что иначе нет смысла просить вас доверить ему свою жизнь.