Перейти к содержимому
Technical Recruiter2013
#Python#Django#PostgreSQL#Git#Linux

IT-Case — Построение команды Python/Django разработчиков

Комплексный проект по подбору, собеседованию и обучению команды Python/Django разработчиков для IT-компании. Создание процесса технического рекрутинга, программы онбординга и системы развития junior-специалистов.

Контекст проекта

IT-Case — екатеринбургская IT-компания, специализирующаяся на веб-разработке и автоматизации бизнес-процессов. К 2013 году компания столкнулась с типичной для растущего бизнеса проблемой: нехватка квалифицированных разработчиков для реализации растущего потока проектов.

Бизнес-задача:

  • Расширение команды разработки на 7-10 человек
  • Фокус на Python/Django стеке (основное направление компании)
  • Готовность обучать junior-специалистов (дефицит senior на рынке)
  • Построение процесса, который масштабируется на будущие наймы

Проблемы найма в 2013:

  • Дефицит Python-специалистов в Екатеринбурге (технология еще набирала популярность)
  • Конкуренция за senior — крупные компании переманивали опытных разработчиков
  • Отсутствие структуры — рекрутинг велся хаотично, без процесса
  • High attrition в первые месяцы — неудачный онбординг приводил к оттоку новичков

Контекст рынка 2013: Python/Django только начинали набирать популярность в России. Ruby on Rails и PHP доминировали в веб-разработке. Найти опытного Python-разработчика было challenge, большинство кандидатов приходили из других технологий.

Задача

Моя роль — Technical Recruiter с фокусом на:

  1. Sourcing & Screening — поиск кандидатов и первичная фильтрация
  2. Техническое собеседование — оценка профессиональных навыков
  3. Разработка программы обучения — онбординг и адаптация новых сотрудников
  4. Построение процесса — создание воспроизводимого recruiting pipeline

Особенность проекта: готовность инвестировать в junior/middle специалистов с обучением, вместо дорогого найма senior из-за дефицита последних на рынке.

Решение

1. Построение процесса технического рекрутинга

Sourcing стратегия:

┌─────────────────────────────────────────────┐
│           Каналы поиска кандидатов          │
├─────────────────────────────────────────────┤
│ 1. Job boards (hh.ru, habr.com/career)      │
│ 2. Профильные сообщества (Python UG)        │
│ 3. University partnerships (УрФУ, УрГУПС)   │
│ 4. GitHub sourcing (активность в Python)    │
│ 5. Referrals (рекомендации от команды)      │
└─────────────────────────────────────────────┘

Особенности sourcing:

  • Расширенные критерии: не только "знание Django", но и общие навыки программирования, желание учиться, портфолио pet-проектов
  • GitHub как индикатор: активность в open source и личные проекты на Python — сильный сигнал
  • University recruiting: партнерство с вузами для привлечения выпускников и студентов старших курсов
  • Community involvement: участие в Python User Group встречах для networking

2. Структурированное техническое интервью

Воронка отбора:

Было
Стало
Процесс
Хаотичные собеседования
4-этапная воронка
Оценка
Субъективное мнение
Чек-лист компетенций
Длительность
2-3 недели на кандидата
5-7 дней до оффера
150%

4-этапный процесс отбора:

Этап 1: Screening call (15-20 мин)

  • Проверка базовых требований (опыт программирования, мотивация)
  • Обсуждение ожиданий по зарплате и формату работы
  • Краткий рассказ о компании и проектах
  • Цель: отфильтровать несоответствующих кандидатов до глубокого интервью

Этап 2: Техническое домашнее задание (2-4 часа на выполнение)

Практическая задача на Django:

"""
Задание: Password Manager — веб-хранилище паролей
 
Описание:
Разработать простое веб-приложение на Django для безопасного хранения
учетных данных (логинов и паролей для различных сервисов).
 
Требования:
 
1. Django приложение с моделями:
   - User (встроенная Django модель для аутентификации)
   - PasswordEntry (title, website, username, password, created_at, user)
 
2. Функционал:
   - Регистрация и аутентификация пользователей
   - CRUD операции с записями паролей (только для своих записей)
   - Шифрование паролей перед сохранением в БД
   - Поиск записей по названию/сайту
   - Простой веб-интерфейс (можно на Django templates)
 
3. Безопасность:
   - Пароли должны храниться в зашифрованном виде
   - Пользователи видят только свои записи
   - Защита от SQL injection, XSS
   - Валидация и санитизация пользовательского ввода
 
4. Код:
   - PEP 8 compliance
   - Migrations для моделей
   - Минимум 3-5 unit tests
 
5. Документация:
   - README с инструкциями по запуску
   - Описание подхода к шифрованию
   - Известные ограничения (если есть)
 
Оценивается:
- Качество кода (структура, читаемость, PEP 8)
- Понимание безопасности (шифрование, CSRF, XSS)
- Знание Django (models, views, forms, auth)
- Тестирование (корректность и покрытие)
- Git (commit messages, структура коммитов)
- Документация
 
Бонусы (не обязательно):
- Django REST Framework API вместо templates
- Password strength indicator
- Export/Import функционал
- Docker для развертывания
"""

