🧙Как задавать правильные вопросы на систем дизайн?
Иногда к решению систем дизайна мы подходим также, как при решении задач по алгоритмам. Изолируем задачу от реальности и решаем задачу в ваакуме.
Основная ошибка тут в том, что алгоритмы нам встречаются только на литкоде и имеют зачастую только один правильный ответ. В то время как дизайн систем это открытые вопросы.
Что самое интересное, системы, которые нас просят спроектировать, уже существуют и мы пользуемся ими каждый день. Это банковские транзакции, Dropbox или Google Drive, сервисы для заказа такси, еды и продуктов.
Уникальное преимущество системного дизайна в том, что у нас есть возможность посмотреть на систему глазами пользователя. Чтобы задавать правильные functional и non-functional вопросы, необходимо поставить себя на место пользователя.
Например, нас попросили спроектировать мессенджер. Самые первые вопросы, которые приходят в голову:
🔸 Только текстовые сообщения или картинки и видео тоже?
🔸 Только 1:1 чаты или групповые чаты тоже?
Хотя это хорошие вопросы, они сконцентрированы на базовом функционале — отправке и получении сообщений. Мы строим гипотезы о том, что может быть важно пользователю, и это влияет на наши решения. Но вместо того чтобы гадать, лучше использовать свой собственный опыт.
Например вспомните или представьте в голове, как человек будет пользоваться вашей системой.
🔸 Пропал интернет. Могу ли я отправлять сообщения?
🔸 Даже если я не онлайн, мне приходят уведомления, когда кто-то пишет мне. Нужно ли поддерживать пуш уведомления?
🔸 Мне удобно использовать телефон и ноутбук для отправки сообщений. Какие клиенты будут у нашей системы?
🔸 Я иногда ищу людей в телеграмме. Нужно ли реализовывать поиск людей, групп?
🔸 Я иногда ищу сообщения по всем моим чатам. Нужно реализовывать поиск по тексту?
🔸 В моем мессенджере показываются счетчики непрочитанных для каждого чата. Нужно ли реализовывать их?
🔸 Мне норм если мои сообщения дойдут с задержкой. Eventual consistency?
✔️Мораль: Всегда представляйте в голове, как вы будете пользоваться вашей системой!
Это поможет задавать правильные вопросы и фокусироваться на самых важных аспектах задачи.
Иногда к решению систем дизайна мы подходим также, как при решении задач по алгоритмам. Изолируем задачу от реальности и решаем задачу в ваакуме.
Основная ошибка тут в том, что алгоритмы нам встречаются только на литкоде и имеют зачастую только один правильный ответ. В то время как дизайн систем это открытые вопросы.
Что самое интересное, системы, которые нас просят спроектировать, уже существуют и мы пользуемся ими каждый день. Это банковские транзакции, Dropbox или Google Drive, сервисы для заказа такси, еды и продуктов.
Уникальное преимущество системного дизайна в том, что у нас есть возможность посмотреть на систему глазами пользователя. Чтобы задавать правильные functional и non-functional вопросы, необходимо поставить себя на место пользователя.
Например, нас попросили спроектировать мессенджер. Самые первые вопросы, которые приходят в голову:
🔸 Только текстовые сообщения или картинки и видео тоже?
🔸 Только 1:1 чаты или групповые чаты тоже?
Хотя это хорошие вопросы, они сконцентрированы на базовом функционале — отправке и получении сообщений. Мы строим гипотезы о том, что может быть важно пользователю, и это влияет на наши решения. Но вместо того чтобы гадать, лучше использовать свой собственный опыт.
Например вспомните или представьте в голове, как человек будет пользоваться вашей системой.
🔸 Пропал интернет. Могу ли я отправлять сообщения?
🔸 Даже если я не онлайн, мне приходят уведомления, когда кто-то пишет мне. Нужно ли поддерживать пуш уведомления?
🔸 Мне удобно использовать телефон и ноутбук для отправки сообщений. Какие клиенты будут у нашей системы?
🔸 Я иногда ищу людей в телеграмме. Нужно ли реализовывать поиск людей, групп?
🔸 Я иногда ищу сообщения по всем моим чатам. Нужно реализовывать поиск по тексту?
🔸 В моем мессенджере показываются счетчики непрочитанных для каждого чата. Нужно ли реализовывать их?
🔸 Мне норм если мои сообщения дойдут с задержкой. Eventual consistency?
✔️Мораль: Всегда представляйте в голове, как вы будете пользоваться вашей системой!
Это поможет задавать правильные вопросы и фокусироваться на самых важных аспектах задачи.