Приложения на Laravel и PHP
Приложения на Laravel, созданные для передачи.
Клиентские порталы, подписочный биллинг, внутренние инструменты и API, которые связывают их со всем остальным, что у вас работает. Типизированные, протестированные там, где это важно, и задокументированные настолько, что вы сможете заменить меня без драмы, — это единственное честное определение завершённого проекта.
01ОбъёмЧто я делаю
Какие приложения обычно имеются в виду.
Порталы для клиентов и партнёров
Место, куда ваши клиенты входят, чтобы видеть свои данные: заказы, счета, документы, потребление, права доступа. Сложны здесь редко экраны. Сложны модель прав, журнал аудита и то, что происходит, когда одному аккаунту нужны шесть пользователей с разным доступом.
Подписочный биллинг и выставление счетов
Тарифы, пропорциональный расчёт, условия оплаты, работа с просрочками, налоги, PDF-счета и отчёт о сверке, которому ваша бухгалтерия действительно доверяет. Я строю биллинг на двойной записи, а не на накопительном итоге, потому что накопительный итог невозможно проверить в тот день, когда кто-то оспаривает списание.
Внутренние инструменты вместо таблицы
Процесс, который сейчас живёт в общей таблице, с конфликтами версий и единственным человеком, который в ней разбирается. Превратить его в приложение — часто самая выгодная работа, которую может заказать компания, и обычно самая небольшая.
API и интеграции
Эндпоинты REST или GraphQL для вашего фронтенда, мобильного приложения или партнёра. Плюс интеграции, связывающие Laravel со всем остальным, что у вас работает: ERP, CRM, платёжным провайдером, складской системой.
Принять чужую кодовую базу
Такие проекты я начинаю с недели только на чтение: запускаю тесты, если они есть, составляю карту доменных моделей и записываю, что нашёл, — включая то, что меня беспокоит. Вы получаете эту оценку независимо от того, продолжим ли мы, так что никогда не платите лишь за то, чтобы услышать, что с кодом всё хорошо.
02МетодКуда идут деньги
На что я трачу ваш бюджет.
Большинство бюджетов на приложения теряется в одних и тех же трёх местах, поэтому внимание уходит туда, а не в то, что хорошо смотрится на демо.
Модель данных — прежде всего
Решения по схеме — те, которые нельзя дёшево отменить. Миграция, которая через восемнадцать месяцев делит одну таблицу на три, с живыми данными клиентов и набором отчётов, завязанных на неё, — самый дорогой день в жизни проекта. Лучше потратить на схему два лишних дня, чем две лишние недели на такую миграцию.
Всё, что касается денег и прав
Биллинг, роли и всё, что пишет в бухгалтерскую книгу, покрывается тестами. Не ради значка покрытия, а чтобы следующий человек мог изменить вашу логику цен, не сломав молча счета прошлого квартала. В остальном я тестирую неудобные пути и не трогаю очевидные.
Что происходит, когда ломается что-то другое
Интеграция не закончена, когда работает. Она закончена, когда разумно ведёт себя, пока другая система не отвечает. Это очереди задач, ограниченные повторы, ключи идемпотентности и журнал ошибок, который может прочитать человек, — чтобы неудачный день у поставщика задержал ваши данные, а не потерял их.
Ничего экзотического. Это обычный, аккуратный Laravel. Разница проявляется на второй год — ровно тогда, когда большинство агентств уже ушло, а вы выясняете, что на самом деле купили.
03ПередачаЧто остаётся у вас в конце
Результат — это не только работающее приложение.
- 01
Репозиторий
- В вашей организации, а не в моей, с первого коммита. С полной историей и сообщениями коммитов, объясняющими зачем, а не только что.
- 02
Описание архитектуры
- Несколько страниц о доменных моделях, принятых решениях и отвергнутых вариантах с причинами. Этот документ сэкономит вашему следующему разработчику две недели.
- 03
Рабочее локальное окружение
- Новый разработчик должен пройти путь от клонирования до работающего приложения меньше чем за час, с сидерами, которые создают реалистичные данные. Если на это уходит день, проект не закончен.
- 04
Заметки по деплою и откату
- Как происходит деплой, какие есть переменные окружения, куда уходят бэкапы и как откатиться в два часа ночи, не звоня мне.
04ВопросыЧастые вопросы — прямые ответы
О чём спрашивают, прежде чем нанять меня.
Это должно быть приложение на Laravel или сайт на WordPress?
Если главная задача — публиковать страницы, которые редактируют люди без технических знаний, WordPress обычно дешевле и быстрее. Если главная задача — чтобы пользователи входили и что-то делали — заказывали, бронировали, согласовывали, строили отчёты, — это приложение. Втиснуть приложение в WordPress за два года обычно обходится дороже, чем один раз построить его правильно.
Можете ли вы принять существующую кодовую базу?
Да, и это немалая часть моей работы. Всё начинается с недели только на чтение и письменной оценки: что есть, что рискованно и что я сделал бы первым. Этот документ остаётся у вас, что бы вы ни решили дальше.
Вы пишете тесты?
Для всего, что связано с деньгами, правами или целостностью данных, — да. Я не гонюсь за процентом покрытия: набор тестов, проверяющих, что геттеры возвращают значения, — это затраты на поддержку под видом качества. Тесты существуют, чтобы кто-то мог изменить ваш биллинг, не сломав его.
Как вы решаете вопросы деплоя и хостинга?
С тем, что у вас уже есть: VPS, Forge, Ploi, Vapor, контейнеры. Если пока ничего нет, порекомендую самое простое решение под ваш трафик. Для большинства бизнес-приложений это один хорошо настроенный сервер с управляемыми бэкапами базы данных, а не кластер.
Можете ли вы интегрироваться с нашей ERP или CRM?
Обычно да. Настоящий вопрос никогда не в том, возможно ли это, а в том, как всё поведёт себя, когда другая система тормозит или лежит. Очереди задач с ограниченными повторами и понятный журнал ошибок — чтобы их сбой задерживал ваши данные, а не терял их.
А если после запуска понадобятся изменения?
Репозиторий и документация принадлежат вам, поэтому вы можете нанять кого угодно. Если хотите продолжить со мной, я предлагаю ежемесячный пакет часов. Чего я стараюсь избежать — так это стать структурно незаменимым: приложение, которое могу поддерживать только я, — это риск для вас, а не преимущество для меня.
Следующий шаг
Опишите процесс, который хотите заменить.
Даже примерного описания мне хватит, чтобы сказать, это работа на две недели или на два квартала, — и какие части можно отложить в первой версии.