Перейти к содержимому

Технические подходы

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

Заставить код работать — дело одного дня; годы безошибочной работы — плод дисциплины.

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

Между «работающим кодом» и «качественным кодом» лежит пропасть

Чтобы получить «работающий код», в индустрии хватит и способного начинающего разработчика (junior). «Работающий код» означает лишь правильный результат для одного спринта, одной функции, одного пользовательского сценария. Но жизнь ПО не ограничивается одним спринтом. Через три месяца, когда нужно добавить новую функцию, через полгода, когда приходится выдерживать всплеск трафика, через год, когда приходит счёт за технический долг, — вот тогда и становится видна пропасть между «работающим» и «качественным» кодом. Первый при каждом изменении порождает новую ошибку, второй продолжает спокойно расти. В инженерной культуре Partnerfy слово «работает» никогда не используется само по себе: оно превращается в письменное обязательство «работает и остаётся недорогим в сопровождении». Первый день и третий год — в равной мере часть нашего договора.
Между «работающим кодом» и «качественным кодом» лежит пропасть

Мы опираемся на три современные инженерные методологии

Базовая дисциплина, закреплённая в договоре: как создаётся каждая строка кода. Это не методологии, которыми мы пользуемся, а методологии, которые мы приняли.

Agile / Scrum

Двухнедельные спринты, оценка в story points, ретроспективы и замер производительности команды (velocity). Ход проекта виден каждую неделю; при отклонении контрольная точка срабатывает уже в ходе спринта, а не в начале следующего.

TDD / BDD

Мы пишем тест раньше кода. До начала разработки функции уже существуют тестовые сценарии, описывающие её поведение. Ошибки мы ловим до их появления, а не исправляем после.

CI/CD и DevOps

Каждый коммит автоматически тестируется, упаковывается и отправляется в staging-среду. Ручного развёртывания нет, поэтому на этом этапе исключён человеческий фактор. Запуск функции — это не команда, а кнопка.

Цена спагетти-кода не видна в день сдачи

Цена спагетти-кода не видна в день сдачи

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

Путь строки кода в рабочую среду: три беспощадных фильтра

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

1. Проверка человеком (код-ревью)

Сначала код проверяет другой опытный (senior) инженер. Есть ли логическая ошибка? Есть ли уязвимость? Соответствует ли код стандартам? Не нарушены ли наши архитектурные принципы? Код без одобрения не переходит на следующий этап. Автор и проверяющий — всегда разные люди: никто не утверждает собственный код.

2. Автоматические тесты (CI-пайплайн)

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

3. Развёртывание на staging + zero-downtime

Код, прошедший тесты, попадает в staging — точную копию рабочей системы. После финальной проверки в условиях, близких к реальным данным, он незаметно для пользователей запускается без простоя (zero-downtime). Если что-то идёт не так, автоматический откат за считаные минуты возвращает предыдущую версию.

Без вашего одобрения ничего не запускается

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

Наш трёхэтапный технический фильтр доводит проект до состояния «готов к запуску», но для нас «готов» не значит «запущен». Каждый разработанный проект сначала предоставляется вам в панели ID.Partnerfy по персональному, закрытому извне staging-URL. На этом этапе ваш клиент ещё ничего не видит. Вы лично проверяете дизайн, функции и контент прямо в своей панели. Если есть правки, вы отправляете их через панель; если нет, подтверждаете запуск кнопкой «Запустить». В тот момент, когда ваша цифровая подпись попадает в систему, проект автоматически запускается на реальном домене. Этот механизм — не просто интерфейс, а архитектурное решение, в котором сходятся три разные дисциплины. Во-первых, он добавляет ещё один шаг между вами и вашим клиентом; во-вторых, гарантирует, что последнее слово в техническом решении остаётся за вами; в-третьих, позволяет поймать любую обратимую техническую ошибку «за кулисами, а не на сцене». «Запустить» — это не кнопка, а ваше решение.

Одна кнопка в ID.Partnerfy: «Запустить»

Экран подтверждения в панели ID.Partnerfy — самый конкретный результат нашей партнёрской архитектуры. По каждому разработанному модулю вы видите в панели четыре вещи: (1) staging-URL — ссылку для предпросмотра финальной версии проекта перед выпуском; (2) заметки о разработке — какие функции добавлены или исправлены в этом спринте; (3) отчёты о тестировании — результаты автоматических тестов; (4) кнопку «Запустить» — красную, большую, заметную. Пока вы не нажмёте эту кнопку, модуль не вносит никаких изменений в рабочую систему, которую видит ваш клиент. Как только вы её нажмёте, автоматически начнётся развёртывание, смена версии пройдёт без простоя (zero-downtime), а по завершении вы получите уведомление в панели. При желании право нажимать эту кнопку можно открыть отдельным сотрудникам вашей команды. Её может нажимать менеджер по работе с клиентами, продуктовый менеджер, даже ваш конечный клиент — это ваше организационное решение. Но кто бы её ни нажал, в момент нажатия цепочка полномочий фиксируется в журнале.
Одна кнопка в ID.Partnerfy: «Запустить»

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

100%
Прохождение код-ревью
Ни строки кода без одобрения человека
85%+
Покрытие тестами
Автоматический тестовый пайплайн
<5 мин
Время отката
Когда что-то идёт не так

Шесть документов, которые мы передаём вместе с кодом

Сдать ПО — значит не просто отправить работающий код. Скорость, с которой другой инженер разберётся в проекте через три года, зависит от качества переданной нами документации.

Документация API

В формате OpenAPI / Swagger: схемы входных и выходных данных для каждого эндпоинта, примеры пар запрос/ответ, перечень кодов ошибок и требования к авторизации. Фронтенд-команды и партнёры по интеграции могут приступать к коду без лишних разговоров.

Архитектурная схема

Высокоуровневая схема системы: какой сервис с каким взаимодействует, откуда и куда идут данные, какая интеграция какой слой использует. К ней приложены обоснования архитектурных решений (Architecture Decision Records).

Схема базы данных

ER-диаграмма, описания таблиц, карты связей, стратегия индексации и типы данных. Файлы миграций лежат в репозитории, находятся под контролем версий и упорядочены.

Руководство по развёртыванию

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

Операционный регламент (runbook)

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

Комментарии в коде

Комментарии JSDoc / PHPDoc / KDoc на уровне функций, обоснования критически важных архитектурных решений рядом с самой строкой кода. Код рассказывает о себе сам, и чтобы прочитать документацию, не нужно переключаться на другую вкладку.

Через годы другой инженер откроет этот код — и, даже если нас уже не будет рядом, код сам всё расскажет

Хорошо написанный код — лучшая документация.

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

Свяжитесь с нами, чтобы подробно познакомиться с нашим техническим подходом

Заполните форму ниже: мы пришлём подробный технический white paper с нашими инженерными стандартами, пример документации API и схему процесса разработки. С нами также можно связаться напрямую по телефону 0850 259 30 04.

По любым вопросам вы всегда можете связаться с нами: [email protected]

Ваша заявка получена!

Мы рассмотрим вашу заявку на партнёрство и свяжемся с вами по номеру в ближайшее время.

—

Какой у вас тип компании?

В чём вам нужна поддержка?

500
1 1.000

Примерное количество клиентов, которых вы хотите привлекать в месяц (1–1000)

Bölüm Tipi Seç

Eklemek istediğiniz bölüm tipini seçin

Eklendikten sonra Filament admin'den içeriği düzenleyebilirsiniz.

результ.