О команде и продукте
Мы — небольшая внутренняя команда finc-apps. Делаем инструмент, которым пользуются наши же коллеги, и раз в пару месяцев записываем сюда, что из этого вышло.
Что мы делаем
Продукт называется просто — «Планировщик». Это внутренний таск-менеджер, сросшийся с календарём встреч: задачи, доски, бронирование переговорок, повторяющиеся встречи, напоминания. Отдельного публичного релиза у него нет и не планируется — он живёт внутри компании и решает наши собственные проблемы.
Началось всё в 2023 году с одной таблицы для бронирования четырёх переговорок. К 2026-му это 340 активных пользователей, 11 переговорок в трёх офисах, около 2 800 встреч и 9 000 задач в месяц. Цифры небольшие по меркам публичных сервисов, но достаточно большие, чтобы наивные решения перестали работать — примерно об этом и весь журнал.
Состав
Пять человек: двое на бэкенде, двое на фронтенде, один на инфраструктуре и данных. Дизайн и продуктовые решения делим между собой — отдельного дизайнера нет, и это заметно по интерфейсу, но нас устраивает.
Стек без сюрпризов
- БэкендGo, PostgreSQL 16
- ОчередиRedis Streams
- ФронтендTypeScript, без крупного фреймворка состояния
- Развёртываниетри ноды, скучный docker compose
- НаблюдаемостьPrometheus, логи в ClickHouse
Мы сознательно держим стек однообразным. Команда из пяти человек не может позволить себе четыре языка и две модели данных: любая экзотика в итоге оказывается на плечах одного человека, а он уходит в отпуск.
Как мы работаем
- Сначала цифры, потом переписывание. У каждой заметки в журнале есть измерение до и измерение после. Если мы не смогли измерить проблему, мы её и не чинили.
- Простое решение живёт, пока не умрёт. Наивное сравнение всех пар встреч продержалось два года — и это была правильная стратегия. Мы поменяли его в тот день, когда оно перестало укладываться в бюджет.
- Никаких «временных» флагов. Флаг с датой удаления в комментарии живёт вечно. Мы заводим фича-флаг только вместе с задачей на его снятие в том же спринте.
- Одна страница разбора после инцидента. Без ритуалов и шаблонов на восемь разделов: что сломалось, что увидели в графиках, что поменяли, как проверим.
Зачем журнал
Изначально это была внутренняя вики-страница, куда мы складывали разборы, чтобы через полгода вспомнить, почему код выглядит именно так. Потом выяснилось, что половина заметок не содержит ничего внутреннего: интервальные структуры данных, обратное давление в очередях и поведение интерфейса при задержках — темы вполне общие.
Так что мы вынесли эту половину наружу, вычистив внутренние ссылки и имена систем. Числа в заметках настоящие, округлённые до разумного. Код в листингах — упрощённый, но по существу тот же, что и в репозитории.
Пишем нерегулярно, примерно раз в шесть-восемь недель. Комментариев здесь нет и не будет — вместо этого мы стараемся, чтобы в самой заметке было достаточно деталей.
Начать удобнее всего со списка заметок.