Как стать автором
Поиск
Написать публикацию
Обновить

Разбор задачи из реальной практики

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.1K

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

Задача

Условие: 

У вас мобильное приложение и вам надо разработать функциональность, которая будет показывать баннер "С днем рождения" при входе в приложение, в день, когда у пользователя ДР. 

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

Что вы будете делать чтобы реализовать фичу?

В основе этого разбора - реальные ответы участников сообщества в Telegram

Прежде чем я опишу свое решение - отвечу на вопрос, который возник по ходу решения.

А есть ли такое понятие, как сложность задачи в СА? Например, задача для Джуна, мидла, сениора?

Обычно список задач общий и не зависит от уровня кандидата, потому что пока он на собесе отвечает, то по ответам уже становится понятен уровень. 

Особенно этот уровень показывают вот такие задачи, как текущая.

Переходим к решению задачи

Начнем с того, что мы имеем мобильное приложение, где фича должна работать и главное условие, что она должна работать на старых версиях. 

➡️ это достаточно большая проблема. 

Почему?

Потому что если мы хотим что-то реализовать в нативе и не важно это android или iOS, то совершенно новые фичи смогут появится только в новой версии. 

Екатерина правильно написала: 

Если версия уже опубликована и у пользователей стоит - то внести изменения нельзя. 

Поэтому с этим надо будет работать. 

Очень расплывчатые бизнес требования, но будем основываться на них. 

Надо показать баннер при входе в приложение именно в день его ДР. 

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

Но так как мы оффлайн, то давайте предположим как этот баннер может работать. 

  • Загружается на экране лоадера при загрузке приложения. 

  • После полной загрузки приложения баннер появляется на экране.

Лично я за 2 вариант, так как в требования есть слова Баннер.

Еще из условия не понятно, как баннер должен выглядеть, из каких деталей он состоит:

  • просто картинка, 

  • картинка и текст, 

  • просто текст. 

Должны ли быть какие то кнопки, подарки и так далее?

В зависимости от этих требований уже можно подбирать технологию реализации, но так как у нас требований кот наплакал, представим, что у нас просто картинка, где написано с "ДР Короче"

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

1️⃣ Так как нам надо сделать так, чтобы фича была на старых версиях, то нам надо:

  • или найти функциональность, которая уже в каком-то виде на старых версиях реализована. 

Например, 
у нас в приложении инвестиций были реализованы кастомные баннеры и сторис, которые можно было переиспользовать.

  • или если есть SDUI и вам повезло, то можно использовать его. 

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

Такое тоже бывает. 

Еще мне понравился комментарий Екатерины:

Если приложение сделано на flutter, то на будущее можно добавить sdk shorebird. Которая пушит код напрямую к пользователю без обновления

Но в большинстве случае это все-таки будет натив. 

2️⃣ Для того, чтобы реализовать требование «релиз запланирован на определенные даты и для остальных она должна быть скрыта» - нам нужно будет использовать feature-toggle и открывать его или через FireBase, например. 

Или контролировать feature-toggle на бэке, если у вас есть такой сервис.

3️⃣ Один из основных вопросов: 

Где нам получать дату рождения?

И вот тут у вас появилось много вариантов:

через Select в БД
АДшки выгружается ИИН в нашу БД
создать сервис, который будет чекать сегодняшний день
нам достаточны и паспортных данных
есть какой-то сервис пользователей, типа users, user-management
Если там есть дата рождения - отлично, если нет - добавить поле (обязательное или нет) при регистрации новых пользователей. Для старых null. Тут сразу зреет вопрос о возможности изменить это поле самим пользователем или через админку/саппорт.
Пользователь свернул приложение и в след раз может войти через день-неделю-месяц, при этом флоу авторизации скорее всего он не проходит, мобилка обновляет токен

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

Например, 

  • если это банк, то эти данные сразу придут;

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

Единственное, что точно не подойдет, это делать запрос через «Select БД», так как мобилка должна общаться через API слой.  

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

Логика будет в компоненте скорее всего на бэке, так как нам нужно поддержать работу на старых версиях. И поэтому на мобилку мы эту логику повесить не можем.

Теги:
Хабы:
-5
Комментарии5

Публикации

Ближайшие события