Данная статья будет обзорной, без особых деталей разработки ПО. Моей целью является познакомить читателя с опытом, который я приобрел пока участвовал в стажировке в роли наставника. Я не называю компанию, в которой работаю и не называю проект, в котором участвовал так как это противоречит правилам ресурса.


Введение


В Томске сложно найти разработчиков, даже среди казалось бы такого популярного стека как php + mysql. Собственно, идея участия возникла из-за проблем с нехваткой кадров, и мы (компания) решили пойти на эксперимент и попробовать найти сотрудников среди людей с небольшим опытом. Как-то на кухне был поднят вопрос о том, кто и что знает про проекты для стажеров, новичков. Нашлись те, кто уже участвовал, поделились, обсудили. Я сообщил о том, что готов принять участие. Я хотел получить:


  1. Ответ на вопрос: "Можно ли сделать рабочий продукт с людьми, у которых мало/нет опыта?";
  2. Премию;
  3. Прокачать soft-skills;
  4. Познакомить стажеров с процессом разработки ПО;

О проекте


Проект, в котором мы участвовали дает стажерам возможность в течение 2 месяцев, работая не менее 20 часов в неделю, создать программное обеспечение под руководством наставника с целью дальнейшего трудоустройства. Стажеры получают опыт, знакомятся с процессом разработки. Для компании это выгодно тем, что стажеры приходят не нулевые, а, так скажем, "подогретые" минимальными знаниями. По итогам есть выбор из уже подготовленных ребят.


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


Проектом для стажировки был выбран "Онлайн-консультант". Вы все видели их на сайтах, я не буду подробно на этом останавливаться. Виджет в углу, жмешь на иконку, открывается окно чата, чатишься с оператором/ботом. Их тысячи, но я подчеркну, что смысл не в том, чтобы создать что-то новое, а в том, чтобы подготовить стажеров к реальной работе.


Презентация


Для того, чтобы привлечь людей на стажировку я подготовил и выступил с презентацией в трёх крупных университетах Томска. Знали бы вы как тяжело выступать перед аудиторией. Это примерно также, как знакомиться с людьми, только людей сразу несколько десятков. Ничего кроме улыбки та презентация и выступление у меня не вызывают. Сейчас я бы кое-что изменил.


Результаты и отбор


После выступления начали поступать заявки на участие. Из примерно 150 — 180 человек, посетивших мое выступление, на участие в проекте подали заявки шесть участников. Из них мы выбрали пятерых. У ребят был разный уровень подготовки. Один специализировался на фронтенде и хотел развиваться в этом направлении. Второй имел опыт разработки на PHP + MySQL. Остальные ребята пришли почти нулевыми, не считая лабораторных работ в университете.


Требования


Прежде чем мы приступили к проекту меня и ребят ждали 2 выходных по 8 часов интенсива: знакомство, лекции, практика по системе контроля версий, аналитике, тестированию и т.д.
Также в требованиях было предоставление ежедневных отчетов о выполненной работе. Участие всей команды в пятничных встречах, где остальные участники рассказывали о прогрессе и обсуждали проекты друг друга.
Проект давал право выгонять участников из проекта. И также мы должны были выступить с презентацией на demo-day. Это публичное мероприятие, где стажеры демонстрируют результаты своей работы.


Начало


К началу проекта у нас уже был развернута инфраструктура: gitlab, redmine, завели почты, аккаунты и т.д. За исключением некоторых технических недочетов, все было отлично. Мы очно встречались по средам и, спустя неделю после начала, пришли к тому, что нужны ежедневные онлайн-встречи. Пришли к тому, что это будет 21:30. На них мы обсуждали успехи и проблемы за день. Также на неделю назначали менеджера, который отсылал отчёты и выступал по пятницам с докладом перед остальными участниками.


Первые две недели мы раскачивались и я объяснял как работает система управления задачами, как писать отчеты, как брать задачу, сдавать задачу, как работать с git, что я жду и хочу увидеть в отчёте по выполненной задаче и т.д. В общем чисто организация.


Да, кстати, у нас было ТЗ. На основе него мы набросали компоненты системы, обсудили архитектуру и технологии.



Это один из первых вариантов схемы компонентов


Ход проекта



