Подборка мок-интервью по mobile system design
Иногда, между книгами и задачами, очень полезно посмотреть чужие видео. Так ты структурируешь свои идеи, которые отложились фрагментами. А где-то можешь и вдохновиться новыми.
Сделал подборку интересных мок-интервью:
🟣 Design Story Viewer. Сторисы почти незаменимая деталь любого приложения. Поэтому вероятность, что вы когда-нибудь будете их делать — высокая.
🟣 Chat App. Чат — любимая задача на интервью. В ней правда есть многое, что поможет оценить насмотренность и глубину.
🟣 Design the Facebook feed. Лента встречается почти в 99%. Очень полезно посмотреть как ее проектируют сеньоры из FAANG'а
🟣 Мок-дизайн приложения. Наш друг Саша Сычев из Яндекса поделился форматом интервью и какие оценки кандидата в этой секции есть в СНГ.
Ну и напомню, что у нас в закрытой базе есть несколько уникальных интервью, а также материалы из марафона проектирования.
Получить это можно по скидке💰 тут или ⭐️ тут
Иногда, между книгами и задачами, очень полезно посмотреть чужие видео. Так ты структурируешь свои идеи, которые отложились фрагментами. А где-то можешь и вдохновиться новыми.
Сделал подборку интересных мок-интервью:
Ну и напомню, что у нас в закрытой базе есть несколько уникальных интервью, а также материалы из марафона проектирования.
Получить это можно по скидке
Please open Telegram to view this post
VIEW IN TELEGRAM
Цикл про System Design: Как определять требования к системе
Самый важный этап, который недооценивают многие. Что на работе, что на интервью.
В этом цикле мы начнем углубляться в систем дизайн/архитектуры/проектирования. Эта тема очень актуальная, тк рынок ИИ сильно двигает инженеров в сторону понимания системы целиком.
Так и систем дизайн это максимально похожая на практику дисциплина. Инженеры перестали быть узкими спецами и становятся дирижерами оркестра или тимлидами аи-инструментов.
В первом блоке разберем что такое систем дизайн и почему этап сбора требований очень важный:
🟣 мы поймем в чем отличие продуктовых, функциональных и нефункциональных требований
🟣 лучшие практики для сбора требований
🟣 почему этот этап влияет на конечный результат и сроки
🟣 как важно качество наших вопросов
🟣 почему не стоит шаблонно отвечать
🟣 какие ментальные модели помогут инженеру делать хорошие системы
Статьи полезны тем, кто хочет изучить или улучшить свои навыки сбора требований.
🧬 Получить материалы вы можете 💰 тут или ⭐️ тут
Самый важный этап, который недооценивают многие. Что на работе, что на интервью.
В этом цикле мы начнем углубляться в систем дизайн/архитектуры/проектирования. Эта тема очень актуальная, тк рынок ИИ сильно двигает инженеров в сторону понимания системы целиком.
Так и систем дизайн это максимально похожая на практику дисциплина. Инженеры перестали быть узкими спецами и становятся дирижерами оркестра или тимлидами аи-инструментов.
В первом блоке разберем что такое систем дизайн и почему этап сбора требований очень важный:
Статьи полезны тем, кто хочет изучить или улучшить свои навыки сбора требований.
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
О дисциплине и фокусе напишу пост чуть позже.
Вкратце, как я уже 4 месяца начал просыпаться регулярно в 7 утра, заниматься спортом 5 раз в неделю. И как это в первую очередь повлияло на мой майндсет
Вкратце, как я уже 4 месяца начал просыпаться регулярно в 7 утра, заниматься спортом 5 раз в неделю. И как это в первую очередь повлияло на мой майндсет
Самые сложные задачи для iOS разработчика?
Final Results
19%
Анимации и UI
27%
Производительность и профилирование
16%
Алгоритмы и работа с данными
28%
Многопоточность и ассинхронность
18%
Управление памятью и утечки данных
33%
Проектирование приложений и архитектуры
21%
Безопасность приложения и данных
22%
Работа с мультимедиа (камерой, видео)
16%
CI/CD и автоматизация сборок
11%
Другое
System Design: Методики сбора требований
Нашу компетенцию чаще оценивают только по срокам.
Говоря, что сбор требований является важнейшей частью разработки, я не шутил. Много раз замечаю как у меня и других разрабов в больших компаниях это главная причина срыва сроков. А где-то причина, почему они не могут получить повышения или даже увольнения.
Коммерческая разработка — это не творчество. Здесь мы помогаем строить бизнес-процессы и зарабатывать/экономить деньги и время. Инженеру нужно с головой выбирать решения, которые найдут компромисс между качеством, скоростью и стоимостью.
Поэтому те, кто говорит, что не нужно оценивать сроки и пустить всё на самотек, чаще всего не работают в командах с четкими бизнес-метриками. А четкие бизнес-метрики требуют оценок и сроков для маркетинговых акций и гонки с конкурентами.
Хорошего инженера от плохого отличает точность оценки сроков. Джуны обычно многое недооценивают и погружаясь в задачу упускают множество деталей. Чаще это из-за отсутствия опыта. У мидлов же это потому, что невнимательно относятся к процессу проработки требований. Не уточняют у продукта вводные или у соседних платформ их особенности, скидывая это на лидов, аналитиков и тп. Плохой же сеньор может обладать крутой экспертизой, но совсем не учитывать потребности бизнеса или не иметь навыки коммуникации. Но все это ответственность хорошего разраба.
Чуть подробнее мы говорили об этом в посте про ресурсного инженера.
Вот несколько методик для качественных ресерчей:
🟣 Интервью с заказчиками и пользователями
Не бегите сразу клепать экран. Если вы услышали мяуканье, то это не значит, что перед вами кошка. Возможно это тигр, что разорвет вам жопу. Разработка занимает чаще лишь 20-30%, а остальное время проработка требований и краевых условий.
Уточники у заказчиков чего они хотят. Как будет вести себя программа без данных или условий.
🟣 Методика “5 Почему” (5 Whys)
Чаще всего многие вопросы вскрываются в процессе разработки. Но лучше бОльшую часть попытаться заранее предусмотреть. Качественный ресерч от плохого зависит насколько много инженер задал вопросов перед разработкой.
В отмеченной статье кратко объясняется как техника отлично помогает это сделать.
🟣 User Story
Отличная практика ставить себя на место пользователя и видеть его сценарии. Перебирать в голове разные пути на реакции системы. Например, что будет если не оказалось интернета? Если произошла ошибка с сервера? Как онлайн получить или синхронизовать информацию?
Качественный и понятный команде ресерч — это черта хорошего инженера.
Делитесь своими методиками.
Нашу компетенцию чаще оценивают только по срокам.
Говоря, что сбор требований является важнейшей частью разработки, я не шутил. Много раз замечаю как у меня и других разрабов в больших компаниях это главная причина срыва сроков. А где-то причина, почему они не могут получить повышения или даже увольнения.
Коммерческая разработка — это не творчество. Здесь мы помогаем строить бизнес-процессы и зарабатывать/экономить деньги и время. Инженеру нужно с головой выбирать решения, которые найдут компромисс между качеством, скоростью и стоимостью.
Поэтому те, кто говорит, что не нужно оценивать сроки и пустить всё на самотек, чаще всего не работают в командах с четкими бизнес-метриками. А четкие бизнес-метрики требуют оценок и сроков для маркетинговых акций и гонки с конкурентами.
Хорошего инженера от плохого отличает точность оценки сроков. Джуны обычно многое недооценивают и погружаясь в задачу упускают множество деталей. Чаще это из-за отсутствия опыта. У мидлов же это потому, что невнимательно относятся к процессу проработки требований. Не уточняют у продукта вводные или у соседних платформ их особенности, скидывая это на лидов, аналитиков и тп. Плохой же сеньор может обладать крутой экспертизой, но совсем не учитывать потребности бизнеса или не иметь навыки коммуникации. Но все это ответственность хорошего разраба.
Чуть подробнее мы говорили об этом в посте про ресурсного инженера.
Вот несколько методик для качественных ресерчей:
Не бегите сразу клепать экран. Если вы услышали мяуканье, то это не значит, что перед вами кошка. Возможно это тигр, что разорвет вам жопу. Разработка занимает чаще лишь 20-30%, а остальное время проработка требований и краевых условий.
Уточники у заказчиков чего они хотят. Как будет вести себя программа без данных или условий.
Чаще всего многие вопросы вскрываются в процессе разработки. Но лучше бОльшую часть попытаться заранее предусмотреть. Качественный ресерч от плохого зависит насколько много инженер задал вопросов перед разработкой.
В отмеченной статье кратко объясняется как техника отлично помогает это сделать.
Отличная практика ставить себя на место пользователя и видеть его сценарии. Перебирать в голове разные пути на реакции системы. Например, что будет если не оказалось интернета? Если произошла ошибка с сервера? Как онлайн получить или синхронизовать информацию?
Качественный и понятный команде ресерч — это черта хорошего инженера.
Делитесь своими методиками.
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Блин. Я, если честно, часто вообще не готовлюсь целенаправленно к собесам. Потому что ленив или тупо нет времени (что делать неправильно)
Оказывается, нужно еще готовиться к финальному интервью и заранее проработать сценарий разных кейсов по поведенческому интервью…
Ладно, потом это тоже разберем
Оказывается, нужно еще готовиться к финальному интервью и заранее проработать сценарий разных кейсов по поведенческому интервью…
Ладно, потом это тоже разберем
Изучаем как собирать нефункциональные требования для разработки мобильных приложений
В комментариях прошлого поста написали "почему разработчик должен задумываться о требованиях, если есть лид или аналитик?". Это очень популярное заблуждение, ему придерживался и я сам.
Во-первых, тимлид или другой менеджер — это чаще про общие стратегии на кварталы или даже годы. Если тимлид лезет в детали мобилки, бэк, фронт, то здесь много вопросов к доверию тимлида, его микроменджменту и самостоятельности инженеров.
Во-вторых, никто, кроме инженера, не сможет учесть множество особенностей своей платформы. На то он и эксперт, что взяв под ключ фичу, продумывает и подсвечивает все риски. Суть систем дизайна не сделать программу по готовой схеме от аналитиков и тимлидов. А собрать требования и подсветить их самому.
Здесь одни из требований — это нефункциональные требования.
Эти требования не говорят ЧТО нужно сделать, а скорее КАК. Такие требования помогают сделать нашу фичу стабильной и понятной в использовании. Автор делится ключевыми требованиями для мобильных инженеров:
🟣 Performance. Как сделать приложение более плавным, быстрым.
🟣 Security. Сделать приложение более безопасным. Использовать ли HTTPS, Keychain, криптошифрование и тп
🟣 Совместимость. Обсуждение на каких версиях будет использоваться приложение.
🟣 Надежность. Нужен ли хэндлинг ошибок и их мониторинг.
🟣 Поддерживаемость. Вопрос понятности и читаемости кода, модуляризации и CI/CD.
Интересно также почитать про лучшие практики.
В комментариях прошлого поста написали "почему разработчик должен задумываться о требованиях, если есть лид или аналитик?". Это очень популярное заблуждение, ему придерживался и я сам.
Во-первых, тимлид или другой менеджер — это чаще про общие стратегии на кварталы или даже годы. Если тимлид лезет в детали мобилки, бэк, фронт, то здесь много вопросов к доверию тимлида, его микроменджменту и самостоятельности инженеров.
Во-вторых, никто, кроме инженера, не сможет учесть множество особенностей своей платформы. На то он и эксперт, что взяв под ключ фичу, продумывает и подсвечивает все риски. Суть систем дизайна не сделать программу по готовой схеме от аналитиков и тимлидов. А собрать требования и подсветить их самому.
Здесь одни из требований — это нефункциональные требования.
Помимо функционала, важны характеристики, определяющие качество приложения — производительность, безопасность, масштабируемость, удобство использования и т.д.
Эти требования не говорят ЧТО нужно сделать, а скорее КАК. Такие требования помогают сделать нашу фичу стабильной и понятной в использовании. Автор делится ключевыми требованиями для мобильных инженеров:
Интересно также почитать про лучшие практики.
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
Mastering Non-Functional Requirements for Mobile Application Development
Introduction
Forwarded from Тимур Тибеев | BigTechDream (Timur Tibeyev)
Мой коллега, Geoffrey Huntley Staff SWE at Canva, написал статью “Dear Student: Yes, AI is here, you're screwed unless you take action…” или “Дорогие студенты: AI уже здесь и вы попали, если не предпримите действий...”
В статье говорится много о том, что мы уже затрагивали на этом канале, как изменится индустрия, как изменятся уровни и как изменятся собеседования. Приведу лишь выжимку советов студентам.
⏳ Используйте время с пользой
У вас есть около года, возможно, меньше. Большинство инженеров еще не поняли потенциал AI — вам нужно воспользоваться этим моментом, пока это не случилось. Учитесь быстрее!
📚 Освойте навыки итеративной разработки
- Создавайте свои приложения, проекты, даже если это простой todo-list.
- Учитесь писать тесты, применяйте property based testing, пишите тестируемый код.
- Научитесь настраивать CI-пайплайны (что-то, кроме GitHub Actions).
- Наловчитесь эффективно использовать SCM-инструменты, такие как Git.
- А теперь совместите все навыки и научитесь выпускать софт итеративно, используя SCM, CI и тестирование.
🔍 Не идите в стартапы
Многие стартапы пойдут ко дну после текущей вспышки интереса к AI. Ищите лишь те компании, где можно хорошо заработать и многому научиться. Имейте запас наличности на случай увольнения.
🤖 Избегайте компаний, которые запрещают AI инструменты
Не отказывайтесь от AI — это ваш союзник. Найдите компании, которые поддерживают использование AI в работе.
🌟 Стремитесь стать экспертами
Фокусируйтесь на уникальных навыках, таких как создание MCPs (систем управления моделями) — на данный момент это непаханое поле. Изучите и разберите, как работают https://github.com/block/goose и https://github.com/All-Hands-AI/OpenHands.
🔧 Учите Rust
Сейчас сообщество Rust на подъеме, и это отличное время присоединиться. Это язык, который за счет своего типа способен работать лучше с LLMs.
💼 Приносите больше пользы бизнесу
Изучите боль клиентов и найдите решение для самых значимых проблем. Учитесь думать как предприниматель и разбирать, как ваша работа приносит бизнесу выгоду.
📈 Создавайте личный бренд
Создайте личный сайт, начните делиться знаниями и участвовать в общественных мероприятиях — это ваш магнит для возможностей. Публикуйте свои разработки на GitHub и MCP инструменты на ресурсах, таких как npm или [crates.io](https://crates.io/).
🤷Что это значит, Тимур?
Сейчас пора неопределенности, никто до конца не знает, что будет завтра. Но все стабилизируется и приобретет более четкие границы.
Поэтому я согласен с Geoffrey, лучше действовать на опережение и использовать AI по максимуму для своего карьерного роста.
А так, низкий спрос + AI звучит как не самое лучшее время, чтобы быть выпускником software engineering.
https://ghuntley.com/screwed/
Please open Telegram to view this post
VIEW IN TELEGRAM
Настало время уйти от теории. В прошлых постах мы углубленно разбирали почему этап сбора требований важен. Теперь мы применим наши знания на практике.
Если вы услышали мяуканье, то это не значит, что перед вами кошка. Возможно это тигр, что разорвет вам жопу. (с) Лев Бондаренко
Задачи на корзину и списком товаров — одна из классических в систем дизайне. Например, еще до всех этих хайпов, в 2023 мы решали задачу с обновлением избранного.
Сейчас попробуем порешать и найти несколько решений в такой задаче:
В приложении Авито есть два экрана:
1. Список товаров – отображает доступные товары и их количество в корзине. Можно добавлять, изменять количество или удалять товары из корзины. Внизу есть кнопка перехода в корзину с общей стоимостью, которую присылает сервер.
2. Корзина – показывает товары, добавленные в корзину. Здесь тоже можно изменять их количество или удалять.
Когда пользователь добавляет или удаляет товар, запрос отправляется на сервер. Если запросы приходят в неправильном порядке, данные могут стать неактуальными.
Здесь нет правильного решения и финальный выбор зависит от того, какие перед вами будут ограничения и компромиссы. У каждого есть свои плюсы и минусы.
Предлагайте свои решения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM