Скільки коштуватиме ваш проєкт у нас? Опишіть його кількома рядками і побачте наш діапазон за дві хвилини. Отримати оцінку

Чому варто обрати компанію з розробки на Symfony, а не окремих розробників?

Компанія з розробки на Symfony дає вам робочу команду зі спільними практиками з першого тижня, замість того щоб самим збирати окремих людей і керувати ними. Фрилансери добре підходять для невеликих, чітко визначених завдань. Найм у штат добре працює на довгу перспективу, але зазвичай займає місяці на кожного senior-розробника Symfony. Виділена команда від компанії закриває цю прогалину: архітектура, код-рев'ю, QA та DevOps уже включені, а команда може збільшуватися чи зменшуватися відповідно до вашої дорожньої карти.

Symfony для нас не побічна навичка. PHP/Symfony - основний бекенд-стек Lytvynov Production, і на ньому працює багато бізнес-платформ, які ми створили, від власної ERP до маркетплейсу для авторів.

Варіант Час до старту Найкраще для Основний ризик
Symfony-розробник на фрилансі Дні Дрібні виправлення, короткі завдання Немає підміни, нерівномірне код-рев'ю
Найм у штат Часто 2-4 місяці на одного senior Основна довгострокова команда Повільний найм, складно скоротити
Виділена команда від компанії 1-3 тижні Розробка продукту, оновлення, швидке масштабування Потрібні чіткі правила відповідальності й комунікації
Проєкт із фіксованим обсягом 1-3 тижні після оцінки обсягу Нова розробка чи оновлення з визначеним результатом Зміни обсягу потребують процесу погодження змін

Яка вона, виділена Symfony-команда?

Виділена Symfony-команда - це стабільна група інженерів, які місяцями чи роками працюють лише над вашим продуктом і всередині ваших процесів. Поширений стартовий склад: один senior-інженер Symfony, що відповідає за архітектуру, плюс один-два Symfony-розробники, а фронтенд-розробник (React, Vue або Angular), QA та DevOps долучаються на часткову зайнятість за потреби.

Команда працює у ваших репозиторіях і системі тікетів, бере участь у ваших стендапах і дотримується ваших правил код-рев'ю й релізів або приносить власні, якщо у вас їх ще немає. Ми працюємо англійською (і французькою, коли це доречно), з перетином робочих годин для часових поясів Європи й США. Усередині команди ми використовуємо ШІ-агентів для написання коду під наглядом senior-інженерів для рутинної роботи на кшталт тестів, міграцій і рефакторингу, тож більша частина бюджету йде на те, що потребує людського судження. Як робота з українською командою виглядає порівняно з іншими варіантами, читайте в статті про аутсорсинг розробки ПЗ в Україну.

Як ми створюємо нові застосунки на Symfony?

Нові застосунки на Symfony починаються з предметної області, а не з фреймворку. Спершу ми моделюємо бізнес-сутності й правила, потім відображаємо їх на сутності Doctrine, сервіси й обробники повідомлень і тримаємо бізнес-логіку поза контролерами, щоб її можна було тестувати й використовувати повторно.

Наше стандартне налаштування для нової розробки:

  • Symfony на актуальному PHP 8.x, strict types, PHPStan на високому рівні з першого дня.
  • Doctrine ORM з PostgreSQL або MySQL і версіонованими міграціями.
  • API Platform для продуктів за принципом API-first або Twig із Symfony UX для інтерфейсів із серверним рендерингом.
  • Symfony Messenger з Redis або RabbitMQ для фонових завдань, листів, імпорту й інтеграцій.
  • Mercure для оновлень у браузері в реальному часі.
  • EasyAdmin для бек-офісів, які потрібні швидко.
  • Docker, CI/CD і автоматизовані тести (PHPUnit, функціональні тести) у конвеєрі ще до виходу першої функції.

