Статья

Математика мотивации: стратегии «снежный ком» и «лавина» в React Native

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

Математика мотивации: стратегии «снежный ком» и «лавина» в React Native

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

С технической точки зрения это метод «лавины». Вы сортируете список долгов по убыванию процентной ставки и направляете свободные деньги на самый верхний. Математически это самый эффективный путь.

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

Логика: сортировка ради успеха

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

type Debt = {
  id: string;
  name: string;
  balance: number;
  interestRate: number;
};

// The "Avalanche" Logic: Maximizing Interest Savings
const getAvalancheOrder = (debts: Debt[]) => {
  return [...debts].sort((a, b) => b.interestRate - a.interestRate);
};

// The "Snowball" Logic: Maximizing Psychological Wins
const getSnowballOrder = (debts: Debt[]) => {
  return [...debts].sort((a, b) => a.balance - b.balance);
};

Техническая задача: сравнение в реальном времени

Настоящая ценность для пользователя не просто в списке, а в понимании последствий его выбора. В TinyDebt мне пришлось создать механизм прогнозирования, который запускает оба алгоритма с учётом ежемесячного «дополнительного» платежа пользователя и показывает две разные «даты освобождения от долгов».

Поскольку приложение работает по принципу local-first и использует простую модель данных с упором на приватность, расчёты выполняются мгновенно. Нет индикатора загрузки, пока сервер считает график погашения. В результате интерфейс отзывчивый и вдохновляющий.

Почему «снежный ком» выигрывает в битве за UX

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

В программировании мы называем это снижением трения:

  • Лавина похожа на рефакторинг огромного сложного устаревшего модуля в первую очередь. Это правильно, но изматывает.
  • Снежный ком похож на исправление трёх «лёгких» багов в понедельник утром. Это даёт заряд дофамина, необходимый, чтобы взяться за серьёзные задачи во вторник.

Вывод: проектируйте для людей, а не только для баз данных

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

Если вы создаёте утилиту, задайте себе вопрос: моя логика оптимизирована для процессора или для человека, который ей пользуется?