Mobile System Design: Почему важно учитывать размер аудитории
На тренировках по мобильному систем дизайну мы отдельно остановились на вопросе "Почему важно учитывать размер аудитории". Также нам подробно объяснила экс-тимлид Яндекса.
Грубо говоря, это одно из главных требований реального проектирования. Об этом много можно рассуждать, но лучше всего это сформулировано в книгах Mobile System Design и Building Mobile Apps at Scale.
Рост аудитории кардинально влияет на требования к архитектуре, качеству кода и техрешениям. Чем больше пользователей — тем выше цена любой ошибки, а значит и требования к зрелости продукта.
Все авторы выделяют такие набухающие блоки:
1️⃣ Один бинарник
Маленькое приложение с небольшой аудиторией может жить даже с херовым кодом. Но при росте аудитории любая ошибка превращается в массовую проблему.
Мобилки не обновляются мгновенно как веб. Если у тебя 500 000 пользователей, у каждого может быть разная версия, и каждая ошибка живет на устройстве долго.
Вывод: глубокое проектирование и четкая система релизов становятся критичными
2️⃣ Чем больше пользователей, тем дороже ошибки
Building Mobile Apps at Scale пишет: с ростом аудитории растет и команда, а значит растет и цена ошибок.
🟣 При 100 пользователях: фича может падать 1 раз в сутки, лаги не критичны, можно быстро пофиксить.
🟣 При 1 млн пользователей: маленький баг превращается в стихийное бедствие. Ошибочное проектирование хранения данных вызывает коллизии. Плохая работа с сетью может и вообще привести к падению серверов.
Вывод: Чем шире аудитория, тем выше требования к стабильности и предсказуемости.
3️⃣ Масштаб определяет выбор технологий
С ростом аудитории меняются и приоритеты.
Мало пользователей, значит можно выбирать модные технологии.
Много пользователей, то уже важнее предсказуемость, тестируемость, производительность и дешевые в поддержке решения.
Вывод: системы, работающие на миллионах пользователей, почти всегда строятся на простых, проверенных и надёжных решениях.
На тренировках по мобильному систем дизайну мы отдельно остановились на вопросе "Почему важно учитывать размер аудитории". Также нам подробно объяснила экс-тимлид Яндекса.
Грубо говоря, это одно из главных требований реального проектирования. Об этом много можно рассуждать, но лучше всего это сформулировано в книгах Mobile System Design и Building Mobile Apps at Scale.
Рост аудитории кардинально влияет на требования к архитектуре, качеству кода и техрешениям. Чем больше пользователей — тем выше цена любой ошибки, а значит и требования к зрелости продукта.
Все авторы выделяют такие набухающие блоки:
1️⃣ Один бинарник
Маленькое приложение с небольшой аудиторией может жить даже с херовым кодом. Но при росте аудитории любая ошибка превращается в массовую проблему.
Мобилки не обновляются мгновенно как веб. Если у тебя 500 000 пользователей, у каждого может быть разная версия, и каждая ошибка живет на устройстве долго.
Вывод: глубокое проектирование и четкая система релизов становятся критичными
2️⃣ Чем больше пользователей, тем дороже ошибки
Building Mobile Apps at Scale пишет: с ростом аудитории растет и команда, а значит растет и цена ошибок.
Вывод: Чем шире аудитория, тем выше требования к стабильности и предсказуемости.
3️⃣ Масштаб определяет выбор технологий
С ростом аудитории меняются и приоритеты.
Мало пользователей, значит можно выбирать модные технологии.
Много пользователей, то уже важнее предсказуемость, тестируемость, производительность и дешевые в поддержке решения.
Вывод: системы, работающие на миллионах пользователей, почти всегда строятся на простых, проверенных и надёжных решениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Продолжаю серию постов про масштабирование. В прошлый раз мы обсуждали размер аудитории, сейчас про кол-во регионов.
Иногда встречаются крупные приложения, которые при этом работают только в одном регионе. Классический пример — Авито. Изначально он был частью OLX, где действовал простой принцип "одна страна — одно приложение". Отсюда и особенности архитектуры: отсутствие локализации, все тексты зашиты по-русски и в клиенте, и на сервере. Поэтому сегодня для них отдельный вызов — добавить поддержку ориентации и полноценной локализации в продукт, которому уже почти 10 лет.
Есть и другое распространенное заблуждение среди разработчиков будто некоторые продукты практически не имеют конкуренции. Такси, доставка еды, продажи б/у вещей. Кажется, что они существуют сами по себе и могут позволить себе любые архитектурные решения.
На деле все иначе. При проектировании мобильных приложений важно учитывать особенности сети и регионов, где вы ищете аудиторию. Особенно в больших странах вроде России, где покрытие нестабильное, а часть сервисов регулярно блокируется. Где VPN уже что-то обязательное. Или в странах вроде Пакистана, где средняя скорость мобильного интернета значительно ниже, чем в центре Москвы.
Зачем вообще оценивать скорость интернета?
Вы удивитесь, сколько на самом деле зарабатывают международные продукты. Иногда бывает так, что хорошо известное вам приложение под другим брендом или в виде локального клона в другой стране приносит не меньше, а то и больше денег. И вот вы выходите на новый рынок, а заказчик прямо говорит: "Наш конкурент в Пакистане загружает страницу за 4 секунды. Нам нужно сделать за 2".
В этот момент все, что вы тестировали и проектировали на своих дата-центрах, быстрых провайдерах и удобных VPN’ах, нужно переосмыслить под реальные условия этой страны. Потому что продукт будет жить не в вашей комфортной сетевой среде, а в их со своей задержкой, скоростью и ограничениями.
Tjeerd в Mobile System Design подчеркивает:
мобильные приложения — это работа в условиях постоянно меняющейся сети: Wi-Fi > LTE > EDGE > offline > captive Wi-Fi > обратно.
Это влияет на:
Скорость сети диктует структуру API и политику запросов. Cлишком много мелких запросов, которые убивают слабую сеть и создают network storm для бэка. Быстрый интернет это оптимистичное допущение. Проектировать надо под худший сценарий. Оффлайн режим становится обязательным, а не опцией
Высокая латентность и низкая пропускная способность главные причины несогласованности данных, таймаутов и ошибок.
Скорость сети системное ограничение, которое меняет архитектуру всего мобильного приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
1 7 6
А этот опыт с нами сейчас в одной комнате? 🥺
⌨️ Загрузите своё резюме и бот оценит его по баллам, отметит слабые места и даст рекомендации.
А ещё сразу после проверки можно скачать гайд «Идеальное резюме» с подсказками по структуре, оформлению и навыкам. Функция доступна до 10 раз на пользователя.
А ещё сразу после проверки можно скачать гайд «Идеальное резюме» с подсказками по структуре, оформлению и навыкам. Функция доступна до 10 раз на пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
Понравился пост у ребят, где они разбирали, какие алгоритмы работают под капотом Diiffable. Вдохновившись решил сделать похожую рубрику, но с другим ракурсом. Хочу искать алгоритмы, которые спрятаны там, где мы обычно о них не думаем.
Почему это важно? Во многом наша работа держится на готовых фреймворках, и это нормально. Но когда понимаешь, как именно они устроены внутри, появляется совсем другой уровень инженерного мышления:
По шагам DiffableDataSource решил пройтись упрощенно по Identity. SwiftUI выглядит простым. Меняем состояние и UI апдейтится. Но под капотом работает довольно интересная система сравнения
Она решает два вопроса:
Подробнее об этом мы писали несколько постов.
Какие алгоритмы помогают закрепить знания? SwiftUI не раскрывает свои алгоритмы полностью. Их можно собрать по кускам и лишь догадываться. Но есть три опоры, которые очень хорошо помогают понять его работу:
Алгоритм Майерса.
Этот алгоритм основа CollectionDifference. Находит минимальную последовательность изменений между двумя массивами.
Алгоритм Пола Хеккеля.
Используется в старом и забытом IGListKit. Помогает эффективно сравнивать большие списки и почему стабильные id — критичны.
Dependency Graph.
Помогает понять как SwiftUI выбирает минимальный набор обновлений. По сути это то, чем является AttributeGraph.
Полезные ссылки:
- репо DifferenceKit
- A fast and flexible O(n) difference algorithm framework for Swift collection
- Modern cell configuration
- Implementing modern collection views
Please open Telegram to view this post
VIEW IN TELEGRAM
2 5 4 2
Тизер выпуска про аи инструменты на реальном проекте.
Все про AI инжениринг (согласовано с безопасниками)
Все про AI инжениринг (согласовано с безопасниками)
1 11 5
Ежемесячное голосование: Какая тема месяца на этом канале?
Anonymous Poll
25%
Язык Swift и его устройство
23%
Advanced UIKit
32%
Advanced SwiftUI
21%
Advanced SC
22%
Все про многопоточность (GCD, SC, Operation)
37%
Проектирование реальных фич
29%
AI на практике
14%
Кроссплатформа и все по-соседству iOS
23%
Необычные задачи на практике
3%
Другое
Еще одна традиция канала — ежегодно делиться итогами в Яндексе музыке. По праву лучшее музыкальное приложение СНГ (а может и мира), но постоянно лежат при релизе итогов.
Хоть я уже ушел окончательно в Apple Music (последний гвоздь был отсутствие ost плейлиста охеренной the Dispatch), но рекомендации в Яндекс.Музыке - лучшие.
Делитесь своими
Хоть я уже ушел окончательно в Apple Music (последний гвоздь был отсутствие ost плейлиста охеренной the Dispatch), но рекомендации в Яндекс.Музыке - лучшие.
Делитесь своими
Mobile System Design: Low-connectivity mode. Проблемы покрытия сети и их решения
Определить, что человек работает в СНГ реалиях, очень просто. Стоит только упомянуть про массовые блокировки интернета. На удивление об этом мало кто пишет.
В прошлом посте я уже затрагивал тему мобильной сети. Но сейчас вся страна столкнулась с новой реальностью: с июня по регионам идут масштабные ограничения мобильной связи.
Это новая среда выживания. Сначала удаление аппок из стора, отключение GPS, просадки мобильной сети, перебои в LTE. Хотели hardcore mode? Выживание в спартанских условиях.
Это чувствуют таксисты, курьеры, продавцы маркетплейсов. Весь малый и сервисный бизнес. Но он старается адаптироваться. Придумывает обходные механики, внедряет BDUI, работает с вайтлистами, настраивает работу под локальные Wi-Fi точки, добавляет fallback-режимы. Как можно решить такую проблему?
Вот варианты:
1️⃣ Ограничение запросов/ответов
Грузить с сети только критические данные. Так я разок сократил время загрузки контекта в 2 раза, при херовом интернете. Особенно часто на него ругались важные заказчики когда летали в самолетах или были в странах с херовым интернетом. Показывая "а вот в телеграме все лучше!". Эх если бы мне платили столько как в телеграме...
2️⃣ Offline First
Я слышал тот же WB, пока конкуренты делают ставку на BDUI, решил перейти на offline first. Мне честно сложно пока понять логику, но вроде попробовал собрать.
- Когда интернет нестабилен апка кэшируют данные локально
- позволяют работать хотя бы частично офлайн
- синхронизируются при восстановлении сети
Так мы не упускаем юзера, все его поведения сохраняются локально, а отправляется сразу с подключением к нормальной сети (или делится на чанки и постепенно)
3️⃣ Резать медиа файлы
Мы уже отдельно проходили как оптимизирует трафик тот же запретограм. Вкратце:
- Prefetching
- Chuncking
- Размеры под разные соединения
4️⃣ Разделяй критичность и второстпенность
Важный навык, которому учит систем дизайн — это уметь приоритизировать. Сначала грузим минимум для отображения экрана. Потом остальное догружаем фоном.
Поделитесь своими рекомендациями как выживать в текущем мире.
Определить, что человек работает в СНГ реалиях, очень просто. Стоит только упомянуть про массовые блокировки интернета. На удивление об этом мало кто пишет.
В прошлом посте я уже затрагивал тему мобильной сети. Но сейчас вся страна столкнулась с новой реальностью: с июня по регионам идут масштабные ограничения мобильной связи.
Это новая среда выживания. Сначала удаление аппок из стора, отключение GPS, просадки мобильной сети, перебои в LTE. Хотели hardcore mode? Выживание в спартанских условиях.
Это чувствуют таксисты, курьеры, продавцы маркетплейсов. Весь малый и сервисный бизнес. Но он старается адаптироваться. Придумывает обходные механики, внедряет BDUI, работает с вайтлистами, настраивает работу под локальные Wi-Fi точки, добавляет fallback-режимы. Как можно решить такую проблему?
Вот варианты:
1️⃣ Ограничение запросов/ответов
Грузить с сети только критические данные. Так я разок сократил время загрузки контекта в 2 раза, при херовом интернете. Особенно часто на него ругались важные заказчики когда летали в самолетах или были в странах с херовым интернетом. Показывая "а вот в телеграме все лучше!". Эх если бы мне платили столько как в телеграме...
2️⃣ Offline First
Я слышал тот же WB, пока конкуренты делают ставку на BDUI, решил перейти на offline first. Мне честно сложно пока понять логику, но вроде попробовал собрать.
- Когда интернет нестабилен апка кэшируют данные локально
- позволяют работать хотя бы частично офлайн
- синхронизируются при восстановлении сети
Так мы не упускаем юзера, все его поведения сохраняются локально, а отправляется сразу с подключением к нормальной сети (или делится на чанки и постепенно)
3️⃣ Резать медиа файлы
Мы уже отдельно проходили как оптимизирует трафик тот же запретограм. Вкратце:
- Prefetching
- Chuncking
- Размеры под разные соединения
4️⃣ Разделяй критичность и второстпенность
Важный навык, которому учит систем дизайн — это уметь приоритизировать. Сначала грузим минимум для отображения экрана. Потом остальное догружаем фоном.
Поделитесь своими рекомендациями как выживать в текущем мире.
Forwarded from Mobile Development by AppTractor
This media is not supported in your browser
VIEW IN TELEGRAM
Конкурс Telegram для iOS-разработичков 2025
Telegram проводит конкурс для iOS-разработчиков, задача которого — внедрить эффекты Liquid Glass в старые версии iOS. Призовой фонд - 50,000 долларов. Срок - до 26 декабря.
Задача
Реализуйте в Telegram для iOS кастомные версии некоторых эффектов Liquid Glass и соответствующие интерфейсные потоки, чтобы эти эффекты работали в iOS 18 и более старых версиях.
Вы должны точно воспроизвести анимацию и внешний вид (подсветка при нажатии, увеличение, отскок и растяжение) стеклянных элементов. Это особенно относится к:
• Панели вкладок
• Кнопкам
• Переключателям и слайдерам
Поддержка iOS 18 является обязательной. Не допускается использование сторонних фреймворков или новых зависимостей. Изменения не должны негативно влиять на производительность, использование памяти или стабильность приложения.
Telegram проводит конкурс для iOS-разработчиков, задача которого — внедрить эффекты Liquid Glass в старые версии iOS. Призовой фонд - 50,000 долларов. Срок - до 26 декабря.
Задача
Реализуйте в Telegram для iOS кастомные версии некоторых эффектов Liquid Glass и соответствующие интерфейсные потоки, чтобы эти эффекты работали в iOS 18 и более старых версиях.
Вы должны точно воспроизвести анимацию и внешний вид (подсветка при нажатии, увеличение, отскок и растяжение) стеклянных элементов. Это особенно относится к:
• Панели вкладок
• Кнопкам
• Переключателям и слайдерам
Поддержка iOS 18 является обязательной. Не допускается использование сторонних фреймворков или новых зависимостей. Изменения не должны негативно влиять на производительность, использование памяти или стабильность приложения.
Forwarded from YDC — Pizza Powered iOS (Kirill Smirnov)
Мобильное приложение всегда оказывается на устройстве пользователя — а значит, потенциально доступ к нему может быть и у злоумышленника. Это значительно повышает требования к безопасности выпускаемых продуктов, поскольку в коде приложений неизбежно содержатся конфиденциальные данные, которые используются разработчиками. Соответственно, обязательным условием становится защита секретов на клиенте от утечек.
В статье, постарались рассказать:
Материал подготовлен по мотивам доклада на Podlodka iOS Crew, посмотреть можно здесь
#L #CS #encryption #obfuscation
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Секреты на клиенте: как снизить вероятность утечки с нуля до почти нуля
Мобильное приложение всегда оказывается на устройстве пользователя — а значит, потенциально доступ к нему может быть и у злоумышленника. Это значительно повышает требования к безопасности выпускаемых...
Профилирование и Перфоманс метрики
Последнее время я твердо убедился — верить можно только метрикам. Особенно с учетом дефицита устройств и ресурсов тестеров, разрабов это может быть критично.
В Авито было правило — не трекать перфоманс на дебаг сборках и обычном тестировании. Там этим занимается отдельная платформенная команда, которая создала очень сложную систему.
Эта система собирает локально метрики из устройств реальных пользователей и отдает серверу. Если перфоманс в АБ тесте упал, то продуктовые эксперименты блокируются к релизам. Так ты четко и ясно понимаешь объективность и не гадаешь упадет ли перф в релизе.
Такую систему мало где видел, поэтому решил изучить открытые third party библиотеки:
1️⃣ Xcode Performance and metrics
Плюсы: Глубокий анализ CPU, памяти, графики в реальном времени; бесплатный и интегрирован в Xcode.
Минусы: Требует подключенного устройства; не для production-мониторинга
2️⃣ MetricKit
Плюсы: MetricKit работает пассивно в продакшене. Уже лучше для релиза
Минусы: Отчеты передаются только раз в сутки
3️⃣ New Relic Mobile
Плюсы: Облачный мониторинг в проде, можно следить за трендами версий и делать сравнения.
Минусы: Платный
4️⃣ Firebase Performance
Плюсы: Неплохой базовый бесплатный функционал
Минусы: Мало инструментов
Расскажите какие необычные инструменты для профилирования и метрик юзаете вы? Пишите ли сами или используете готовые решения?
Последнее время я твердо убедился — верить можно только метрикам. Особенно с учетом дефицита устройств и ресурсов тестеров, разрабов это может быть критично.
В Авито было правило — не трекать перфоманс на дебаг сборках и обычном тестировании. Там этим занимается отдельная платформенная команда, которая создала очень сложную систему.
Эта система собирает локально метрики из устройств реальных пользователей и отдает серверу. Если перфоманс в АБ тесте упал, то продуктовые эксперименты блокируются к релизам. Так ты четко и ясно понимаешь объективность и не гадаешь упадет ли перф в релизе.
Такую систему мало где видел, поэтому решил изучить открытые third party библиотеки:
1️⃣ Xcode Performance and metrics
Плюсы: Глубокий анализ CPU, памяти, графики в реальном времени; бесплатный и интегрирован в Xcode.
Минусы: Требует подключенного устройства; не для production-мониторинга
2️⃣ MetricKit
Плюсы: MetricKit работает пассивно в продакшене. Уже лучше для релиза
Минусы: Отчеты передаются только раз в сутки
3️⃣ New Relic Mobile
Плюсы: Облачный мониторинг в проде, можно следить за трендами версий и делать сравнения.
Минусы: Платный
4️⃣ Firebase Performance
Плюсы: Неплохой базовый бесплатный функционал
Минусы: Мало инструментов
Расскажите какие необычные инструменты для профилирования и метрик юзаете вы? Пишите ли сами или используете готовые решения?
Как фиксить AI-генерейтед Swift код
Эту статью уже обсудили и на линкедине, и в тг, и в тв.
Генерация кода с АИ стала новым скиллом. Когда ты раньше точечно и аккуратно писал в ручную небольшой, но выверенный код, то сейчас игра поменялась.
В день ты можешь увидеть десятки вариантов кода и тут из-за объемов — качество может сильно страдать. Нужно переучиваться и адаптироваться. Этот этап говнокодерства должны пройти все, как прошли когда-то с ручным. И возможно, не всем далеко твой код будет нравиться. Даже обученный по текущей кодовой базе проекта.
Еще больше усложняет то, что Swift код от ИИ в разы хуже того же Kotlin'а, Go, Python'а из-за их популярности. В этой статье автор дает лайфхаки как фиксить код от аишек:
- Если проект неправильно настроен на rules, то АИ могут игнорировать общий стиль и правила.
- Проблемы с асинхронностью и управлением потоками. Часто он генерит GCD, чем Swift Councurrency
- АИшки редко думают о корнеркейсах. Здесь их нужно поправлять и давать доп условия.
- Пиши тесты и не стесняйся их использовать
Ну и главное правило — использовать аи как помощника, а не как источник истины.
Эту статью уже обсудили и на линкедине, и в тг, и в тв.
Генерация кода с АИ стала новым скиллом. Когда ты раньше точечно и аккуратно писал в ручную небольшой, но выверенный код, то сейчас игра поменялась.
В день ты можешь увидеть десятки вариантов кода и тут из-за объемов — качество может сильно страдать. Нужно переучиваться и адаптироваться. Этот этап говнокодерства должны пройти все, как прошли когда-то с ручным. И возможно, не всем далеко твой код будет нравиться. Даже обученный по текущей кодовой базе проекта.
Еще больше усложняет то, что Swift код от ИИ в разы хуже того же Kotlin'а, Go, Python'а из-за их популярности. В этой статье автор дает лайфхаки как фиксить код от аишек:
- Если проект неправильно настроен на rules, то АИ могут игнорировать общий стиль и правила.
- Проблемы с асинхронностью и управлением потоками. Часто он генерит GCD, чем Swift Councurrency
- АИшки редко думают о корнеркейсах. Здесь их нужно поправлять и давать доп условия.
- Пиши тесты и не стесняйся их использовать
Ну и главное правило — использовать аи как помощника, а не как источник истины.
Hacking with Swift
What to fix in AI-generated Swift code
As AI-assisted coding increases in popularity, here are a handful of things I would suggest you look out for – and what to replace them with instead.