Так була створена власна ERP для американської компанії з обслуговування літаків: шість місяців на Symfony/PHP, React, SQL і Mercure. Керування клієнтами й замовленнями, планування обслуговування літаків, зміни персоналу, синхронізовані з календарями Google, Apple і Team, складський облік у реальному часі й контроль відповідності регуляторним вимогам. Нею щодня користуються всі, від наземного персоналу до CEO.

Як оновити старі проєкти на Symfony 4 чи 5 до 6.4 або 7?

Оновлення старого проєкту на Symfony означає рух по одній мажорній версії за раз, виправлення застарілих викликів перед кожним стрибком і збереження можливості розгортати застосунок протягом усього процесу. Проєкти на Symfony 4.4 давно вийшли за межі підтримки, а Symfony 5.4 вийшов із періоду звичайних виправлень помилок, тож такі проєкти більше не отримують регулярних виправлень і часто прив'язані до старих непідтримуваних версій PHP. Ціль сьогодні зазвичай актуальний реліз із довгостроковою підтримкою в лінійці 6.4 або 7.x, залежно від вашої версії PHP і залежностей.

Наш процес оновлення:

  1. Аудит (1-2 тижні): версії PHP і Symfony, журнал застарілих викликів, бандли та стан їхньої підтримки, покриття тестами, хостинг.
  2. Страхувальна сітка: додаємо smoke- і функціональні тести для критичних сценаріїв, якщо покриття слабке.
  3. Оновлення PHP: спершу переходимо на підтримувану версію PHP 8.x, більшість змін синтаксису бере на себе Rector.
  4. По одній мажорній версії Symfony за раз: 4.4 до 5.4, 5.4 до 6.4, 6.4 до 7.x, з усуненням застарілих викликів перед кожним кроком.
  5. Заміна покинутих бандлів на підтримувані альтернативи чи невеликий власний код.
  6. Конфігурація й атрибути: переносимо анотації на PHP-атрибути, оновлюємо конфігурацію безпеки під нову систему автентифікаторів.
  7. Поетапний реліз із моніторингом, щоб кожен крок можна було відкотити.

Для дуже старого коду на Symfony 2 чи 3 або на чистому PHP без фреймворку ми зазвичай радимо поступову міграцію: нові функції в новому застосунку на Symfony, а старі частини переносяться модуль за модулем за тими самими URL.

Як ми створюємо API на API Platform?

API Platform - найшвидший спосіб створити добре задокументований REST- чи GraphQL-API на Symfony. Він генерує ендпоінти, документацію OpenAPI, пагінацію, фільтрацію й валідацію з ваших ресурсів, тож команда витрачає час на бізнес-правила, а не на шаблонний код.

Ми використовуємо API Platform для бекендів, що обслуговують вебзастосунки на React чи Vue, мобільні застосунки на React Native чи Flutter та інтеграції з партнерами. Там, де бізнес-операції не зводяться до простого створення, читання, оновлення й видалення, ми пишемо власні state providers і processors або відкриваємо явні ендпоінти для дій. Правила безпеки задаються для кожної операції й покриваються тестами, а фільтрація за тенантами застосовується на рівні Doctrine, тож жоден ендпоінт не може розкрити дані іншого клієнта. Такий самий підхід ми використовуємо в розробці SaaS.

Як розв'язати проблеми з продуктивністю Symfony і PHP?

Проблеми з продуктивністю Symfony майже завжди лежать у шарі бази даних або в роботі, яка виконується під час запиту, хоча має йти у фоні. Ми починаємо з вимірювань профайлером на реальних патернах трафіку, а потім усуваємо найбільші витрати першими.

Типові знахідки й рішення:

