pro.analitika

pro.analitika

Меня зовут Александр Нездемина, я практикующий системный аналитик, имеющий 14+ лет опыта в этой профессии Автор лицензированных и запатентованных обучающих курсов-практикумов ИНТЕГРАЦИИ И ПРОЕКТИРОВАНИЕ API https://proanalitika.ru/ ПРОЕКТИРОВАНИЕ БД И ОСНОВЫ SQL https://proanalitika.ru/database Мои ученики достигают реальных результатов, повышают зарплату и становятся ТОП аналитиками на рынке. В сообществе больше пользы, чем на курсах крупных школ подписывайся
Пикабушник
в топе авторов на 398 месте
921 рейтинг 5 подписчиков 0 подписок 36 постов 4 в горячем
Награды:
5 лет на Пикабу

Разбор задачи с реального собеседования: e-commerce, брокер и резервы склада

При разборе задач я использую ответы, которые дают участники telegram-канала “ПРО АНАЛИТИКА”.

Такие разборы задач отлично помогают потренироваться в подходах к решению рабочих задач + увеличить насмотренность.

Задача

Сценарий: 

У нас есть e-commerce платформа, состоящая из:

  • веб-приложения,

  • брокера сообщений,

  • бэкенда.

Клиенты могут заказывать товары, а складская система проверяет наличие товаров на складе. 

Каждый раз, когда клиент делает заказ, система отправляет запрос через брокер для проверки доступности товара на складе и блокирует его на время обработки заказа.

Проблема: 

Клиенты могут:

  • добавлять несколько товаров в корзину одновременно,

  • отправлять несколько заказов.

Это приводит к тому, что резервируется больше товара, чем есть на складе. 

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

Необходимо:

  • Выявить процессы, которые происходят, 

  • На основе этих процессов отобразить схему (sequence diagram) взаимодействия, 

  • Предложить 2 способа оптимизации, чтобы избавиться от текущих проблем.

Решение

Выделим процессы, которые есть из описания задачи и разделим их на:

  • бизнес-процессы,

  • системные взаимодействия.

Начнём с бизнес-процессов

1. Добавление товара в корзину

  • проверка наличия товара на складе. 

2. Оформление заказа 

  • отправка полного списка товаров, которые выбрал клиент, 

  • резервирование товаров для дальнейшего списания после оплаты. 

Выделять больше процессов не вижу смысла - пока достаточно.

Теперь «как это выглядит под капотом»

Выделим компоненты системы:

  • Веб-приложение, 

  • Бэкенд, 

  • Брокер сообщений, 

  • Сервис склада. 

Добавление товара:

  1. Клиент добавляет товар в корзину, 

  2. Веб-приложение отправляет запрос на добавление товара в корзину на бэкенд, 

  3. Бэкенд отправляет запрос на проверку наличия товара на складе через брокер, 

  4. Сервис склада вычитывает сообщение и сообщает, есть товар или нет, 

  5. Бэкенд возвращает ответ веб-приложению - можно добавить товар или нет. 

Оформление заказа:

  1. У клиента собрана корзина, 

  2. Он нажимает «Оформить», 

  3. Веб-приложение отправляет запрос на бэкенд со списком товаров и количеством, 

  4. Бэкенд отправляет сообщение на резервирование товара через брокер, 

  5. Сервис склада вычитывает сообщение и резервирует товар или отклоняет запрос, 

  6. Бэкенд возвращает результат в веб-приложение, 

  7. При успешном резервировании - переходим к оплате, при неуспехе - отклоняем заказ. 

Разбор задачи с реального собеседования: e-commerce, брокер и резервы склада Системный аналитик, Решение, Собеседование, Микросервисы, Rest, API, Проектирование, Длиннопост

Получается такая схема

Получилась ситуация AS IS

Теперь на основе этой диаграммы можем предложить изменения, которые помогут решить исходную проблему.

Напомню условия задачи: 

> Клиенты могут добавлять несколько товаров в корзину одновременно и отправлять несколько заказов → резервируется больше товара, чем есть на складе → товар отображается как доступный, но при оформлении оказывается уже зарезервирован.

Первая неэффективность

Несколько клиентов добавили товар в корзину, но никто не зарезервировал его за собой.

Пример: 

  • У нас 1 кг бананов на складе, 

  • Три клиента добавили этот килограмм в корзину, 

  • Для каждого товар отображается как доступный, 

  • Но при оформлении заказа - только один сможет его купить. 

Как можно обойти?

Переносим резервирование товара на этап добавления в корзину. 

Когда клиент добавляет товар - мы сразу его резервируем.

Возможный кейс: 

Клиент добавил товар, но не оформил заказ — например, ушёл от компьютера. 

Товар остаётся заблокированным.

Решение: 

Устанавливаем временное ограничение на резервирование (например, 15 минут). 

Если клиент не оформляет заказ - товар возвращается на склад.

Разбор задачи с реального собеседования: e-commerce, брокер и резервы склада Системный аналитик, Решение, Собеседование, Микросервисы, Rest, API, Проектирование, Длиннопост

Получается такая схема

На этапе оформления заказа

Поскольку товар уже зарезервирован, на этом этапе мы просто подтверждаем заказ.

Можно пойти двумя путями:

  1. Сразу списать товар при отправке заказа, чтобы он не разблокировался, 

  2. Обнулить резерв и списать товар после оплаты. 

Личный выбор: 

Я склоняюсь к первому варианту. Если заказ не оплатят - просто вернём значения на склад.

Разбор задачи с реального собеседования: e-commerce, брокер и резервы склада Системный аналитик, Решение, Собеседование, Микросервисы, Rest, API, Проектирование, Длиннопост

Дополнительно, я бы отрисовал еще сценарий снятия сервисом склада

На этом все

И помните, что эта задача из реального собеседования. 

Когда вы её решаете, то на это есть всего 15-20 минут времени и интервьюер хочет понять:

  • какую теоретическую базу вы знаете,

  • как вы мыслите,

  • как умеете применять знания на практике.

Изучить теоретическую базу по интеграция и понять, как это использовать на практике ➡️ приглашаю сюда ⬅️

Показать полностью 3

ВСЕ ПОШЛО НЕ ПО ПЛАНУ

Вчера вечером прилетел неожиданный баг, который надо исправлять без отрыва от производства, что называется здесь и сейчас сегодня весь день.

В такие моменты чувствуешь особое ощущение, горящие «пятки» и напряжение мозга и думаешь об одном: как решить проблему в кратчайшие сроки.

В такой ситуации главное не отбрасывать альтернативные варианты решения и слушать, что говорят другие.

Как говорит моя хорошая знакомая, чтобы решить вопрос, надо подумать об «другого человека».

ЗАЧЕМ ДРОБИТЬ ЗАДАЧИ?


❓Очень часто встречаю задачи из разряда «сделать сферического коня в вакууме».
И вроде все понятно, только вот как этого коня собрать ни кто так до сих пор не понял и не смог сделать.

Типичная история, когда задача непонятная.
С первого взгляда, она очень сложная, а раз восприятие говорит, что это сложно, значит и времени это займет очень много.

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

Так вот, как избежать такой ситуации?

Все просто! Слона лучше есть по кусочкам, но чтобы взять какой-то кусочек из этого слона, сначала надо разделить его на них. В этом нам и поможет декомпозиция.

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

Как часто декомпозируете задачи? Есть ли проблемы с этим?

583

Уметь объяснить

Сегодня прочитал интересный пост у Олега Торбосова.

На мой взгляд он весьма описывает, каким навыком должен обладать любой человек, но особенно аналитик. Это возможность объяснять все сложные вещи простым человеческим языком.

Цитирую пост:

Уровень понимания.

Умер учёный, попал в рай, и спрашивает Бога:

— Господи, расскажи, как ты сотворил вселенную?

— Сингулярность, потом большой взрыв, экспоненциальное расширение... Вы, в принципе, всё с коллегами верно поняли.

— А как же ты сотворил всё живое?

— Ну как... Сперва абиогенез, потом мир РНК, дальше эволюция, клетки, потом многоклеточные организмы...

— А человека ты как сотворил?

— Слушай, это же ещё Дарвин описал. Сперва приматы, потом использование орудий, речь, прямохождение... Ты что, забыл все свои докторские диссертации?

— Но ведь в ваших религиозных книгах написано про семь дней, Адама и Еву, запретный плод, сотворение человека из глины...

— А как бы ты сам объяснил пастухам и охотникам про кварк-глюонную плазму, ДНК и естественный отбор?

Мораль: если что-то объясняешь людям, ориентируйся на их уровень понимания.

А вы как считаете?

30

Лень или прокрастинация?

Сейчас перечитываю книгу Насима Талеба *Антихрупкость* и в ней зашла тема о прокрастинации.

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

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

Все, что мне попадалось на глаза относилось к бездействию, причем к какому-то болезненному, как-будто человек только и делает, что ленится, всегда забивая на все. У меня это почему-то всегда вызывало отвращение.

И вот, читая книгу, вижу этот параграф и бум.

Автор приводит примеры, которые показывают, что это не болезнь и даже очень полезная штука в современном мире, которая помогает работать с информацией и понять: «а нужно тебе то или иное действие или нет?».

Цитирую: «Прокрастинация – это метод, который позволяет нам фильтровать информацию более эффективно и противостоять последствиям информационных атак».

Так вот, мне сразу стали вспоминаться некоторые дела, которые я могу откладывать. Они идут у меня с трудом и их постоянно хочется задвинуть на потом. После прочтения этого параграфа я задумался: «а действительно ли эти дела именно то, что мне дает энергию или они только ее забирают?». «А если забирают, то почему они в моем списке задач?».

И оказывается, что какие-то задачи и дела мне навязали или я сам их себе создал и добавил, основываясь на какой-то внешней информации, не смотря на то, что это совсем мне не интересно.

❗️Добавил себе задачу: разобрать список дел. Оценивать буду теперь с учётом такого подхода ❗️

А как у тебя обстоят дела с прокрастинацией?

Показать полностью
Отличная работа, все прочитано!