Чинить баги по TDD

Один из кейсов, которые я рассмотрю на своём мастер-классе 26 октября (https://tdd.timepad.ru/event/1074439/?utm_source=telegram&utm_medium=messenger&utm_campaign=mypost-bugs) — это исправление багов по TDD.

Вот прилетает к нам задача, скажем «Жму на кнопку — не работает». Обычно мы чиним такие баги весьма тупо — поднимаем фронт и бек, придумываем гипотезу, и начинаем дебажить: вносим исправление и жмём на кнопку. Если заработало — отлично, если нет — просто перебираем дальше гипотезу за гипотезой. Иногда мы перебираем гипотезы настолько беспорядочно, что даже не убираем следы предыдущих попыток.

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

Правильный процесс выглядит так: открываем контроллер в API, куда ходит кнопка, а дальше ставим под сомнение каждый нижележащий метод, проговаривая про себя гипотезы, к примеру: «я сомневаюсь, что метод get_users() не возвращает неактивных пользователей». Если сразу не находим теста, который доказывает обратное — пишем свой. Если тест падает — отлично, у вас уже есть тест, и остаётся только написать код. Если написанный тест не падает — git checkout --, и ставим под сомнение следующий метод.

Такой процесс заставляет вас тестировать баги изолированно — вы никогда не натолкнётесь ещё на один баг, который создали во время предыдущих бесплодных попыток. А ещё вы никогда не отправите в прод неработающее говно, потому что у вас нет состояния «кажется всё заработало» — всё или заработало, или нет.

Мягкие навыки для продуктовой работы

Канал читают совершенно разные люди, у которых разные рабочие задачи. Кто-то программирует, кто-то в фигме/скетче дизайнерит, кто-то от цифр балдеет, кто-то пишет статьи — это всё профессиональные навыки, нужные для решения конкретных задач или hard skills.

Но есть ещё личные качества или мягкие навыки, они же soft skills. Глобально выделяют довольно капитанские навыки: умение работать в команде, гибкость, эмпатия, широта взглядов, стрессоустойчивость, управление временем и т.п.
Я не люблю слово "капитанские", но здесь оно прекрасно подходит — очевидно же, что мало кому нужен закостенелый угрюмыш, не умеющий разговаривать с людьми.

Мягкие навыки остаются с человеком и могут применяться, даже при кардинальной смене hard skills. Например, если в продуктовой команде программист стал дизайнером, то его hard skills изменились глобально, а soft skills при этом нужны те же самые, но, возможно, в других пропорциях.

Это было краткое вводное в понятия hard/soft skills.

А теперь к делу — какие же мягкие навыки нужны тем, кто работает в продуктовых командах?
Помимо очевидных, я бы выделил следующий ТОП-5:
1. Любопытство и тяга к знаниям
2. Умение доставать нужную информацию
3. Решительность и находчивость
4. Структурирование информации
5. Умение вовремя остановиться

Могу рассказать по каждому навыку с примерами из опыта- почему навык важен и как его проверить/проявить.
Надо?

Необратимые действия

Есть действия, выполнение которых необратимо. Ну например,

  • отправка e-mail, СМС и прочего;
  • удаление чата;
  • удаление профиля и т.п.

Обычно перед таким действием система спрашивает: Вы уверены?
Но люди не читают, не думают наперёд, торопятся и всё равно делают необратимое действие, а потом ищут способ восстановить.
На одном b2b проекте представитель заказчика просил добавить в систему двойной вопрос на удаление:
- Вы уверены?
<Да>
- Вы точно уверены?

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

Но есть действия, которые пользователь выполняет часто и "задалбывать" его вопросами про уверенность — лишний шаг.
Приличные продукты для таких необратимых действий делают возможность оперативной отмены по горячим следам.
Например, при отправке письма в gmail можно отменить отправку по-быстрому (временем отмены можно управлять).
Или при удалении чата в Телеге можно отменить удаление в течение 5 секунд.

Так вот, в gmail возможность отмены отправки работает в стрессовом для пользователя режиме: если ты хочешь отменить, то тянешь курсор к этой плашке в режиме ракеты, боясь опоздать.
А в телеге работает приятно — видно таймер и ты понимаешь, сколько осталось времени для отмены.

А выводы по необратимым действиям такие:
1. Если действие можно сделать обратимым — сделайте его таким. Особенно полезно в b2b-проектах, когда случайное удаление записи может приводить к тому, что люди готовы бэкап развернуть лишь бы восстановить.

2. Если действие необратимо и вы решили спрашивать подтверждение — спрашивайте максимально чётко с донесением последствий действий. У меня есть отдельная мини-заметка (https://telegra.ph/UX-neobratimyh-processov--pro-udalenie-04-17) про это.

3. Если делаете возможность отмены необратимого действия — покажите пользователю, сколько у него есть времени для отмены.

Производственное мышление

Производственное мышление — страшная штука если оно влечет за собой отрицание других систем компании: менеджмент не нужен, маркетинг бесполезен, продажи = впаривание, мотивация и другие высокие материи — бред.

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

Итог такого подхода: бессистемное восприятие компании. Отсутствие жизненно необходимых отделов в компании. Недостаток компетенций за пределами производства. И неуспешность компании как следствие.

Лечить это сложно. Если человек уверен, что работать можно только руками, а не головой — переубедить почти нереально. Можно попробовать расширить понимание технологического цикла. Ведь это не только изготовление изделий или оказание услуг. Это более длинная цепочка от анализа рынков до продвижения и продаж. Дизайн, маркетинг, продажи — просто участки производственной цепи.

Сожми окошко

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

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

А решается очень просто. Нужно подгонять окошко текстового редактора, пока текст не станет такой же ширины, какой будет у пользователя. Или можно вставить в столбец в том же ворде и сжимать в нём.

Хорошо бы ещё подобрать шрифт, оформление, но это уже совсем для задротов.

Видишь, какой будет простыня — меньше переделывать.

Очень близкая мне статья про сторифреймы

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

— Так, и что тут у вас?
— А вот поглядите, можно сохранять любимые места из книг.
— Хм... а из электронной можно?
— Можно, хотите загрузить?
— Да. Ок загрузил, а где теперь найти?
— А вот, посмотрите в ленте.

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

Главное не забывать, что внутреннюю речь пользователя мы только предполагаем. В реальности всё не так. Её нужно проверять ю-тестами, в идеале — с реальным «мышлением вслух».

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