Как и зачем я написал свой «Контроль расходов»

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

Идея

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

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

Да, уже многие приложения научились автоматически брать часть информации из банковских уведомлений и чеков, это немного облегчает работу пользователя. Но правда в том, что мне вовсе и не нужна подробная информация о категориях расходов. Я и так примерно представляю, сколько трачу на еду и на транспорт. А все что не упрощает нашу жизнь — усложняет её.

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

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

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

Как и зачем я написал свой «Контроль расходов»

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

Мне было достаточно ввести в поле «Остаток» денежную сумму на текущую дату, чтобы увидеть срез моего финансового положения и динамику его изменения. Это отнимало минимум времени. Пропущенный день (или дни) не приходилось навёрстывать — достаточно скорректировать баланс только на текущую дату.

Недостатком была необходимость ручного заведения новой таблицы на каждый расчётный период (в моем случае — дважды в месяц). Я не заморачивался с накоплением и агрегированием данных и просто каждый раз заново перезаписывал таблицу, поэтому не было никакой истории и статистики. И на смартфоне редактировать таблицу было тоже неудобно. Так родилась идея написать приложение.

Разработка

Я давно хотел попробовать Kotlin, потому выбрал этот язык для разработки. Поначалу было очень непривычно после Java, но потихоньку разобрался, теперь код Java для меня выглядит громоздким и архаичным.

Сильно облегчила задачу встроенная возможность Android Studio: при копировании в Kotlin-код фрагмента на Java (например, найденное в сети решение) среда разработки предлагает автоматически преобразовать вставляемый Java-код в Kotlin-код. Иногда получившийся код даже сразу работает, иногда нужна лёгкая доработка. Выглядело это как магия.

Прототипирование интерфейса делал на proto.io, на котором остановился после недолгого перебора вариантов. Мне понравились возможности этого онлайн-редактора, бесплатного плана вполне хватило под мои задачи — найти место на экране для основных элементов интерфейса.

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

Нарисованные прототипы главного экрана приложения и скриншот текущей версии
Нарисованные прототипы главного экрана приложения и скриншот текущей версии

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

Все деньги хранятся в отдельных хранилищах — «Кошельках». Каждому кошельку можно выбрать графический логотип и свой цвет, в который будет окрашена соответствующая часть денежных средств на общей диаграмме. Денежные средства в кошельке делятся на две опциональные части: «Баланс» и «Накопления». При расчёте суточного лимита накопительные средства не учитываются.

Еще одно ноу-хау. У меня есть карта банка, который для бесплатного обслуживания хочет видеть неснижаемый остаток на карте в размере 30 тысяч рублей. Эта сумма не предназначена для расходов. Чтобы не вычитать её в уме каждый раз из общего остатка на карте, в приложении есть флажок для поля «Накопление» — «В составе баланса».

При активации флажка в этом кошельке «Накопления» будут автоматически вычитаться из «Баланса» при подсчёте лимита (смотреть пример ниже на центральном скриншоте, результат назван «На расходы»).

При коррекции средств в кошельке лично мне проще и быстрее напечатать новую сумму в 4–5 цифр, чем позиционировать курсор, удалять одни цифры и заменять их другими, поэтому при переходе в числовые поля их содержимое автоматически выделяется, можно просто набирать новую сумму, старая будет заменена. Но можно и повторно тапнуть по полю, убрать выделение и отредактировать число.

Скриншоты приложения: страница кошельков, открытый кошелек и общая статистика
Скриншоты приложения: страница кошельков, открытый кошелек и общая статистика

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

Однако накопленную статистику хотелось сохранить при переносе приложения на другое устройство, понадобилась функция создания резервных копий и восстановления из них. Для этого было выбрано самое простое решение: простое копирование файлов базы данных в место, которое укажет пользователь (например, на Google Drive).

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

К счастью, использованная мной библиотека Room позволяет переопределить место хранения БД, поэтому я указал папку в хранилище, к которому имеет доступ пользователь, пришлось только добавить запрос разрешения: android.permission.WRITE_EXTERNAL_STORAGE.

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

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

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

Монетизация

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

Платная функциональность разблокируется либо встроенной покупкой в бесплатном приложении, либо покупкой отдельного премиум-приложения. Оба приложения построены на одной кодовой базе, в Android Studio очень удобно сделана эта возможность — при построении автоматически формируется требуемый package и подключаются требуемые для него ресурсы.

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

Поддержка обоих приложений трудностей не вызывает, поскольку нет дублирования кода. Оба APK в среде разработки строятся одновременно. Минусы: чуть больше действий при публикации новой версии и, пожалуй, размывание аудитории по двум приложениям вместо одного.

