В мире IT профессий существует множество ролей и должностей, каждая из которых требует определенного уровня знаний и опыта. Одной из ключевых фигур в этой области является senior developer. Давайте обсудим в этой статье, кто же является сениором, а кто нет.

Что не является критериями senior-разработчика:
Имеет зарплату senior разработчика и запись в трудовой книжке "ведущий разработчик".
Самый первый способ определить свой грейд - это попробовать устроиться на желаемую позицию и понять, берут вас туда или нет. И если вы получите 3-4 оффера со строчкой "сениор", то скорее всего вы действительно являетесь senior разработчиком по мнению рынка. Однако, тут есть множество "но":
Цикл IT-рынка. Если сейчас разработчиков сильно не хватает, то компании порой начинают нанимать людей на лычку senior-разработчиков, которые на самом деле ими не являются. Просто надо как-то замотивировать человека, чтобы он к вам пошел. И с другой стороны, если рынок тяжелый, то даже на начальные позицию отбор может быть на пару грейдов выше;
Качество компаний, куда вас отбирают. Разные компании имеют разные компетенции по отбору кандидатов и оценке их уровня. Поэтому, может оказаться, что одни компании оценивают вас на сильный-senior разработчика, а другие и мидла вам дать не особо хотят. Как правило, если компания большая, у них построен процесс отбора, то они ближе оценят вас к рынку, чем маленькие стартапы.
Возможность хакнуть собеседование. Уже всем очевидно, что процесс собеседований и реальная работа сильно отличаются. Плюс есть специальные сервисы и сообщества, что помогают людям "натаскаться" проходить собеседования. Поэтому вполне возможно, что человек сможет блестяще пройти собеседования, но в реальной работе покажет себя грейдом ниже.
Ошибки найма. Всегда есть вероятность, что на собеседовании человека "потыкали палочкой туда", где он лучше всего разбирается, а туда, где он плавает, не тыкнули. Поэтому дали субъективную оценку выше, чем человек реально может.
Стаж работы человека
К сожалению, стаж в IT немного говорит про компетенцию человека. Ибо можно джуном попасть на какие-то серьезные проекты или стартапы с опытными коллегами и сложными задачами, где жизнь заставит растить компетенцию или сдохнуть. И за 2-3 года получится очень крутой разработчик. А где-то можно сидеть на типовых задачах и проектах десятилетиями, где харды не будут развиваться. Поэтому стаж в IT не показывает грейд человека.
Знание проекта и доменной зоны
Вот это достаточно спорный пункт, но я все же отмечу. Представьте, что вы нанимаете человека на проект по биллингу человека, который до этого проработал на 2-3 других проектов по биллингу. Он прекрасно ориентируется в терминологии, он уже знает API платежных шлюзов, с которыми нужно работать, он пьет кофе с бухгалтерией и понимает их шутки, а то и сам шутит. И кажется, что он может даже работать без продакта и аналитика, но постепенно вы видите, что он просто повторяет какие-то решения, которые он увидел на другом проекте, сделанные другими людьми, а сам с нуля не может.
Что является критериями senior-разработчика:
Уважение к себе, как к профессионалу
Senior-разработчик понимает, что он профессионал, который работает с бизнесом на взаимовыгодных условиях. Что он также нуждается в работодателе, как и работодатель в нем. Поэтому он стремится работать в здоровых условиях, чтобы личное не переходило в деловое и наоборот. Он знает принципы делового общения и не терпит, когда ситуация выходит за рамки допустимого. Это же относится к желанию разработчика работать за достойную заработную плату в соответствие с рыночными условиями.
Он видел некоторое де… количество критикалов
Достаточно легко понять грейдность человека по тому, как он ведет себя в нештатных ситуациях. Моральный настрой, паттерн реагирования и дебаггинга проблемы, умение понять границы своей компетенции и призвать экспертизу других членов команды, понимание того, как системы работают в целом. И все это нарабатывается личной компетентностью, опытом общения с другими людьми и участия в различных проектах и банальным количеством таких ситуаций.
Глубокое знание своего стека на уровне "скучных страниц книжек"
Если мы возьмем хорошую книгу по какому-то языку программирования или инструменту, то первые 50 будут про какие-то байки и клевые истории, 200-300 про базовый синтаксис. Потом 300 про структурирование кода, работу с ООП и тестирование. А дальше страниц 400 про какие-то особенности, кто никто не читает и не понимает.
Так вот, senior разработчик, конечно же, из головы не достанет вам порядок аргументов из какой-то функции по рефлексии, или не скажет, какой тюннить Java машину или PHP-FPM, но он знает что это есть, где про это найти и как с этим работать при необходимости.
Базовая IT-грамотность, чтобы не было "черных коробок"
Человек может великолепно справляться с задачами на определенной платформе, но стоит чуть отклониться от привычного пути, как он сталкивается с "магическими" или "черными ящиками". Раньше таких людей называли "разработчиками фреймворков". Но настоящий senior-разработчик понимает, что существуют физические серверы, на которых установлена операционная система, предоставляющая различные интерфейсы пользователям и приложениям по определенным протоколам. Если возникает проблема, он спокойно переходит на уровень операционной системы или даже оборудования, чтобы эффективнее решить задачу.
Умение решать проблемы, выходя за рамки
Когда вы ведете общение с senior-разработчиком, вы ожидаете, что вы расскажите ему о целях проекта и проблемах, которые есть у бизнеса, он сам сможет декомпозировать проблему в конкретные задачи и дальше провести необходимые работы. И если для решения проблемы, потребуется выйти за рамки текущей парадигмы, он предложит, как это можно сделать. Т.е. такой мистер Вульф из Легендарного Криминального Чтива.
Если человек может работать исключительно по задачам - он джун, если только в рамках текущих рельс проекта, то он мидл.
Бесстрашие перед неизвестностью
Если разработчик получает задачу поправить какой-то модуль, написанный не на том языке, что он знает, в той системе, которую он не понимает. И он говорит: "Я не знаю, как это сделать, но давайте почитаю, посмотрю документацию и посмотрю, что смогу сделать - то это хорошая заявка на senior-ность". И даже если разработчик поймет, что его компетенции не хватает, чтобы решить проблемы бизнеса в установленные сроки и нужно подключать других специалистов - это тоже про senior-ность.
Понимание систем и их взаимодействий
Это тот самый пресловутый System-design, который нужно спрашивать на собеседованиях на senior-позицию. Разработчик должен понимать, что его проект не находится в вакууме, есть множество других кирпичиков, из которых система строится или может строиться. Он должен понимать, что это возможно, что есть определенные bestPractise, что есть свои плюсы и минусы. И когда какую-то проблему нельзя решить существующим набором инструментов, это нормально задействовать другой, и как его можно поженить с существующим проектом.
Умение создавать и поддерживать рабочие системы
Senior-разработчик понимает, что продакшен-реди проект, это не тот, что написан, а тот, который выкачен на продакшен и протестирован. Это проект, у которого настроены мониторинги и логирования. Это проект, у которого налажена совместная командная работа и процессы релизов. Это проект, который своими фитнес-функцииям не даст неопытным разработчикам сделать какую-то грубую ошибку и нарушить его работу. Это проект, который в случае любой аварии, сможет быть восстановлен без утраты пользовательских данных. Это проект, который можно будет масштабировать по необходимости. И senior умеет создавать такие проекты.
Senior - это человек, которому не все равно
Есть фраза, что проект умирает, когда из команды уходит последний человек, которому не все равно. Так вот, senior - это человек, что задает стандарты качества проекта и мотивирует других участников проекта на своем примере, что независимо от обстоятельств нужно оставаться профессионалом, который делает свою работу хорошо;
Желательные, но необязательное критерии senior-разработчика:
Умение обучать новичков, умение быть наставником
Очень круто, если человек имеет ментальные силы и способности, чтобы передавать свои знания неопытным коллегам и наставлять их на истинный путь. Еще круче, если человек дружелюбен, и может подхватить нового сотрудника уже с этапа онбординга. Однако не всегда профессионализм идет совместно с этими качествами, и это не делает профессионала менее профессиональным.
Умение общаться с заказчиками и партнерами
Очень круто, если senior-разработчика можно взять на переговоры, и он будет вносить конструктив в двухстороннее общение. Однако, не всем людям комфортно на таких встречах, не все понимают принцип переговоров, не все умеют отстаивать позицию своей стороны. Это огромный плюс, если человек так умеет, но если нет, это решаемо на уровне менеджмента.
Алгоритмическая грамотность
Как я писал в своей статье - https://habr.com/ru/articles/709550/, алгоритмы хоть и не нужны в 99,9% работы разработчика, но они положительно влияют на ваше умение писать код и работать со "сложностью". Поэтому, если человек умеет в решение алгоритмов, это будет ему плюсом. Тем более, в ряде компаний такие этапы являются обязательными, если вы в таких местах заинтересованы -https://habr.com/ru/articles/882724/
Почему так мало про код?
Умение писать работающий код - это необходимый навык для любого программиста. Однако, это навыки которые являются решающими на этапе джуниор и мидл разработчика. Когда мы говорим про senior, то уже подразумевается, что человек в него может хорошо, и его проверка по большому счета даже не требуется. И как вы знаете, если человек по карьере переходим на позицию Тимлида или Архитектора, он даже начинает утрачивать этот навык, и это нормально.