Софт, на котором работает ваш бизнес
Правила вашего процесса, записанные так, что их нельзя нарушить незаметно: записи, состояния, переходы, роли — и тесты, которые падают, когда одно из правил изменилось.
Диапазон
Масштаб: от одной таблицы до системы доменов
Четыре масштаба по возрастанию: одна сущность с валидацией и ролями; состояния и переходы; конкурентный доступ с блокировками и журналом изменений; домены со своими таблицами, правами и тестами.
Один экран вместо таблицы
Одна таблица, форма, за которой действительно стоит валидация, список с фильтрами, экспорт и две-три роли. Дни, а не месяцы. Ценность не в экране: у таблицы нет ограничений, нет истории и нет понятия о том, кому что можно менять, поэтому две её копии тихо расходятся и никто не скажет, какая из них верна.
Процесс с состояниями и переходами
Запись, которая движется: из счёта в заказ, из заявки в решение, из обращения в закрытие. Состояния — перечисление, каждый переход охраняет политика, знающая, кто спрашивает, а то, что происходит по дороге — сформированный документ, отправленное уведомление, записанное движение склада, — висит на событии, а не на том контроллере, который случайно сработал.
Бэк-офис, в котором работают несколько человек сразу
Права, привязанные к строкам, а не к пунктам меню, след того, кто что и когда изменил, документы, сформированные из данных, а не перенабранные, и уже используемые системы, доступные через очередь, чтобы их плохой день не становился вашим. Это та ступень, где двое, правящие одну строку в одну и ту же секунду, перестают быть гипотезой и начинают требовать блокировки.
Много модулей, одна система
Склад, деньги, люди и работа в одной кодовой базе, где у каждого домена свои таблицы, свои политики и свои тесты, плюс плагинный слой, чтобы новый платёжный или доставочный провайдер подключался, а не вписывался в ядро. Одна такая система стоит за этой страницей, и через раздел — то, как она выглядит изнутри.
Трудоёмкость следует не за числом правил, а за тем, как они пересекаются. Одно правило на миллион строк — это дни. Четыре правила, которые в конце месяца противоречат друг другу, — это недели, сколько бы экранов над ними ни было.
Согласования
Состояние-шлюз: запись не переходит дальше без подтверждения, а политика решает, чьё подтверждение требуется.
Роли и права
Контроль доступа на уровне строк, а не пунктов меню. Скрытая ссылка — это не авторизация.
Расписание и брони
Помещения, сотрудники, слоты. Правило непересечения — ограничение целостности в базе, а не проверка в форме.
Правила цены
По клиенту, объёму, договору — вычисляется один раз и фиксируется в строке документа: старый заказ хранит цену продажи.
Документы
Счета, акты и офферы генерируются из данных. Сквозная нумерация без пропусков и дублей — гарантия на уровне базы.
Системы, которые уже работают
Бухгалтерия, банк, мессенджер — асинхронные интеграции через очередь, с повторами и идемпотентностью. Их простой не останавливает ваш процесс.
Отчёты
Агрегация чанками по индексированным колонкам: закрытие месяца не держит блокировок на таблицах, в которые идёт запись.
Склад как журнал
Журнал движений append-only: каждая операция — неизменяемая запись, остаток — агрегат по журналу, а не перезаписываемое поле.
Кадровый учёт
Приёмы, отсутствия и табели — события; итоги — производные агрегаты, пересчитываемые из журнала, а не хранимые вручную.
Воронка
Лиды, сделки, обращения — конечный автомат; сроки — триггеры планировщика, а не поля для отображения.
API
Версионирование, аутентификация на клиента, rate limiting. Спецификация генерируется из тех же определений, что и маршруты.
Унаследованный код
Приёмка чужой кодовой базы на Laravel: характеризационные тесты фиксируют текущее поведение до любых изменений.
Референсная система
Система, построенная, чтобы найти предел
ERP-платформа: склад, финансы, кадры, продажи и клиенты в одной кодовой базе на Laravel. Она собственная, а не клиентская, и пока не обслуживает ничей бизнес — ровно поэтому её можно разбирать здесь до уровня, который в клиентском проекте закрыт договором.
В архиве 2 опубликованных проекта на Laravel, и на каждом из них указанное авторство разработки принадлежит другому человеку — я был там арт-директором, это написано на страницах проектов. Система выше — та, где код мой; на ней эта страница и стоит.
Корректность
Когда двое нажали одновременно
Четыре механизма из этой кодовой базы; каждый написан после реального сбоя. Разработчик узнает их с первого взгляда. Для остальных: это то, из-за чего софт, безупречный на демонстрации, теряет запись, списывает деньги дважды или запускает один импорт два раза.
Пример помельче. Адрес Telegram-бота содержит его собственный токен, поэтому упавшее соединение цитирует живой секрет в тексте ошибки, а стандартный отчёт пишет его прямо в лог. Решение — редактор, который включается только тогда, когда сбой действительно несёт токен; всё остальное сохраняет исходный stack trace. Большая часть этой работы — такого размера.
Стек
На чём написано и что запускается на каждый пуш
Названо прямо, с версиями. Каждая строка прочитана из конфигурации референсной системы — composer.json, настроек очередей, CI-сценария — и любую можно проверить, попросив файл-источник.
Всё, что дальше — где это работает, как выкатывается, кто за этим следит и что бэкапится, — вторая половина работы, и у неё своя страница. Этот раздел намеренно останавливается на сборочной машине.
Как это устроено
Сначала правила, потом код
Разговор о процессе, а не о софте
Что происходит сейчас, кто это делает, где ломается и во что обходится каждая поломка. Здесь принимается большинство полезных решений, и ни одному из них не нужно название технологии.
Записано и согласовано
Записи, их состояния, кто вправе их двигать и что должно быть выполнено до перехода. По этому документу считается оценка, и он остаётся вашим независимо от того, начнётся ли сборка.
Первый срез: одна операция от начала до конца
Одна запись, один маршрут, один экран — в руках тех, кто будет этим пользоваться. Всё, что не так с правилами, вылезает здесь, пока их правка ещё дёшева.
Дальше — модулями, в порядке окупаемости
Модули сдаются по одному, и каждый рабочий в момент сдачи. Ничто не ждёт всего остального.
Передача — список, а не переговоры
Репозиторий, учётные записи и записанные правила ваши с первого дня. Последний шаг — проверка, что вы справляетесь без меня, а не устройство так, чтобы не справились.
Вопросы
Перед обращением
Одна честная оговорка, потому что от неё зависит, применимо ли к вам всё выше. Заказной софт — самый дорогой способ решить задачу, которую уже решает готовое, и у двух самых частых случаев ответ в другом месте этого сайта.
Сайт, страницы которого ваши собственные сотрудники будут постоянно редактировать, — это странице про WordPress.Магазин с каталогом, корзиной и кассой — это... страница про интернет-магазины.
Старт
Заполнить бриф
Это первый проход по правилам вашего процесса — кликами, не сочинением. Обязательны только контакты; всё остальное можно пропустить, и тогда я спрошу это голосом. Ответите на всё — созвон начнётся с середины разговора.