Но плюсов, на мой взгляд, больше. У меня нет денег на рекламное продвижение для вывода приложения в топы, поэтому два вхождения в результатах поиска приложений увеличивает шансы, что пользователь найдет одно из их (интересно, что Google ранжирует выше именно платный вариант, хотя вне акций его почти не скачивают, в отличие от бесплатного).

Кроме того, раздачи и распродажи платного приложения — это попадание в списки приложений со скидкой и в Google Play, и на других ресурсах, которые мониторят такие предложения.

Распространение

Начало было скромным, за три недели после публикации я получил около 25 установок бесплатного приложения и одну покупку платного.

Недельная бесплатная раздача премиум-версии приложения принесла более тысячи установок (Россия — 32%, Испания — 16%, Великобритания — 12%, Украина — 8%, Мексика — 5%).

После окончания акции был всплеск интереса к бесплатному приложению — более 400 установок, причем чуть больше половины из них пришлось на Португалию, треть — на Бразилию, Россия — 7%, Великобритания — 3% и Испания — 2%. Вероятно, эти результаты не говорят ничего, просто слепой случай показа в топах распродаж в определённых странах.

Гораздо интереснее было получить отзывы. К бесплатному приложению пользователи отнеслись очень лояльно — просто восемь пятёрок и несколько одобрительных отзывов. Платное приложение, хоть и полученное бесплатно, пользователи оценили более строго — 19 оценок со средним баллом 4,53. Особенно порадовал один развернутый отзыв с тройкой.

This app in general is next to useless. I would give it a lower score, if the app description didn't clearly describe what it does. You basically just input how much money you have and how many days until your next paycheck and it divides your money by the days left to tell you how much you can spend. The interface looks okay, but it's not intuitive at all how you're supposed to update your balance. Not applicable at all for freelancers.

Отзыв пользователя

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

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

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

Само приложение:

О себе

Мне 42 года, я программист «широкого профиля». Начинал с Pascal ещё в школе, потом был Clipper и Delphi. Окончил Калужский филиал МГТУ. После Delphi-периода (пару лет писал автоматизированную систему «Кадры») я десять лет работал системным администратором — познакомился с миром FreeBSD, писал служебные скрипты и сайты на Perl и PHP с MySQL. Попутно создавал свои сайты.

Когда возникло желание написать к сайту мобильное приложение, освоил Java и Android SDK. Сейчас работаю frontend-разработчиком в ЗАО «Алгонт» (Калуга) в проекте разработки системы видеонаблюдения (Java, Javascript, JSP, PostgreSQL, Angular, SCSS, Linux).

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

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

Этот блок временно не поддерживается
4949
89 комментариев

Пользуюсь Дзен-мани уже 4 года. И именно расход и составление бюджета по категориям меня привлекает. Не говоря уже том что несколько счетов, общий бюджет с женой, разные валюты и отличный парсинг смс. А бОльшая часть трат именно по карте.
Простого приложения, наверное, достаточно когда живешь от зарплаты до зарплаты. Но когда есть несколько направлений трат кроме ежедневной рутины и с разной скоростью и периодичностью, то надо что-то потяжелее.

17

Тоже пользуюсь ДзенМани
Я поймал себя на мысли, что я прочитал пост и все комментарии, ради того, чтоб найти этот комментарий.
Что это, потребность в социальном одобрении?

5

Присоединяюсь. Почти все траты по карте и электронным кошелькам Дзен Мани подхватывает и корректно разносит по категориям.
А наличку приучил себя по факту траты вносить. Если не получилось, то в конце месяца делаю корректировку.
Как раз этот момент минимального участия и ценю в проге.

3

Зенмани хороши. Тоже на них несколько лет. Иногда расходятся балансы с фактическими, но во всем остальном хороши

1

Многие хвалят дзенмани. Решил ещё раз дать им шанс, два года назад не зашло. Установил, открываю, просят доступ к моим СМС. Отменить или пропустить этот шаг нельзя. Снёс кхуям!

1

Закачал дзен мани, прикольно.
Вот только пока мы не сдаемся и получаем смс, на пушах же не будет так хорошо работать прога.?

Никогда не понимал, зачем нужно иметь целое приложение, чтобы оно считало то, что я сам могу в голове посчитать. Я знаю, что до зарплаты ещё 11 дней, у меня на карте 32000. Мне нужно целое приложение, чтобы посчитать что это примерно 3000 в день? Какую пользу это приложение мне даёт?

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

3