Николай Иванников
1 304
Блоги

Распределенная разработка - опыт JivoSite

Команда разработки JivoSite всегда была и остается распределенной, причем мы с Тимуром Валишевым создавали ее в 2012 году, не имея за плечами собственного опыта удаленной работы. Сейчас у нас больше 50 разработчиков, и я уверен, что наши сотрудники довольны преимуществами, которые им дает работа вне офиса.

Поделиться

В избранное

В избранном

Если вы тоже думаете о создании распределенной команды разработки, учтите несколько нюансов, о которых я расскажу ниже. Отмечу, что статья актуальна преимущественно для России и других стран, где культура удаленной работы только формируется.

Подбор сотрудников

При выборе кандидатов на удаленную работу вы не ограничиваетесь одним городом и его зарплатной вилкой, но есть некоторые особенности.

Если вы приглашаете специалиста без опыта дистанционной работы, то велик риск того, что он не пройдет испытательный срок. Мы неоднократно сталкивались с тем, что неплохие кандидаты с отличными рекомендациями с прошлого очного места работы не могут себя настроить на удаленную работу, вплоть до того, что перестают выходить на связь. Вероятность такого исхода я оцениваю в 30%. При этом, если у кандидата вообще нет серьезного опыта работы, то таких проблем не возникает.

Мы всегда просим кандидата показать нам свое рабочее место. Если отдельного помещения для работы нет, то приходим к договоренности, что он снимает отдельную квартиру либо маленький офис. Многим кажется, что программировать и тестировать софт можно и на кухне, и с детьми в соседней комнате, но, это – самообман и заблуждение. Эффективно работать можно только в спокойной обстановке.

Конверсия из кандидатов в сотрудники при наборе распределенной команды меньше. Будьте к этому морально готовы и спокойно относитесь к промахам. И, конечно, четко обговаривайте с кандидатами испытательный срок, в JivoSite он составляет три месяца.

Включение в работу

Процесс включения в удалённую работу примерно такой же, как и в офисе. Нужно подписать NDA, получить доступы в почту/Slack/трекер/cvs, почитать документацию, настроить окружение и погрузиться в проект. Пройдя этот процесс вместе с кандидатами не менее 20 раз, я могу дать следующие рекомендации:

  1. Обучайте кандидатов гигиене обращения с паролями и SSH-ключами. Кажется смешным, но большая часть кандидатов не пользуются менеджерами паролей, не защищают ssh-ключи, и вообще слабо представляют связанные с этим риски. Это всегда легко исправить: пропишите политику хранения ключей и паролей и ознакомьте с ней сотрудников.
  2. Автоматизируйте запуск отладочного окружения. На старте непросто выделить на это время, но я очень сожалею, что мы не стали делать это намного раньше.

Сейчас есть большой выбор инструментов авто-развертывания, таких как Ansible, Docker, Vagrant и так далее. В нашей компании основательно используется Ansible, но так было не всегда. Ранее у нас был образ виртуальной машины, который мы актуализировали руками каждый раз при приеме на работу нового кандидата. Это очень сильно тормозило погружение, отнимало кучу времени и сил. Хотелось бы подчеркнуть следующее: если у вас уже двое сотрудников, вы планируете расширяться - займитесь авто-развертыванием.

Сейчас у новичка в JivoSite полный запуск отладочного окружения занимает 15 минут: заполняется несколько полей на специальном сайте и, после небольшого ожидания, вы сможете зайти браузером и терминалом в свою личную облачную копию JivoSite. У нас это реализовано на связке Amazon EC2 + Ansible.

Без автоматизации этот процесс занимал день-два кропотливой работы новичка, при этом, ему должен был помогать кто-то из команды. Это производило впечатление неорганизованности, и сильно тормозило включение в работу. После того, как сотрудник освоился, он мог настроить локальный отладочный сервер у себя на виртуальной машине. Но, с тех пор как мы запустили облачные дев-сервера, практически никто из команды не пользуется локальными серверами.

Каждый облачный отладочный сервер обходится нам примерно в 10$ в месяц, но, при этом, мы экономим немало времени. При возникновении проблемы, вместо звонка с демонстрацией экрана, можно просто зайти на сервер и помочь с решением.

Кроме того, мы записали несколько видеороликов для новичков с инструкциями. Это существенно снизило коммуникационные издержки при расширении команды: разобраться в нюансах и начать разработку можно с помощью видео.

Организация работы

Утренние планерки

