Брайан Генри
Building a DevOps Team, part 2 by Brian Henerey for agilesysadmin.net
Original article: http://agilesysadmin.net/buiding-a-devops-team-part-2
Translated by Ivan Pesin, February 2012
Несколько месяцев назад, я написал про свой опыт создания девопс-команды в Sony. Руководство этой командой приносит мне массу удовольствия, и я очень горжусь людьми, которых я привел в Sony. Недавно мне увеличили число позиций в команде и я, с большим удовольствием, опять принялся за поиск людей.
После того, как наш процесс скрининга попал на главную станицу HackerNews, стало понятно, что его надо будет слегка перетряхнуть. Вот что нового мы добавили:
Критерии успеха
Проводя в этот раз собеседования, я обнаружил, что задаю себе несколько одних и тех же вопросов, которые, в конечном счете, и стали критериями успешного прохождения собеседования:
- Могут ли они выполнять нужную работу?
- Станет ли команда с их приходом лучше?
- Есть ли чему нам у них поучится?
- Могут ли они быстро осваивать новые технологии и языки?
- Какая помощь им будет нужна от меня и команды?
Самооценка
Я люблю измерять и быть, насколько это возможно, объективным в своей работе. Достичь это в рекрутинге невероятно сложно, ведь это связано с живыми людьми, а не компьютерами, пропускной способностью и задержками. После того, как мы нашли первых несколько кандидатов, я стал просить их заполнить анкету самооценки. В результате, я засел за сравнение, взвешивание и рисование графиков оценок кандидатов, надеясь, что это может оказаться полезным. Форму для самооценки я стянул у гуглового процесса собеседований, и добавил туда несколько категорий, чтобы адаптировать его к потребностям моей команды:
Руководство по самооценке:
Опыта нет. | |
Могу прочесть программу, внести маленькие изменения в существующие программы или изменить настройку уже установленных систем с книгой под рукой. | |
Могу написать «Здравствуй, мир!» без книги, при необходимости попытаться разобраться в том, как работает система. | |
Могу использовать основные средства без особой помощи, полностью управлять небольшим окружением. | |
Могу разрабатывать программы или разворачивать системы среднего размера, используя всю основную функциональность (без книги) и некоторую специфическую (с книгой). Достаточное представление об архитектуре для решения нетривиальных проблем. | |
Могу разрабатывать программы или разворачивать системы большого масштаба, используя всю основную (без книги) и значительную часть специфической (часть с книгой, часть без) функциональности. | |
Могу разрабатывать программы большого масштаба или разворачивать новые системы с нуля. | |
Представление и умение применить менее известные возможности. | |
Глубокое понимание тонких моментов и малоизвестных возможностей. | |
Мог бы написать книгу, но пока не написал. | |
Написал про это книгу (должна быть такая книга). |
Сети TCP/IP | |
Архитектура Unix/Linux | |
Системное администрирование Unix/Linux | |
Алгоритмы и структуры данных | |
C | |
C++ | |
Java | |
Python | |
Perl | |
Ruby | |
Shell Scripting | |
SQL и/или администрирование БД | |
Скриптовой язык на ваше усмотрение, не перечисленный выше: __________________ | |
Сборочные системы и/или непрерывная интеграция | |
Тестирование производительности и/или планирование мощностей | |
Управление проектами и/или ITIL | |
Конфигурационное управление (Puppet, Chef, Cfengine, и т.д.) | |
Поддержка производственных сред или сред высокой доступности | |
Amazon Web Services (или другие «облачные» технологии/сервисы) |
Сравнение результатов самооценки
Эта диаграмма оказалась действительно полезной в том смысле, что заставила меня задуматься о том, что же я хочу. Кандидат-8 набрал значительно больше очков, чем Кандидат-1, но значит ли это, что я больше хочу именно его? Например, до того, как я ввел весовые коэффициенты, кто-то, хорошо разбирающийся в Ruby, Python, Perl и Bash, мог набрать очень много очков. Но мне гораздо нужнее был человек, который мог легко учиться, чем разбирающийся во всех этих языках. В конце концов, я объединил эти категории в одну, давая одно-два дополнительных очка за широту знания, чем уменьшил эффект этих технологий на конечный результат.
Кроме того, такая диаграмма поумерила мой восторг от специализированных кандидатов. Я же пытаюсь найти программистов-полиглотов широкого профиля, все таки. Несколько раз мы обнаруживали, что если кандидат зашел слишком далеко по пути специализации, то это, казалось, подавляло его способность к творческому мышлению.
Однако, есть две вещи, о которых нужно помнить, анализируя приведенную диаграмму. Некоторые кандидаты переоценивают себя, а некоторые – недооценивают. Один из кандидатов сказал мне: «Если я не буду любить себя, то кто же тогда будет?». Это было весьма смешно, но это также значило, что я буду оценивать его знания относительно той высокой планки, которую он сам установил.
Удаленный технический тест
Когда я в прошлый раз писал о поиске людей, я раскрыл много подробностей нашего тестирования, так что нам пришлось его заново придумывать. В результате, мы снова просили людей установить WordPress в инстансе ec2, но теперь это было значительно сложнее. В задании было пять подвохов, которые нужно было преодолеть:
- iptables фильтровал входящий трафик на 80-м порту внешней сетевой карты.
- 80-й порт был уже занят процессом, который нужно было убить.
- Этот процесс порождался из бесконечного цикла, так что каждый раз, когда его убивали, он запускался заново.
- Конфигурационные файлы Apache уже были в системе, и задавали для него 81-й порт.
- Мы не давали root-пароля к MySQL.
В итоге, мы хотели убедиться, что кандидаты имеют базовые навыки в системном администрировании и достаточные знания о Linux. Использование таких вещей, как netstat, telnet, pstree и kill, составляет базовый набор навыков, а поскольку я давал людям всего один час на прохождение теста, времени на поиск в гугле было очень мало.
После первых двух кандидатов я решил, что любой, чье резюме выглядит достаточно хорошо, должен пройти удаленный технический тест до телефонного собеседования. И хотя я потратил несколько часов на написание кукбука для chef, который создавал тестовые инстансы, это оказалось чрезвычайно эффективным средством отбора. Кандидат-3 не смог решить ни одной проблемы из вышеприведенных, хотя оценил свои умения по системному администрированию Linux по шкале на 4, что должно было значить «достаточное представление об архитектуре для решения нетривиальных проблем».
Немногие кандидаты успешно прошли удаленное техническое тестирование, что и не удивительно, поскольку я, в основном, отбирал людей с опытом программирования, а не системного администрирования.
Персональные собеседования
- Кандидат проводил 30-60 минут, программируя в паре с одним из членов моей команды. Писались простые вещи, обычно на языке, которого кандидат не знал. Если он не знал руби, они писали коаны руби. Основной целью было понять, сможем ли мы проводить много времени в тесной работе с кандидатом.
- Мы также проводили несколько вполне стандартных интервью, обсуждая резюме кандидата и рассказывая ему о той роли, которую ему предстояло выполнять в команде. Здесь же проходили теоретические собеседования у доски о программировании и алгоритмах.
Задание по программированию
Когда я нанимал двух предыдущих людей, они оба выучили руби еще до того, как попали на интервью, потому что знали, что это важно. Один из них написал демо-программу, которая рассчитывала количество остановок между станциями лондонского метро. Он приложил эту программу к своему резюме, присланному на вакансию, и я был должным образом впечатлен. Мы решили, что для нас важно, чтобы кандидаты были заинтересованы в изучении нового языка программирования и, кроме того, мы хотели знать насколько быстро они могли его освоить. Я считаю, что спрашивать такое с кандидата без гарантий, что мы его возмём, это очень много. В конце концов, я сделал это опциональным требованием и пользовался им как решающим фактором в случае неопределенности. Другим фактором было наличие или участие в проектах с открытым исходным кодом.