Симптом Типова причина Рішення
Повільні сторінки зі списками N+1 запити в Doctrine, відсутні індекси Жадібне завантаження або DTO-запити, правильні індекси
Повільні відповіді API під навантаженням Гідрація повних сутностей для простого читання Моделі для читання, часткові запити, HTTP-кешування
Тайм-аути під час імпорту чи експорту Важка робота всередині вебзапиту Воркери Symfony Messenger, пакетна обробка
Високі витрати на сервери Немає попереднього завантаження OPcache, немає шару кешу OPcache і preloading, кеш у Redis, пули кешу
Стрибки пам'яті в консольних командах Необмежений unit of work у Doctrine Пакетна обробка з періодичним очищенням

Ritoria, платформа на Symfony, яку ми створили, з 54 доменними сутностями, трьома платіжними провайдерами й бек-офісом на EasyAdmin із 38 розділів, два з половиною роки працювала в продакшені на AWS і пройшла через 120 міграцій бази даних. Довговічні продукти на кшталт цього лишаються швидкими, лише коли перевірки продуктивності є частиною звичайної розробки, а не аварійним проєктом.

Як ми працюємо з Symfony-командами

Ми починаємо з короткого дзвінка, а для наявних проєктів з аудиту коду, що завершується письмовим звітом і планом. Для нових розробок починаємо з оцінки обсягу й фіксованої ціни першого етапу. Далі ми або виконуємо етапи з фіксованим обсягом, або надаємо виділену Symfony-команду на щомісячній основі, а код та інфраструктура завжди лишаються у ваших акаунтах. Якщо ви ще обираєте фреймворк, прочитайте порівняння Symfony чи Laravel для SaaS.

Запишіться на дзвінок із лідом Symfony-команди і розкажіть про ваш проєкт, поточну версію Symfony і те, що не працює.

Кейси

Часті запитання

Загальна вартість більше залежить від складу команди й обсягу робіт, ніж від будь-якої погодинної ставки, тому після короткої розмови для оцінки обсягу ми називаємо щомісячний бюджет команди або фіксовану ціну етапу. Для орієнтиру: вебзастосунок на Symfony у нас зазвичай коштує 5 000-15 000 USD, а більшість MVP вкладається в 10 000-20 000 USD. Агенція зі США за такий самий обсяг зазвичай називає ціну у 2-4 рази вищу.

Для типового бізнес-застосунку оновлення Symfony на кілька мажорних версій займає від 3 до 12 тижнів. Основні чинники: розрив у версіях PHP, кількість застарілих викликів (deprecations), покинуті сторонні бандли й покриття тестами. Ми оновлюємо по одній мажорній версії за раз, на кожному кроці зберігаємо можливість розгортання застосунку й використовуємо Rector і статичний аналіз, щоб автоматизувати механічні зміни.

Так, для продуктів, які житимуть роками. Symfony має передбачуваний цикл релізів із версіями довгострокової підтримки, зрозумілі шляхи оновлення, сувору типізацію сучасного PHP і компоненти, що використовуються в усій PHP-екосистемі. Він підходить для B2B-платформ, SaaS, ERP та API зі складними бізнес-правилами. Для дуже малих проєктів чи суто контентних сайтів легші інструменти можуть дати швидший старт.

Так. Наші Symfony-розробники можуть працювати у ваших репозиторіях, вашій системі тікетів і за вашими правилами код-рев'ю, брати участь у ваших стендапах і дотримуватися вашого процесу релізів. Зазвичай ми починаємо з одного-двох інженерів і короткого періоду онбордингу, а потім коригуємо розмір команди. Ви повністю володієте кодом і акаунтами, а команда працює з перетином робочих годин із часовими поясами США та Європи.

Так. API Platform - наш вибір за замовчуванням для бекендів на Symfony за принципом API-first, що обслуговують фронтенди на React, Vue чи мобільні застосунки та сторонні інтеграції. Він дає REST- і GraphQL-ендпоінти, документацію OpenAPI, пагінацію, фільтрацію й валідацію на основі моделі даних. Ми додаємо власні state providers і processors там, де бізнес-логіка не зводиться до простого CRUD, і явно задаємо правила безпеки для кожної операції.

Почнімо ваш проєкт
Записатися на дзвінок