Несмотря на то, что удалённая работа предполагает гибкий график, мы проводим ежедневные планерки в 10 утра, обязательные для всех. Время митинга подобрано специально на начало рабочего дня большинства участников команды. Планерки дисциплинируют и настраивают на рабочий лад, помогают почувствовать себя эффективным членом команды. Для дистанционной работы это особенно важно.

Утренние планерки мы ввели не сразу, и, оглядываясь назад, я понимаю, что мы много упустили. Тимлиды тратили гораздо больше времени на то, чтобы собрать результаты вчерашней работы и координировать команду. В Scrum/Agile для этих целей используются утренние стендапы. Но если вы работаете распределенно и не используйте эти методологии – тем не менее, проводите планерки.

Качество видеосвязи

Все митинги и звонки в команде проводятся только по видеосвязи. Так нам комфортнее с психологической точки зрения. Программист, работающий удаленно, может вообще не выходить из дома, и, в буквальном смысле, одичать. Это – крайность, но мы не хотим допустить подобного с нашими сотрудниками, даже если они убежденные хикки или социопаты. Ежедневная видеосвязь с коллегами гарантирует, что человек приводит себя и своё рабочее место в порядок. Соответственно, будет порядок и в делах.

Важный момент – качество аудио и видеосвязи. Оно должно быть идеальным, и если это не так – то это проблема, требующая немедленного решения. Качество связи зависит от характеристик и типа оборудования, интернет-канала и сервиса связи. Нужен контроль всех параметров.

В случае возникновения у сотрудника проблемы с каналом мы просим сменить тариф/провайдера, подключиться к роутеру через провод, передвинуть wi-fi поближе, выключать торренты и так далее. Проблему с оборудованием мы решили, купив всем USB-гарнитуры. Исходя из нашего опыта могу отметить, что bluetooth и обычные гарнитуры работают стабильно плохо у всех. О громкой связи речь, как правило, не идет - недопустимо отвлекать коллег окружающими вас посторонними звуками.

Касаемо сервиса связи, в погоне за качеством мы перешли с Google Hangouts на Zoom. Здесь можно выбрать более подходящее по затратам. Но, самое главное - если вам кажется, что связь не идеальна – ищите дальше.

Важно убедиться, что сотрудники созваниваются друг с другом без колебаний. Нельзя недооценивать склонность IT-специалистов к переписке через чаты, особенно, если они очно друг с другом незнакомы. Для некоторых задач это вполне нормально, но, если возникает срочная проблема, то звонок необходим. Иначе вероятно следующее: «Я ему вчера написал, он мне не ответил». В первый раз созвонитесь втроем вместе с новым сотрудником и, как правило, этого достаточно.

Съезды

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

Наш первый съезд прошел на второй год жизни компании, когда нас было около семи человек. С тех пор мы проводим съезды ежегодно. Программа: минимум – три дня, днем – совместная работа/обмен опытом/обучение, вечером - пейнтбол и другие виды тимбилдинга. Несколько советов по проведению съездов из нашего опыта:

  • Организация перелетов, трансферов, проживания – очень большая работа. Если у вас нет человека, который мог бы это сделать, то стоит рассмотреть вариант привлечения специального агентства;

  • Следует отправить человека для проверки качества интернета (если он вам необходим). На словах интернет всегда отличный, на деле – почти всегда оставляет желать лучшего. Мы сейчас закупили свое походное сетевое оборудование;

  • Убедитесь, что на месте есть хороший конференц-зал, что он будет вам доступен в течение времени, отведенного на работу. Иногда в отелях есть конференц-залы в подвале - работать продолжительное время в таких условиях невозможно. С другой стороны, у нас был опыт работы прямо на пластиковых столах на улице, практически в лесу – всем понравилось;

  • Заранее планируйте программу докладов и обучений, с разбивкой по часам. На съезде вы работаете в отличном от обычного ритме, приходится решать множество организационных и других вопросов, поэтому имеет смысл всё заранее распланировать.

Выводы по организации удаленной работы отдела разработки

  1. Организация разработки в России с помощью удаленных сотрудников возможна как для продукта средней сложности, так и для сложных систем. Все зависит от организации и координации рабочего процесса.

  2. Компания, использующая удаленных разработчиков, экономит значительные средства на аренде офиса и получает более квалифицированных и устойчивых специалистов.

  3. Организация удаленной разработки требует использование специального программного обеспечения и жесткого регламента в плане безопасности.

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

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

{ "author_name": "Николай Иванников", "author_type": "self", "tags": [], "comments": 35, "likes": 31, "favorites": 21, "is_advertisement": false, "section_name": "blog", "id": "35408", "is_wide": "" }
{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } } ]