🎯 Подготовка к вопросам о проекте (CRM для школы английского)

Ключевые тезисы

  • Конспект служит шаблоном для ответов на вопросы о проекте, команде и процессах.
  • Рассматривается пример: внутренняя CRM-система для школы английского языка.
  • CRM — это система управления взаимоотношениями с клиентами, центральный элемент, объединяющий все бизнес-процессы компании.
  • Ответы должны быть правдоподобными, основанными на стандартных практиках, но адаптированными под ваш опыт.

Основное содержание

Контекст проекта: CRM для EdTech

  • Продукт: Внутренняя CRM-система.
  • Компания: Школа английского языка (EdTech).
  • Назначение CRM: Управление учениками и преподавателями: звонки, назначение скидок, отслеживание посещений, автоматизация коммуникации.
  • Роль в компании: CRM выступает "сердцем" компании, объединяя разрозненные сервисы (лендинги, личный кабинет, портал учителей, платежи) в единую экосистему. Без неё отделы работают неэффективно (через Excel, файлы).

🏢 Вопросы о компании и культуре

  • Миссия: Предоставление качественного и доступного обучения английскому с использованием современных технологий и индивидуального подхода.
  • Услуги: Обучение английскому для разных уровней и возрастов, подготовка к экзаменам, индивидуальные и групповые занятия.
  • Команда разработки: Пример: 2 фронтенд-разработчика, 2 бэкенд-разработчика, 1 QA, тимлид, продакт-менеджер. Отдельно — архитекторы и бизнес-аналитики.
  • Развитие сотрудников: Внутренние митапы (например, еженедельные/раз в две недели для фронтенда), обсуждение технологий, бюджет на обучение, индивидуальные планы развития (IDP) с тимлидом.
  • Ценности: Ориентированность на результат, постоянное развитие, командная работа, поощрение инициативы.
  • Мотивация: Бонусы по итогам года, опросы 360°, обещание повышения.
  • Оценка успехов: Успешное выполнение спринтов, качество код-ревью, предложение улучшений в команде.
  • Технологический стек:
    • Фронтенд: React (или Next.js), React Router, TypeScript.
    • Бэкенд: Node.js + Express (или PHP), PostgreSQL/MySQL.
    • Инфраструктура: Docker, GitHub (Actions для CI/CD), Jira, Slack.
  • Управление временем: Двухнедельные спринты, планирование с командой, ежедневные стендапы.

🔄 Вопросы о процессах и интеграции

  • Код-ревью: Обязательно для каждой задачи. Требуется 1-2 апрува. Проводится по мере готовности задачи, сложные задачи обсуждаются всей командой.
  • CI/CD: Использование GitHub Actions. Деплой на тестовое окружение после мержа, на прод — после демо и одобрения заказчиком (часто ночью).
  • Тестирование: Преимущественно ручное (QA пишут тест-кейсы). Автотесты на бэкенде (Jest), на фронтенде их мало или нет. Для интеграции — моки API на бэкенде.
  • Контроль качества: Отдельная команда QA. Инциденты в продакшене фиксируются в специальном Slack-канале, на них реагирует дежурный разработчик.
  • Безопасность и совместимость: Код хранится в приватном репозитории. Кроссбраузерность не была приоритетом, так как продукт внутренний и можно было контролировать версии браузеров у операторов.
  • Feature flags: Использовались для скрытия незавершённых фич до следующего релиза.
  • Взаимодействие с командами:
    • С тестировщиками: Через задачи в Jira (статус "Testing"). При необходимости — созвоны для уточнения.
    • С менеджерами: Продакт-менеджер собирает требования от отделов (продажи, поддержка), формирует эпики. Проект-менеджер с тимлидом декомпозируют их на задачи, которые оцениваются и берутся в спринт (оценка в story points по числам Фибоначчи).
    • С бэкенд-разработчиками: Согласование API перед началом разработки. Фронтенд работает с моками, затем интегрируется с готовым API.
    • С дизайнерами: Получение макетов в Figma. Использование общего UI-kit (например, Material-UI) или внутренней библиотеки компонентов.
  • Коммуникация и конфликты: Основной инструмент — Slack. Сложные технические вопросы решаются на митапах (фронтенд-гильдия или командные). Решения принимаются на основе опыта и обсуждения.

📋 Документирование и управление требованиями

  • Техническая документация: Как таковой отдельной техдокументации не было. Её роль выполнял код и описание бизнес-процессов в BPM-системе. Для общих знаний использовался Confluence.
  • Требования (ТЗ): Бизнес-аналитик на основе эпиков от продакта писал описание задач прямо в Jira. Это и было основным ТЗ, которое уточнялось в процессе.
  • Сбор требований: Продакт-менеджер собирал "хотелки" от других отделов компании, приоритизировал их и передавал команде на оценку.
  • Документирование API: Описание endpoint'ов согласовывалось и фиксировалось в задачах. Мог использоваться OpenAPI/Swagger.
  • Роль фронтенда в требованиях: Не участвовал напрямую в сборе пользовательских историй или проектировании БД. Работал с готовыми ТЗ от аналитиков.

📊 Управление проектами

  • Появление проектов: Запросы от других отделов (продажи, поддержка) → обсуждение с продактом → оценка командой (тимлид, проект-менеджер, бизнес-аналитик) → взятие в работу.
  • Планирование спринтов: Двухнедельные спринты. На планировании команда вместе с проект-менеджером выбирала задачи из бэклога на ~15-20 story points на фронтенд.
  • Оценка задач: Story points (числа Фибоначчи: 1, 3, 5, 8...). Оценка проводилась на отдельной встрече (grooming) тех. специалистами.
  • Распределение задач: Внутри фронтенд-пары задачи распределялись по сложности и опыту. Сеньор брал сложные, миддл — более простые, но мог просить сложные для роста.
  • Нехватка времени/ресурсов: Основная тактика — гибкое сокращение (flex) функционала в первой версии с последующим докручиванием. Редко — работа в выходные.
  • Технический долг: На него выделялось ~10% времени спринта. Задачи по техдолгу создавались в Jira и приоритизировались.
  • Оценка рисков: Тимлид и проект-менеджер оценивали загрузку и сроки, при рисках сдвигали сроки или шли на переговоры с продактом об уменьшении объема.

👥 Взаимодействие с пользователями

  • Прямой контакт: Команда разработки напрямую с конечными пользователями (операторами CRM) не взаимодействовала.
  • Обратная связь: Собиралась продакт-менеджером и бизнес-аналитиками через отделы-заказчики.
  • Демо-презентации: Проводились в конце спринта для продакт-менеджера (заказчика), иногда силами разработчиков.
  • Срочные запросы: Обрабатывались через процесс с дежурным разработчиком и Slack-каналом инцидентов.

⚙️ Технические детали и архитектура

  • Архитектурные решения: Модульная архитектура на фронтенде. Часто использовался Next.js в роли BFF (Backend For Frontend). Решения принимались до прихода в проект или сеньор-разработчиком.
  • Масштабируемость: Достигалась за счет модульности, пагинации списков, lazy loading.
  • Управление состоянием: Использовались React Context, Zustand, React Query (или аналоги) в зависимости от знаний.
  • Оптимизация: Использование React.memo, useCallback, useMemo, код-сплиттинг, оптимизация рендеринга тяжелых списков (виртуализация).
  • Типовые задачи: Разработка и расширение карточки ученика (добавление полей, аватарки), работа со списками (фильтры, пагинация), лог действий оператора.
  • Интеграция: Все взаимодействие с внешними системами шло через единый бэкенд CRM. Фронтенд общался только с его API (REST, HTTP).

🆕 Внедрение новых технологий

  • Процесс принятия решений: Инициатива исходила от разработчиков (чаще сеньоров), обсуждалась на митапах фронтенд-гильдии. Оценивались плюсы/минусы.
  • Адаптация: На обновление библиотек и инструментов выделялось специальное время.
  • Эксперименты: Новые технологии могли опробоваться на изолированном модуле перед широким внедрением.
  • Обмен знаниями: Через митапы гильдии, внутренние чаты, обсуждение на ретро.

🧪 Тестирование и качество кода

  • Участие фронтенда в тестировании: Писал unit-тесты (Jest, React Testing Library) если были в проекте. В основном полагались на ручное тестирование QA.
  • Решение багов: Баги, найденные QA, документировались в задаче. Разработчик воспроизводил, фиксил и отдавал на повторное тестирование.
  • Код-ревью: Критерии — решение задачи, соответствие код-стайлу, отсутствие грубых логических ошибок, поддерживаемость кода. Ревью проводили внутри пары фронтенд-разработчиков.

📈 Продуктивность и организация работы

  • Рабочий день: Гибкий график с обязательным стендапом в 10:00. Удалённая работа.
  • Методология: Agile/Scrum (двухнедельные спринты, ретро, демо, планирование).
  • Инструменты: Jira для задач, Slack для коммуникации, GitHub для кода.
  • Баланс и перегрузки: Компания формально не поощряла работу в выходные. Чтобы избежать перегрузок, задачи гибко сокращались (flex), а не наращивались сроки.
  • Приоритизация: Делали самое важное и срочное в первую очередь, не переключаясь на другие задачи параллельно.
  • Обучение: За счёт личного времени (чтение Хабра, документации, пет-проекты).

Выводы

  • Для успешных ответов важно построить непротиворечивую легенду проекта, основанную на реальном опыте и стандартных практиках разработки.
  • Ключевые моменты: понимание роли CRM как центральной системы, описание рабочих процессов (спринты, код-ревью, планирование), знание своего Tech Stack.
  • На вопросы о культуре и процессах можно давать общие, но правдоподобные ответы ("корпоративный булшит").
  • Где не знаете деталей — честно говорите, что это была зона ответственности другой роли (тимлида, бэкендера, продакта).