Критерии оценки домашки:

  • Security awareness: правильное шифрование паролей, защита от XSS/CSRF/SQL injection
  • Code quality: PEP 8, именование, структура, разделение ответственности
  • Django patterns: models, views/viewsets, forms, authentication, authorization
  • Testing: покрытие тестами, корректность тест-кейсов (особенно безопасность)
  • Git hygiene: commit messages, логическая структура коммитов
  • Documentation: README с инструкциями, объяснение подхода к шифрованию

Почему Password Manager? Это задание проверяет не только знание Django, но и понимание безопасности — критичный навык для любого веб-разработчика. Кандидаты, которые используют простое base64 вместо настоящего шифрования или забывают про authorization checks, сразу видны.

Этап 3: Техническое интервью (60-90 мин)

Структура:

  1. Разбор домашнего задания (30 мин)

    • Шифрование: какой алгоритм выбрал и почему? Symmetric vs asymmetric?
    • Authorization: как реализована проверка, что пользователь видит только свои записи?
    • Security: какие угрозы учел? Что бы добавил для production?
    • Architecture: почему такая структура кода? Альтернативы?
    • Trade-offs: что бы сделал иначе при большем времени?
  2. Live coding session (30 мин)

    • Расширение функционала: добавить "поделиться паролем с другим пользователем"
    • Как изменишь модель? Как обеспечишь безопасность?
    • Или: реализовать "генератор безопасных паролей" (функция на Python)
    • Цель: увидеть процесс мышления в реальном времени, подход к новым требованиям
  3. Теоретические вопросы (20 мин)

    • Django ORM (N+1 queries, select_related, prefetch_related)
    • HTTP/REST principles
    • Database (indexes, transactions, migrations)
    • Python basics (decorators, generators, context managers)
  4. Soft skills & culture fit (10 мин)

    • Опыт работы в команде
    • Подход к code review
    • Как учишься новому?

Этап 4: Встреча с командой / Финальное интервью (30-40 мин)

  • Знакомство с будущими коллегами
  • Обсуждение проектов и технологий
  • Ответы на вопросы кандидата
  • Цель: оценка team fit, мотивация кандидата

3. Критерии оценки кандидатов

Scoring matrix для объективной оценки:

КомпетенцияJuniorMiddleВес
Python fundamentalsБазовый синтаксис, типы данныхOOP, декораторы, генераторы25%
Django/WebMVC, шаблоны, формыORM оптимизация, middleware, signals30%
DatabaseSQL basics, простые запросыИндексы, транзакции, миграции15%
TestingПонимание зачем нужныПишет unit tests, знает coverage10%
Git/LinuxБазовые командыBranching, rebasing, shell scripting10%
Problem solvingРешает простые задачиСамостоятельно ищет решения10%

Проходной балл:

  • Junior: 50-65% (обучаемость важнее текущих знаний)
  • Middle: 70-85%

Важно: для junior акцент на потенциал и обучаемость, а не на текущие знания. Лучше нанять умного новичка с мотивацией, чем опытного разработчика без желания развиваться.

4. Программа онбординга и обучения

Первые 2 недели: Адаптация и базовое обучение

Неделя 1: Введение в проект

День 1-2: Setup окружения
- Выдача hardware (ноутбук, доступы)
- Настройка dev environment (Python, Django, PostgreSQL, Git)
- Доступы к internal tools (GitLab, Redmine, Wiki)
- Знакомство с командой
 
День 3-5: Изучение кодбазы
- Архитектура существующих проектов
- Code walkthrough с senior разработчиком
- Разбор coding standards и conventions
- Чтение документации и Wiki
 
Задание: Исправить 2-3 простых bugs (good first issues)
- Цель: научиться navigating в кодбазе, процесс review

Неделя 2: Первый реальный таск

  • Получение небольшой фичи из backlog (хорошо scope'нутой)
  • Работа в паре с ментором (pair programming)
  • Code review и feedback на каждый commit
  • Результат: Первый merge в production

Месяц 1-3: Развитие навыков

Еженедельные обучающие сессии:

  • Monday: Разбор сложных кейсов из production
  • Wednesday: Code review session (учимся ревьюить чужой код)
  • Friday: Tech talk (один из разработчиков делится знаниями)

Менторство:

  • Каждому junior назначен senior-наставник
  • Weekly 1-on-1 встречи (30 мин)
  • Помощь с technical blockers
  • Карьерное развитие и feedback

Практические задания:

  1. Django Deep Dive (неделя 3-4)

    • Построение RESTful API с нуля
    • ORM optimization (N+1 problem, select_related)
    • Middleware и request lifecycle
    • Testing: fixtures, factories, mocking
  2. Database & Performance (неделя 5-6)

    • Проектирование схемы БД (нормализация)
    • Indexes и query optimization
    • Django migrations best practices
    • Профилирование (django-debug-toolbar, query logging)
  3. Production readiness (неделя 7-8)

    • Deployment (Nginx, uWSGI, systemd)
    • Monitoring и logging (Sentry для errors)
    • Security (SQL injection, XSS, CSRF)
    • Caching strategies (Redis, memcached)

Knowledge base:

  • Internal Wiki с гайдами и best practices
  • Code examples и шаблоны для типовых задач
  • Video recordings технических докладов
  • Reading list — рекомендованные статьи и книги

5. Метрики успешности найма

Отслеживание эффективности процесса:

Conversion funnel:

Резюме получено → 100%

Screening call → 40% (отбираем соответствующих критериям)

Домашнее задание отправлено → 80% (интерес подтвержден)

Домашнее задание сделано → 60% (filter по мотивации)

Техническое интервью → 70% (сделавшие домашку обычно проходят)

Оффер → 50% (high bar для quality)

Оффер принят → 85% (конкурентные условия)

Time to hire:

  • Average: 5-7 дней от первого контакта до оффера
  • Fast track: 3 дня для outstanding кандидатов
  • Goal: не затягивать процесс, чтобы не потерять кандидата

Quality of hire:

  • Performance review через 3, 6, 12 месяцев
  • Retention rate: > 85% через год (vs 60% industry average)
  • Ramp-up time: время до полной продуктивности — 2-3 месяца для junior

Результаты

За 6 месяцев набрана команда из 7 Python/Django разработчиков с высоким retention rate и быстрой адаптацией благодаря структурированному онбордингу.

Количественные результаты:

7
разработчиков нанято
85%+
retention через 12 мес.
5-7 дней
time to hire
2-3 мес.
время до продуктивности

Качественные результаты:

Для компании:

  • Масштабирование delivery — увеличение пропускной способности для проектов
  • Снижение зависимости от рынка senior — выращивание talent внутри
  • Predictable hiring — воспроизводимый процесс для будущих найм ов
  • Reduced attrition cost — меньше оттока в первые месяцы

Для команды:

  • Однородный skill level — все прошли одинаковую программу обучения
  • Shared coding standards — консистентное качество кода
  • Mentorship culture — senior вовлечены в развитие junior
  • Knowledge sharing — регулярные tech talks и code review sessions

Для кандидатов:

  • Прозрачный процесс — четкие ожидания на каждом этапе
  • Быстрый фидбек — решения за дни, а не недели
  • Structured onboarding — не "брошены в воду", а планомерное обучение
  • Career growth — clear path от junior к middle/senior

Ключевые выводы

Инвестиции в junior окупаются: В условиях дефицита senior-специалистов стратегия найма и обучения junior оказалась эффективнее. Стоимость: время на обучение. Выгода: лояльность, соответствие культуре, долгосрочный рост.

Структура процесса > харизма рекрутера: Воспроизводимый процесс с четкими критериями и этапами дает лучшие результаты, чем интуитивный подход. Scoring matrix и home assignment снижают субъективность оценки.

Онбординг критичен для retention: Первые 3 месяца определяют, останется ли сотрудник в компании. Structured onboarding с менторством и обучающими сессиями резко снижает early attrition.

Техническое собеседование как two-way street: Home assignment и live coding не только оценивают кандидата, но и показывают кандидату реальную работу. Это фильтрует тех, кому не интересен стек или подход.

Community building: Регулярные tech talks и code review sessions не только обучают junior, но и укрепляют team culture. Senior получают leadership опыт, junior — знания и менторов.


Применимость подхода:

  • Растущие IT-компании — нужен масштабируемый процесс найма
  • Дефицит специалистов — стратегия grow your own talent
  • Технологические стартапы — быстрое расширение команды
  • Product companies — долгосрочные проекты, где важна лояльность team

Long-term impact: Некоторые из нанятых разработчиков выросли до team leads и architects в последующие годы. Это подтверждает правильность подхода: инвестиции в людей окупаются их ростом и лояльностью.

Похожие материалы

Проекты с похожими технологиями и задачами

Цифровой тьютор

Backend-разработчик • 2020

Аналитическая платформа для дирекции университета с инструментами оценки усвоения материала студентами и рекомендациями по оптимизации учебного процесса

  • Python
  • Django
  • PostgreSQL
  • Redis
  • Celery
  • +2
Читать детальный кейс →

PVS-Studio Conference Engine — Автоматизация лендингов

Full-stack Developer • 2021

Единая платформа для автоматической генерации лендингов конференций и сбора заявок. Решение проблемы создания десятков однотипных посадочных страниц для участия PVS-Studio в отраслевых мероприятиях.

  • Python
  • Django
  • PostgreSQL
  • Jinja2
  • Bootstrap
  • +1
Читать детальный кейс →

Viva64 Trial CRM — Автоматизация email-маркетинга

Backend Developer • 2019

Система автоматизированного email-маркетинга на основе триггерных писем для конвертации пользователей триальных версий PVS-Studio в платящих клиентов. CRM для управления жизненным циклом trial-пользователей.

  • Python
  • Django
  • Celery
  • PostgreSQL
  • SMTP
  • +1
Читать детальный кейс →