Не знаю как было раньше, но в начале 00-х информацию собирали по крупицам, реально изучали язык, возможности, чтобы написать программу. Программу, которая работает, и полезна. Больше от неё не требуется, она просто должна стабильно выполнять свою задачу.
Сейчас тенденция совершенно другая. Весь мир разработки оброс кучей.. “мусора” (хотел написать другое слово), который превратил разработку программ в постоянные битвы между управлением, разработкой, тестированием, процессами, и в целом программный продукт стал восприниматься как вещь с завода, с конвейера, а про пользователя почти всегда забывают.
Так вот, простое правило – всё это для людей. Вся эта шелуха про управление, процессы, коллаборацию, всё это в конечном итоге должно приносить пользу конечным пользователям. Если на выходе получается продукт, который глючит или им неудобно пользоваться, то в процессах или в кадрах есть проблемы.
Фразы “для людей” и “приносить пользу”, это значит что человек должен открыть программу, понимать как при её помощи он может решить свои задачи (и решать их), и в любой момент её использования не быть потерянным в ней, не получить дискомфорта от использования, а быть постоянно в курсе что происходит.
Плохой пример – открыли форму авторизации, ввели наш логин и пароль, жмакнули “Войти”, и получили ошибку что логин и пароль не найден. О блин, так логин и пароль же мой?.. а где, куда, почему?.. а всё потому что разработчики не обработали ошибки авторизации, а просто лупанули один текст ошибки в UI на любую ошибку которая прилетит с сервера. И поэтому отсутствие интернета, долгие запросы, проблемы с прокси, падение сервера, деактивация аккаунта, да и миллион других сценариев, всё это работает неправильно. Человек откроет, не поймет, закроет. Ну напишет в поддержку. Хорошо это? Конечно нет. Нормально ли это? В современных процессах часто да, просто потому что “а давайте сделаем на одну фичу больше вместо обработки исключений”.
Еще один плохой пример, лично сталкивался, бесит – открываем интернет-магазин, набираем кучу товаров, пытаемся заказать, и получаем сообщение что требуется регистрация. Не вопрос, сейчас зарегистрируемся и оформим заказ. Регистрируемся, переходим в корзину… а там пусто. Финито. То есть теперь поднимай историю, ищи товары которые просматривал, снова выбирай параметры, добавляй в корзину. Ладно если там 1-2 товара, а если там 10? 50? Я затаривался аптекой во всем известной сети, выбрал 20 позиций, и поймал этот сценарий. Ничего хорошего в этом нет, пользователи страдают от такой работы программы.
Причем, поясню, под программой я имею ввиду не десктопное приложение, или под мобильные устройства, а вообще любой софт, включая веб-приложения, то есть любые сайты которыми мы пользуемся.
Теперь в бочку дегтя добавим ложку меда, приведем хороший пример. Мне лично нравится система загрузки фото. Нажимаем кнопку, видим файловый менеджер, выбираем фотку, и дальше должна начаться загрузка фото. Кажется что это довольно простой сценарий, однако:
-
Фотки бывают не подходящего размера
-
Фотки бывают не тех форматов.
-
Фотки бывают не тех пропорций.
-
Фотки бывают тяжелыми (как файл).
-
Фотка может быть битой.
-
Фотка может быть подделкой (файл).
-
Фотка может не загрузиться по причинам на стороне пользователя.
-
Фотка может не загрузиться по причинам на сервере сервера.
-
Фотка может не отобразиться после загрузки.
-
Фотка может быть загружена не полностью при попытке её отобразить.
-
Загрузка просмотра фото может зависнуть по сетевым причинам.
11 пунктов, не считая факта что пункты 7-8 можно развернуть в еще целую кучу сценариев. А еще загрузка фото может быть сопряжена с другими продуктовыми сценариями, из серии продолжения загрузки при потере соединения, при перезагрузке вкладки, при ошибках загрузки, ретраи (повторные попытки) загрузки фоток, и многое другое.
Всё это должно быть правильно обработано. Я видел сервисы которые реально всё это нормально обрабатывают. Ну, большую часть. Это очень круто, когда ты можешь отправить на загрузку 100 файлов за раз, и не переживать что из-за глюка в приложении ты потеряешь данные, состояние загрузки, историю, или еще что, и всегда уверен что в любом случае ты по максимуму завершишь загрузку. Именно поэтому я использую это приложение.
На практике обычно не так. Дело в том, что чтобы загрузка фото работала, при условии что всё работает штатно, у пользователя стабильный интернет, сервер работает вечно и без падений, провайдер огонь, и так далее – достаточно лишь провалидировать файл, отправить на сервер. а дальше всё, ждем ответа сервера полные уверенности что всё будет хорошо. Так себе это представляет бизнес, и когда управлению скажут что оно работает, но что-то может пойти не так, и на обработку этого не так надо еще +N дней, то есть увеличить время разработки фичи, например, в 2 раза, то обычно чаша весов склоняются в сторону “если не должно быть, в теории, то и не делаем, не критично”. И вот это не критично выливается в удобство использования и многочисленные негативные возгласы в отзывах на продукт.
Вобщем, думаю вы поняли о чем речь. Всё это следствия подхода к разработке продукта, как к конвейеру на заводе. Задача бизнеса выпустить и собрать сливки, заработать денег. Пользователи же наоборот, хотят пользоваться удобным и работающим продуктом. Так вот, я думаю что такие задачи бизнеса это прямое противоречие интересам пользователя, если является основной целью бизнеса когда они думают про выпуск продукта. В большинстве случаев, на моей практике, компании именно стремятся выпустить, начать зарабатывать, но совершенно забывают ради кого и чего они это делают. Вот это и есть проблема. Если раньше люди (подчеркну, отдельные люди) писали программы (winrar, виктория, куча другого старого офигенного софта), импровизировали, пытались сделать удобно, хорошо, и не парились о том сколько они на этом заработают, потому что это прежде всего творчество, сейчас наоборот, программа воспринимается как продукт на полке магазина – главное выпустить и продать.
Теперь немного выдохнем (фух). Подумаем как с этим быть разработчикам.
Всё понятно, есть задачи, есть цели компании, мейлстоуны, надо сделать 100 фичей за 3 месяца, и всё это выпустить к релизу пропиаренному маркетингом. Что я могу сказать.. Если прямо, то рыба гниет с головы. Разработчик может 1000 раз быть прав, стараться сделать хорошо, но решения принимает не он. Даже если встать в позу зю и сказать “или так и сделаем хорошо, или никак”, скорее всего будет эскалация с последующей заменой разработчика. Поэтому обычно все разработчики всё понимают, но делают как надо бизнесу.
Бывает и другая ситуация, и честно говоря, сильно чаще. Это когда сам разработчик не понимает что фича не доделана. Он берет требования, делает как написано в бумажке, а то что там отвалится, или как это будут поддерживать другие разработчики, или все ли сценарии обработаны, он не продумал. Часто это нехватка опыта, особенно заметно у начинающих или средних (какое странное слово) разработчиков. Здесь всё просто – просто спрашивайте себя “что может здесь пойти не так?”, и ищите сценарии при которых что-то может отвалиться. Это и есть исключительные сценарии работы программы. Кроме того, отличный вопрос это «А что здесь может потребоваться пользователям еще?». И еще один отличный способ найти пропущенные исключительные сценарии, это просто пройти по всем путям кода в данном участке программы, и проследить необработанные пути. Обычно это или отсутствие else, или switch без дефолтного кейса, потерянная обработка события, и так далее.
Лично мое мнение, что разработчики почти бессильны в условиях когда управление диктует свои приоритеты и правила, и именно управление выбирает набор того что делаем, или не делаем (реализуем) в программе, на уровне реализации фичей, а не верхнеуровнево из серии “хочу систему регистрации”. Именно поэтому весь этот текст по большей части для управленцев, особенно для технарей которые управляют своими командами, и менеджерам – не забывайте что программа в конечном итоге должна помогать пользователям решать их задачи. Это единственная причина почему они используют вашу программу. А комфорт от использования, удобство, обработки ошибок, всё это в сумме создает опыт использования, и если он положительный, то люди придут именно к вам, а не к вашим конкурентам. Поэтому принимайте решения из расчета на реальных людей, ваших пользователей, а не на бюджеты, сроки, релизы, проблемы в процессах, давление сверху. Всё это пути к хреновым продуктам.
Данным текстом выражаю две вещи:
-
Разработчики, не пишите код для того чтобы написать код. Творите программу, пишите для людей, думайте про людей, это конечная цель в разработке продукта. Документы, дизайны, и вся остальная шелуха, всё это лишь инструменты производства, а не панацея. Думайте про использование продукта, думайте со стороны пользователя, и делайте продукты лучше. Не ориентируйтесь на то что написано в документах как на догму, всё переосмысливайте, перечитывайте, изучайте продукт, сценарии использования, исключительные сценарии, и результатом своей работы помогайте пользователям.
-
Управленцы, всё что вы делаете должно иметь целью облегчить жизнь пользователям в их задачах. Процессы, давление сверху, релизы, маркетинг, всё это ходит вокруг идеи выпуска качественного продукта, и поэтому подгоднять процессы, требования, бюджеты, сроки, лишь бы успеть и выпустить, это движение в обратную сторону. Это как жать педаль газа и тормоза одновременно, и зависимости от того что сильнее, туда и приедете. Так нельзя. Движение должно быть только максимально вперед, даже если релиз будет позже и дороже.
У меня всё.
Всем спасибо!
ссылка на оригинал статьи https://habr.com/ru/post/706968/
Добавить комментарий