После всех обсуждений на совещании директоров, а также после оценки наших ожиданий среди каждого из участников обсуждения, мы пришли к тому, что составили список, представленный ниже. Мы надеемся, что этот чек-лист даст начинающим разработчикам понимание того, что они «уже достойны» занимать свою позицию, а менеджерам подскажет, каким требованиям стоит соответствовать кандидатам.
По нашим оценкам, людям стоит соотносить себя с нужным уровнем при хотя бы 80% процентах совпадения ожиданий, а не всем 100%, потому что все люди разные. Кроме того, мы добавили подписи к пунктам: требования, возможность повышения навыка и так далее. Обратите свое внимание также на подписи «база» и «условия для повышения». Итак, что же должен делать сотрудник:
Старт карьеры
1. Уметь презентовать и обсуждать свою работу и свой прогресс.
2. Интересоваться и проводить обучение и изучение инструментов, с которыми приходится работать (возможность повышения навыка).
3. Уметь воспроизводить ошибки и исправлять ошибки в интерфейсе.
4. Учиться и пробовать писать чистый код (возможность повышения навыка).
5. Вручную тестировать отладку и баг-фиксы, созданные ими же (чтобы получить полную ответственность за все коммиты в общий код).
6. Под строгим надзором выполнять задачи уровнем выше (возможность повышения навыка).
7. Понимать процессы CI/CD и отладку, чтобы иметь возможность загружать готовый код под контролем старших сотрудников.
8. Делать свой вклад в документацию и читаемость кода путем переименования или добавления комментариев в неочевидных местах (возможность повышения навыка).
9. Уметь улучшаться после получения обратной связи после получения конструктивной и детальной обратной связи (база).
10. Не бояться просить о помощи тогда, когда это необходимо — коммуникация с командой.
11. Уметь делать код-ревью и понимать чужие код-ревью.
Junior-уровень
1. Планировать и брать ответственность за свое время.
2. Иметь достаточные навыки для исправления ошибки из готового кода (воспроизвести ошибку по отчету, вычислить слабые места, исправить и снова загрузить в базу).
3. Писать модульные тесты, учитывая, что фреймворк уже в работе (возможность повышения навыка).
4. Делиться знаниями: путем написания сообщений в общий чат, советов при личной встрече, записи коротких видео, написания постов в блог (условия для повышения).
5. Ежедневно интересоваться о готовности тех или иных задач.
6. Посещать технические встречи и собрания (возможность повышения навыка).
7. Понимать роли членов команды на планерках, либо же выяснение их позиций позже при личной встрече.
8. Осознавать временные рамки проекта, ежедневно указывать на стопорящие факторы или задержки.
9. Уметь рассчитывать время, нужное на выполнение задачи (например, 1.5 дня). Пункт не включает в себя умение разбивать задачи на подпункты. Точность не так важна, важно умение оценки «навскидку» и повышение производительности.
10. Заниматься своим личностным ростом (с чужой помощью выделить зоны роста и будущую работу в этом направлении).
11. Помогать в отладке CI/CD (возможность повышения навыка).
12. Кооперироваться со своими более опытными коллегами (возможность повышения навыка).
13. Уметь поддерживать (самостоятельно, но с помощью более опытного коллеги) свой маленький проект после его финального выпуска.
14. Участвовать в написании документации к проектам, например в написании Readme, описаниях процессов и системных данных.
15. Выполнять код-ревью по гайдлайнам, установленным в команде.
16. Не стоять в стороне, когда необходимо больше код-ревью.
Middle-уровень
1. Уметь работать с контекстным переключением.
2. Внедрять план действий (в том числе разбиение задач на подпункты и оценка времени на их выполнение).
3. Иметь хорошее понимание и значение тех или иных технических решений (возможность повышения навыка).
4. Выполнять задачи devOps, связанные с такими задачами: добавление трекеров, изменение направлений веток CI/CD, замена резервных копий баз данных.
5. Уметь самостоятельно решать задачи (в том числе интересоваться мнением у других членов команды).
6. Иметь представление о современных методах работы, а также о различных схемах разработки. Знать, как выявить их в коде и использовать их при написании нового кода.
7. Помогать при выстраивании системной схемы разработки (возможность повышения навыка).
8. Быть источником информации как минимум в одной сфере деятельности (библиотека, методика работы и так далее).
9. Настраивать тесты на фреймворках и писать тесты самостоятельно или с небольшой помощью.
10. Вести парные или командные сессии с младшими разработчиками (некоторые участники обсуждения этого списка поместили данный пункт в уровень senior) (возможность повышения навыка).
11. Быть ментором для начинающих сотрудников.
12. Самостоятельно настраивать все необходимое оборудование для работы (условия для повышения).
13. Уметь переписывать блоки кода для повышения читаемости и повышения стабильности.
14. Проводить код-ревью для других сотрудников.
15. Понимать особенности полного жизненного цикла приложения.
Senior-уровень
1. Уметь проектировать программное решение проблемы с нуля внутри своей области работы.
2. Знать особенности внедрения CI/CD-инструментария, в том числе выбор и настройка инфраструктуры.
3. Быть ответственным за общую читаемость, расширяемость и стабильность платформы проекта.
4. Подбирать набор языков программирования и фреймворков после совещания с остальными членами команды.
5. Быть ментором для уже опытных и начинающих разработчиков.
6. Писать тесты: подбор языков для тестов, выбор блоков, которые необходимо протестировать.
7. Иметь цельное представление о схемах построения современного программного обеспечения, а также уметь работать с ними внутри своей области.
8. Уметь выставлять требования и обсуждать детали реализации как вне, так и внутри проекта.
9. Принимать участие в формировании спецификаций при создании API (в обе стороны).
10. Анализировать комплексные ошибки в местах их появления.
11. Уметь думать о глобальном решении проблемы вне области непосредственного задействования.
12. Определять стандарты и правила выполнения код-ревью.
13. Стремиться к изучению новых технологий, следовать трендам в программировании и привносить лучшие решения в команду (база).
14. Участвовать в решении devOps-задач и иметь представлении об их внутреннем устройстве.
15. Уметь искать нужную информацию и представлять необходимое решение для известной технической или бизнес-проблемы.
16. Понимать особенности используемого набора языков программирования (возможность повышения навыка).
17. Оценивать свои возможности и знать, как удовлетворить нужды заказчика.
18. Брать на себя ответственность за написание документации к проектам, такой как Readme-файл к репозиторию, описаниями процессов и системным данным.
Уровень техлида
80% всех senior-разработчиков в компаниях являются еще и техлидами своего проекта, а 20% оставшихся сотрудников ответственны за развитие технологий, с которыми они работают. Зачастую техлиды делятся по отраслям, например Android-лиды.
1. Уметь проводить образовательные и мотивирующие беседы внутри команды.
2. Помогать в планировании личностного роста сотрудников.
3. Быть вовлеченным в офлайн- и онлайн-общение с сотрудниками.
4. Распространять знания внутри команды и вне нее.
5. Участвовать в процессе интервьюирования новых сотрудников.
6. Давать указания и рекомендации по внедрению клиентских систем.
7. Выстраивать собственное и командное понимание желаний клиента, его проблемы и его целевой аудитории.
8. Размышлять и обсуждать препятствия, которые могут возникнуть в команде в ближайшие полгода-год.
9. Помогать советами о том, как снизить сложность проектов, сервисов, систем и процессов с точки зрения рабочей отрасли.
10. Проектировать схемы построения системы с понятным UX, доходчивым дизайном, расширяемостью и безопасностью, которая будет выгодна заказчику.
11. Иметь отраслевые знания рабочей платформы и фреймворков.
12. Брать на себя ответственность за решение конкретных технологий в рабочей области, а также их обсуждение.
Уровень технического директора (путь менеджера)
1. Определять и поддерживать единообразие методик работы с кодом внутри проекта.
2. Выяснять и вести разработку решения проблемы и методик системного построения.
3. Участвовать и делиться своими знаниями во внешних технических собраниях в рабочих областях.
4. Уметь понимать клиентский бизнес и формулировать понятное видение решения проблемы.
5. Быть частью определения стратегии отдела: досуг, выбор рабочих языков и так далее.
6. Поддерживать доверительные отношения с клиентом и иметь близкие контакты с техническим отделом компании клиента;
7. Устранять технологические препятствия для команды.
8. Находить трудные участки в структуре кода и помогать исправлять их.
9. Быть менторов членов команды согласно их личностному плану роста.
10. Гибко работать с коллегами, чтобы максимально эффективно сочетать их умения, потенциал, кооперацию и инновации.
11. Проводить собрания с каждым из членов команды.
12. Работать с главами отдела дизайна и бизнеса для достижения совместных целей.
13. Уметь решать конфликты в команде.
14. Проводить бизнес-консультации с заказчиком.
15. Поддерживать конструктивную культуру обратной связи.
16. Поддерживать коллег в построении культуры общения.
Заключение
У каждой организации свои потребности к сотрудникам, однако это совсем не значит, что вышеизложенные требования нельзя адаптировать к другим компаниям. Мы будем рады, если среди компаний появится больше четких правил по приему на работу, тогда сотрудникам и кандидатам будет проще понимать, какому уровню они соответствуют.
Читайте также:
- Требования к Senior Developer: как стать старшим разработчиком и что нужно знать
- За что разработчики ненавидят парное программирование?
- Что должен знать хороший фронтенд-разработчик
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Dafna Rosenblum: What We Expect From Software Developers on Each Level