Создали задачи в redmine по названиям компонентов. Это были крупные задачи. Скажем "Виджет", "Приложение оператора", "Сервер обмена сообщениями" и т.д. Потом создали подзадачи, более мелкие, скажем "Прототип виджета", "Вёрстка виджета", "установка nodejs", "алгоритм обмена сообщениями" и т.д. Потом ещё более мелкие, вроде "Вёрстка layout для админки", "Вёрстка фильтра истории диалогов" и т.д. В итоге получилось около 60 задач (к концу проекта их число увеличилось до 94 из-за мелких задач по исправлению недочетов).


Спустя три недели у нас был прогресс по всем модулям, кроме сервера обмена сообщениями. Не буду останавливаться на этом, так как это уведет в сторону мое повествование, но скажу, что я исключил из проекта одного из участников.


Примерно за полторы недели до окончания у нас был сырой прототип. Кривая верстка, баги, не реализованные функции. Эти полторы недели мы допиливали проект.


Demo day



На видео Дима — один из участников проекта. Перейдя по ссылкам вы можете посмотреть то, что у нас получилось. Сайт, Админка, Оператор
Реквизиты: admin/admin, operator1/operator, owner1/owner.


Выводы


  1. Сделать проект со студентами можно и даже нужно.
  2. Код, скорее всего, будет низкого качества, так как времени мало. Рабочий прототип важнее красоты кода в данном конкретном проекте.
  3. Потратил около 80 часов чистого времени за 2 месяца. Следует учитывать эту цифру в будущем;
  4. Пришлось объяснять базовые вещи весь рабочий процесс.
  5. Важно, чтобы все члены команды понимали то, что нужно сделать.
  6. Не уверен, что мы справились бы, если бы все были без опыта. Дело в том, что опытные ребята делают задачи быстрее и сдают их, они попадают в основную ветку и остальные могут смотреть на примеры их работы и делать похожие задачи. В это время опытные ребята переключаются на новые задачи и делают их.
  7. Проблемы интеграции всегда есть и будут. Интеграцию лучше делать очно.
  8. Нужно быть готовым к исключению людей из проекта. Исключать людей из проекта психологически сложно.

