Как устроена разработка сервисов: существующие или с нуля
Что проверяют
Есть ли у вас опыт и в поддержке живых сервисов, и в запуске новых, и понимаете ли вы, что это разные навыки. Следом просят пример: что вы меняли в чужом коде, не уронив прод, или какие решения приняли в новом сервисе и о каких жалеете. Кандидат часто задаёт этот вопрос и работодателю, чтобы понять, чем будет заниматься.
Как отвечать
Разделите ответ на две части и в каждой дайте свой пример.
Существующий сервис:
- разобраться до правки: код и тесты, метрики и логи, кто вызывает сервис и по какому контракту (REST, gRPC, топики Kafka);
- менять безопасно: сначала тесты на текущее поведение, контракт меняется с обратной совместимостью (новое поле в
.protoвместо смены типа старого), миграции базы в два шага: добавить колонку, а старую убрать после выкатки; - выкатка: фича-флаг, канарейка, наблюдение за ошибками и латентностью.
Новый сервис:
- каркас: структура
cmd/иinternal/, конфиг из окружения, корректная остановка поSIGTERMчерезsignal.NotifyContextиhttp.Server.Shutdown; - эксплуатация с первого дня: структурированные логи через
log/slog, метрики Prometheus, трассировка OpenTelemetry, ручки/healthzи/readyz; - осознанные решения: отдельный сервис или модуль в монолите, какая база, где граница ответственности. Сильно звучит, когда вы называете, от чего отказались и почему.
Масштаб приводите свой: нагрузка, размер кода, сколько человек в команде. Если с нуля ничего не запускали, так и скажите, но покажите заметную работу в существующем: вынесли модуль, сменили хранилище, перевели сервис на новую версию библиотеки.
Где спотыкаются
Пересказывают жизненный цикл разработки с SOLID и MVP вместо конкретного сервиса. Интервьюеру нужен ваш опыт, а не определения.
Говорят «люблю только с нуля» и пренебрежительно отзываются о легаси. Большая часть работы в любой компании это поддержка, и такой ответ настораживает.
В рассказе о новом сервисе нет ни слова о мониторинге, логах и остановке. Сервис, который нельзя наблюдать и корректно перезапустить, к проду не готов.