4807. На собеседовании спрашивают: «Как бы вы оценили, сколько времени займёт интеграция с новым платёжным шлюзом?». Какой лучший ответ?
Anonymous Quiz
0%
Назвать конкретное число дней, основанное на опыте
100%
Сказать, что нужно уточнить требования, документацию API, прототип, а затем дать диапазон с рисками
0%
Ответить, что это зависит от команды, и уйти от ответа
0%
Назвать максимально большую оценку, чтобы перестраховаться
Настоящий опытный аналитик не оценивает без контекста. Он задаёт уточняющие вопросы:
Есть ли документация по API? Какие протоколы?
Нужна ли аутентификация, какие схемы?
Будет ли шлюз обрабатывать идемпотентность?
Какой объём трафика?
Какая команда будет заниматься?
Затем предлагает диапазон оценок (например, 2–4 недели) с факторами риска (сложность аутентификации, отсутствие тестового стенда). Такой подход показывает системное мышление.
Чего ждут интервьюеры
Не названия цифр, а методологии оценки (например, T-shirt sizes, planning poker, аналогии с похожими задачами).
Умение выявлять неизвестное.
Понимание, что интеграция — это не только код, но и тестирование, документирование, отладка.
Почему не другие варианты
A — называется число без анализа, что является красным флагом (не учитывает нюансы).
C — уход от ответа показывает неуверенность.
D — завышенная оценка без объяснений — тоже плохо.
Реальный совет
На собеседовании скажите: «Я бы начал с изучения документации, составил список задач, выделил неизвестные зоны и предложил бы спринт на исследование, после которого дал бы прогноз». Это демонстрирует проактивность.
Please open Telegram to view this post
VIEW IN TELEGRAM
4808. В спецификации к системе управления складом написано: «Система должна предотвращать отгрузку товара, если его нет в наличии». Разработчик сделал проверку только на момент отгрузки. Как улучшить требование?
Anonymous Quiz
3%
Указать, что блокировка должна быть на уровне базы данных
95%
Уточнить,что система должна резервировать товар на этапе создания заказа,а не только перед отгрузкой
3%
Добавить требование к времени выполнения проверки
0%
Запретить отгрузку в ночное время
Требование «предотвращать отгрузку, если нет в наличии» слишком узкое. Оно описывает только финальную проверку. Но товар может быть продан (через другой склад или онлайн) после того, как его зарезервировали, но до отгрузки. В реальности нужна блокировка товара на время процесса: как только клиент добавил товар в корзину или создал заказ, товар должен быть зарезервирован на складе (уменьшать доступное количество). И только потом отгрузка проверяет уже зарезервированный товар.
Улучшенное требование
«При создании заказа система должна зарезервировать товар на складе, уменьшив доступный остаток».
«Если резервирование невозможно (остаток 0), пользователь получает сообщение».
«При отгрузке система проверяет, что зарезервированный товар всё ещё доступен (не снят другим процессом)».
Почему это важно
Это предотвращает двойные продажи и негативный опыт клиентов. Аналитик должен декомпозировать процесс: резервирование, блокировка, отгрузка, а не просто «предотвращать отгрузку».
Реальный кейс
Крупный ритейлер пострадал от такой ошибки: люди заказывали товар, приезжали забирать, а его уже продали через кассу. Внедрили резервирование при создании заказа.
Please open Telegram to view this post
VIEW IN TELEGRAM
4809. Команда выкатывает обновление микросервиса, которое меняет формат запроса к другому сервису. Новая версия совместима со старым форматом, но новый формат не поддерживается старым сервисом. Как организовать rollout без простоя?
Anonymous Quiz
3%
Остановить все сервисы, обновить их по очереди и включить
97%
Использовать стратегию «сначала обратно-совместимые изменения, затем обновить потребителей
0%
Сделать обновление за один день, ничего не проверяя
0%
Переписать всё заново
В распределённых системах нельзя одновременно обновить все сервисы. Нужно делать обратно-совместимые изменения (additive changes). То есть сначала добавить новое поле в API, не удаляя старое. Старые клиенты продолжают работать. Затем обновить потребителей, чтобы они начали использовать новое поле. И только когда все потребители перешли на новую версию, можно удалить старое поле (ломающее изменение).
Как избежать простоя
Фаза 1: добавить новый параметр в запрос (опционально). Старый сервис его игнорирует.
Фаза 2: обновить все вызывающие сервисы, чтобы они передавали новый параметр.
Фаза 3: изменить логику сервиса-приёмника, чтобы он требовал новый параметр.
На каждом этапе система продолжает работать.
Почему A не подходит
Остановка всех сервисов — это downtime, которого можно избежать.
C и D — нереалистичны.
Реальный инструмент
Feature flags, versioned APIs, graceful shutdown. Аналитик должен в требованиях указывать, что изменения API должны быть обратно совместимыми или идти через версионирование.
Please open Telegram to view this post
VIEW IN TELEGRAM
В этой папке собраны каналы по ИИ, которые помогают быстрее разобраться в сфере, находить идеи и экономить время на поиске информации.
Please open Telegram to view this post
VIEW IN TELEGRAM
4810. Спринт на 3 недели. Есть критический баг (теряются 5% заказов) и новая фича (повысит продажи на 10%). На оба задачи не хватает времени. Что делать аналитику?
Anonymous Quiz
0%
Взять фичу, так как она даст больше прибыли
100%
Организовать встречу с бизнесом, показать цифры и решить, что важнее, зафиксировать компромисс
0%
Сделать и то, и другое, сократив тестирование
0%
Отдать решение архитектору
Каждый спринт разработчики сталкиваются с дилеммой: баг фиксить или фичу делать. Баг теряет 5% заказов — это реальные деньги здесь и сейчас. Фича даст +10% продаж, но не сразу и с риском. Без аналитика команда может выбрать неоптимально.
Что делает хороший аналитик
Собирает цифры:
Потери от бага = 5% от текущей выручки (например, 1 млн руб./день).
Ожидаемый доход от фичи = 10% прироста, но после внедрения (через 3 недели).
Показывает бизнесу. Уточняет, можно ли отложить баг на час (неделю) – обычно нельзя, так как потери растут. Затем организует встречу со стейкхолдерами (владельцем продукта, маркетингом, поддержкой) и вместе определяют приоритет по бизнес-ценности. Возможные варианты:
Сначала фикс бага (1 неделя), затем MVP фичи (2 недели).
Перенести фичу на следующий спринт, но получить план компенсации (скидка на доставку).
Важно зафиксировать решение в протоколе, чтобы потом не было споров. Аналитик не должен выбирать сам — он фасилитатор.
Что будет, если выбрать A (фичу) без согласования
Бизнес потеряет 5% заказов за 3 недели; через месяц фича может не окупить потерь.
Что будет, если B (сделать всё, сократив тестирование)
Выпустите баг ещё больше, либо фича окажется с дефектами.
Реальный пример
В Delivery Club аналогичный конфликт решили взвешиванием: баг с потерей заказов — must have, новая фича — could have. Бизнес согласился отложить фичу.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
4811. Сервис отправки email иногда отвечает 500 ошибкой. При повторе письмо уходит дважды. Как требование должно защитить от дублей?
Anonymous Quiz
0%
Не повторить, а ловить ошибку и оповещать администратора
98%
Добавить уникальный идентификатор письма и проверять на стороне email-сервиса, было ли такое письмо
0%
Увеличить таймаут соединения
2%
Перестать пользоваться этим сервисом
Письма клиентам (со сбросом пароля, подтверждением заказа) не должны дублироваться. Но все внешние сервисы могут выдавать временные ошибки 5xx, и клиент, повторив запрос, рискует получить два письма.
Решение – идемпотентность на стороне получателя
В запросе на отправку письма нужно передавать уникальный идентификатор (например,
message_idДетали в требованиях
«Перед отправкой письма система должна генерировать уникальный
message_idorder_id + timestamp«Email-сервис должен реализовать проверку идемпотентности: если запрос с таким
message_id200 OK«Хранить ID не менее 24 часов для защиты от коллизий при сетевых задержках».
Почему не подходят другие варианты
A (не повторять) – письма могут теряться из-за сетевого сбоя. Надёжность упадёт.
C (увеличить таймаут) – не решает дублирование при повторе (пользователь нажал «отправить» дважды).
D (перестать пользоваться) – нереалистично.
Реальный кейс
Банк отправлял SMS с одноразовым кодом. Из-за ошибки в биллинге при повторе отправлялось две SMS. Клиенты путали код. После внедрения
message_idPlease open Telegram to view this post
VIEW IN TELEGRAM
4812. Запрос на выборку клиентов с суммой покупок > 1000 рублей:
SELECT client_id, SUM(amount) FROM orders GROUP BY client_id HAVING SUM(amount) > 1000.
Запрос выполняется 8 секунд. Как ускорить без сложных архитектурных изменений?
SELECT client_id, SUM(amount) FROM orders GROUP BY client_id HAVING SUM(amount) > 1000.
Запрос выполняется 8 секунд. Как ускорить без сложных архитектурных изменений?
Anonymous Quiz
27%
Добавить индекс на client_id
67%
Создать материализованное представление предрасчитанными суммами по клиентам, обновляемое раз в час
5%
Партиционировать таблицу по дате
1%
Увеличить память сервера
❤1
Партиционирование по дате уменьшит объём сканирования, если в
WHEREМатериализованное представление (MV)
MV хранит предрассчитанный результат запроса:
SELECT client_id, SUM(amount) as total FROM orders GROUP BY client_idЗанимает места ~ (кол-во клиентов) × (несколько байт).
Обновляется инкрементально после каждого изменения в
ordersЗапрос к MV вместо основной таблицы выполняется за миллисекунды (читает всего N строк).
В требованиях нужно указать:
«Для отчёта "топ клиентов" использовать материализованное представление
client_totals«Обновлять представление раз в час (допустима задержка)».
«При изменении данных (INSERT/UPDATE) в
ordersРеальный пример
В CRM-системе отчёт «крупнейшие покупатели» грузился 30 секунд. После создания MV с ежечасным обновлением время упало до 0.2 секунды.
Please open Telegram to view this post
VIEW IN TELEGRAM
4813. Стартап с 5 разработчиками и нагрузкой 100 запросов/сек хочет микросервисы «как у Google». Какой главный риск?
Anonymous Quiz
4%
Микросервисы потребляют больше памяти, чем монолит
94%
Избыточная инженерная сложность замедлит разработку и не даст преимуществ при такой нагрузке
1%
Микросервисы не умеют работать с транзакциями
1%
Несовместимость с облачными провайдерами
Микросервисы решают проблемы масштаба (тысячи разработчиков, миллионы запросов). Для маленькой команды они вводят накладные расходы:
Настройка Kubernetes, сервис-меша, дата-центра или кластера.
Отладка распределённых транзакций – запрос идёт через 5 сервисов, ошибку трудно воспроизвести.
Развёртывание: нужно вызывать CI/CD для каждого сервиса (минимум 3–4).
Мониторинг и логи – собирать их с нескольких сервисов сложнее.
При 100 запросах/сек и 5 разработчиках монолит с чёткими модулями будет работать не хуже, а разработка пойдёт быстрее.
Что делать вместо?
Модульный монолит с чёткими границами пакетов. Если в будущем нагрузка вырастет до 1000+ запросов/сек, легко выделить узкие места в отдельные сервисы.
Реальные примеры
Instagram долгое время был монолитом на Django.
Twitter начинал с монолита Ruby on Rails, а микросервисы внедрял, когда столкнулся с миллионами запросов.
Что аналитик должен рекомендовать
Оценить масштаб (100 запросов/сек – смешная нагрузка для современного сервера).
Оценить команду (5 человек – не нужно разделять).
Указать в NFR не «микросервисы», а «архитектура должна позволять горизонтальное масштабирование и выделение сервисов при росте нагрузки».
Вывод
Не усложняйте. Самая быстрая архитектура для малой команды – монолит с чистыми интерфейсами.
Please open Telegram to view this post
VIEW IN TELEGRAM