Комментарии (10)


  1. akryukov
    08.01.2018 16:11

    Статья получилась недосказанная. Особенно интересуют следующие пункты:


    что я жду и хочу увидеть в отчёте по выполненной задаче

    Интересно какие у вас были требования в этой части. С чем у стажеров были особенные проблемы?


    Не буду останавливаться на этом, так как это уведет в сторону мое повествование, но скажу, что я исключил из проекта одного из участников.

    Расскажите, пожалуйста, хотя бы в общих чертах причины исключения.


    Как делили задачи между опытными и неопытными?
    Можно ТЗ почитать?
    Как выбирали "менеджера"?
    Как договаривались с университетами насчет выступления? Вы один выступали или во время какого-то более крупного мероприятия?
    Как собирали заявки?


    1. ViktorZ Автор
      08.01.2018 17:29

      >>Статья получилась недосказанная.
      Согласен. Тут были мысли на тему того, чтобы написать подробно и разбить статью на несколько статей, чтобы не делать одну большую. Потом я сомневался и решил написать обзорную. А на вопросы ответить в комментариях.

      >>Интересно какие у вас были требования в этой части. С чем у стажеров были особенные проблемы?
      Требования были такие: обычно когда мы сдаем задачу на ревью в ней должно быть три пункта:
      1) Что надо было сделать (кратко), описание текущей логики
      2) Что было сделано, особенности реализации
      3) Тест-план, скриншоты, доказательство работы

      Для стажеров это было не так. Они взяли задачу, что-то сделали, отправили задачу на ревью. Первое время отчеты никто не писал. Что-было сделано, как проверить то, что работа сделана и работает и не ломает текущее остается за кадром. Первые недели я объяснял то, что важен не только код и что он вроде бы работает, а информация для наставника, других коллег.

      Второй момент это отмечать потраченное время. До конца проекта возникали случаи, когда что-то сделано, а время не проставлено.

      >>Расскажите, пожалуйста, хотя бы в общих чертах причины исключения.
      В общих чертах: нет результатов (1 неделя), нет результатов (2 неделя), нет результатов (3 неделя), перевожу на другую задачу, нет результатов, исключаю.

      Подробнее
      Это тема отдельно небольшой заметки. Это тяжелое решение было. В общем было так: Мы описали компоненты и начали распределять задачи. Один из участников взялся за ноду. Прошла неделя, результатов нет. Оно и понятно. Но от всех по чуть-чуть что-то было. Задачи были в основном на изучение. Проходит вторая неделя, все по чуть-чуть продвигаются. От него все еще не закрыты задачи на изучение. Всю неделю говорю ему о том, что надо закрывать задачи на изучение, писать отчет и приступать писать код. Нет движений. На третьей неделе у него возникают проблемы, он пропускает нашу недельную встречу — нос повредил. Пропускает пятничную встречу. Я начинаю думать о том, чтобы передавать часть его работ другому разработчику. Позже так и делаю. Ему даю задачу на верстку, менее ответственной части. За прошедшую неделю задача не закрыта, сделано что-то, но меня это не устраивает. Сообщаю ему о том, что не вижу смысла в продолжении сотрудничетсва. Слушаю его мнение, расходимся.

      >>Как делили задачи между опытными и неопытными?
      Ну к примеру есть задача «Сделать круд», даю ее опытному разрабочтику. Он делает роут, контроллер, модель. В это время неопытный изучает как сделать роут (post запрос), получить данные, обработать, сохранить в базе.
      Дальше менее опытный уже видит результат по задачам опытноого и оп образу и подобию делает другой круд, спрашивая опытного о том, что непонятно.

      >Можно ТЗ почитать?
      www.dropbox.com/s/2v2c96u270yxur1/chatonline.doc?dl=0

      >>Как выбирали «менеджера»?
      По очереди, к окончанию все должны были побывать менеджером. Новая неделя — новый менеджер.

      >>Как договаривались с университетами насчет выступления?
      Об этом договаривались не мы, а третья сторона. Я убрал все упоминания о ней, так как это считалось рекламой. Дело было так:
      Есть компании, есть стажеры и есть третья сторона, которая сводит стажеров и компании.

      >Вы один выступали или во время какого-то более крупного мероприятия?
      было 5 представителей компании, каждый выступил, рассказал о компании, о проекте.

      >>Как собирали заявки?
      Заявки собирала третья сторона. Стажеры заполняли анкеты на стажировку, проходили тесты, далее мы смотрели резюме и выбирали кандидатов.


      1. dartNNN
        08.01.2018 21:37

        есть третья сторона, которая сводит стажеров и компании.

        А можно все таки как-то обозначить, что за третья сторона? Пытался сделать что-то подобное в одиночку, пока работал преподавателем по совместительству. Естественно ничего у меня не получилось. Даже не думал, что есть кто-то, кто сводит стажеров и компании.


        1. ViktorZ Автор
          09.01.2018 11:32

          Третья сторона это Teamlab — smartbiz24.ru/teamlab


  1. Akuma
    08.01.2018 16:18

    Прототип у меня, честно говоря, не заработал. Сообщения в чат не отправляются, админка оператора вообще пустая. Что не нажимал, ничего не меняется :)

    Но вообще даже это — хороший результат для такого короткого срока и студентов совершенно без опыта.


    1. ViktorZ Автор
      08.01.2018 17:39

      Скорее всего потому что нет активных операторов (это фича :-) ). Попробуйте так:
      1. Зайти с реквизитами оператора в админку
      2. Активировать оператора

      3. Зайти на сайт и попробовать пообщаться


      1. Akuma
        08.01.2018 22:38

        Я тоже так подумал. Зашел, актвировал — не работает :)
        Ну да ладно, это ж прототип. Кто знает что ему у меня не понравилось.

        На самом деле 90% выпускников и такого написать не в состоянии, так что у вас отличные будущие программисты, как мне кажется.


  1. alex6636
    08.01.2018 18:55

    Всё боятся выкладывать код, знают что набегут


  1. Hixon10
    08.01.2018 23:40

    В Томске сложно найти разработчиков, даже среди казалось бы такого популярного стека как php + mysql.


    Потратил около 80 часов чистого времени за 2 месяца. Следует учитывать эту цифру в будущем;


    Вот интересно. Если взять зарплату Лида за 80 часов и использовать эти деньги для поиска 1-3 мидлов, неужели это не выйдет дешевле?


    1. cheevauva
      09.01.2018 05:41

      Если стажер вырастет в джуниора, а потом и в мидлаа, то платить ему будут меньше, чем если бы он сразу бы шел в компанию мидлом. Ну и плюс, есть такое убеждение, что из стажеров вырастают более лояльные работники.