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

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

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

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

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

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

О гибком мышлении.

В любом процессе работы, обучения, выстраивании жизни важно научиться иметь гибкую точку зрения. Сила мышления в гибкости. Есть у меня знакомый Вася, вообще не гибкий в размышлениях и всех поучает как жить, больно мозгу от его прямолинейных размышлений и однозначных выводов. Вообще умение смотреть на события, факты, людей с разных позиций это определенный и талант и практика и пожизненный плюс в карму. Обычно самыми принципиальными и несгибаемыми в споре оказываются аргументы самого, ну скажем, не умного человека. Учиться гибкости мышления — это навык. Натренировать себя быть гибче, не упираться в стены стереотипов и навязчивых мнений других людей не просто. Есть три приема:

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

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

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

Гибче Вас!

Почему пользователи уходят

Клиенты перестают пользоваться продуктом по двум причинам: нет необходимости, либо что-то не нравится.

С первой категорией всё понятно. Этим пользователям продукт нравиться и они, возможно, расскажут о нем друзьям. Но в данный момент он им не нужен. Для таких клиентов дайте возможность легко отказаться от услуг. Это оставит хорошее впечатление и, возможно, в будущем они ещё вернутся.

А вот ситуацию, которая попадает во вторую категорию, анализируем, находим истинную причину неудовлетворенности и извлекаем из этого максимальную пользу. За пользователей из этой категории стоит побороться, узнав, что им не нравится. Если цена, то предложите скидку. Если не хватает функционала, то узнайте, как улучшить продукт. Но не забываем про положительный ROI. Нелогично тратить $50к на разработку нового функционала, чтобы вернуть одного пользователя LTV c которого будет $1к.

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

Принцип которого мы придерживаемся это Customer Obsession. Мы проводим много времени разговаривая с клиентами, собираем отзывы и только после этого приступаем к работе. Это позволяет проактивно предотвратить отток пользователей и не тратить времени на поиски причины.

Правило хорошего тона на встречах и созвонах: рекомендации

Знаете, несмотря на то, что продакт менеджер это спринты, разработка, интерфейсы, метрики и бла, бла, бла, как раз с "бла, бла, бла", часто возникают проблемы.

Ты отвечаешь за продукт, рулишь большим потоком информации, собираешь встречи с заинтересованными лицами. Но как они проходят? Быстро обстучали, разбежались. Что-то начали делать, потом оказалось, что не так поняли друг друга. Потеряли во времени и ресурсах.

Коммуникации штука интересная и непростая. Люди, с которыми вы работаете, немного иначе смотрят на этот мир, а тем более не могут залезть вам в голову. Просто примите это. Да, не легко, понимаю, но нужно стараться.

Если посмотреть на день продакта, то он легко может состоять на 60-70-80%, из встреч и звонков. Поэтому дам хоть и банальные, но архиважные рекомендации по тому, как нужно проводить эти мероприятия.

0. Подготовка

Чтобы провести встречу или звонок, к ним нужно подготовиться (спасибо кэп). Это кажется настолько очевидно, что куча народа про это тупо забывает или забивает. Тебя зовут на встречу, а в итоге "ни бэ, ни мэ, ни кукарЕку". Ни целей, ни задач, ни решений. Народ просто смотрит друг на друга и не понимает, чтотнужно делать. 80% копаешься в контексте, потом 20% думаешь над решением. Отстой полнейший.

Если вы собираете встречу или звонок, будьте добры подготовиться: определите задачи, состав участников, краткий сценарий и результат, который хотите получить в конце.

1. Контекст

Обязательно убедитесь, что все участники находятся в едином контексте.

Не поленитесь и приложите описание встречи (agenda). Опишите задачу и открытые вопросы. Когда все начнется, еще раз проговорите эту инфу для участников. Так вы синхронизируете всех между собой.

2. Правила игры или сценарий

Когда все введены в контекст, расскажите о том, как будет проведена встреча.

Буквально основные этапы обсуждения: "Предлагаю начать с этого и обменяться мнениями. Дальше посмотрим на бенчмарки, которые я собрал (подготовка). В конце примем решение, на основе всей информации."

3. Во время встречи/звонка

В процессе диалога следите за соблюдением сценария. Если участники отклоняются от темы, возвращайте их обратно. Старайтесь вовлекать всех участников. Если вы позвали определенных людей, то значит вам нужно их мнение. Если не нужно, то нафиг звать?

Часто появляется альфа оратор, который давит остальных. Дайте ему высказаться, а затем спросите тех, кто отмалчивается. Таким образом все будут вовлечены в процесс, и вы получите разные мнения.

Обязательно записывайте основные моменты и договоренности на протяжении всего митинга.

4. Итоги и MOM

По итогу встречи проговорите то, о чем договорились. Кто-то из участников может вас дополнить. Скорректируйте список, если потребуется.

После встречи вышлите всем MOM (minuites of meeting) или протокол встречи с основными моментами и решениями.

Поздравляю

Теперь ваши встречи и звонки преобразятся. Вы наконец-то стали не просто продактом, а еще и менеджером, который умеет эффективно проводить подобные мероприятия.

Попробуйте хотя бы раз воспользоваться текущими рекомендациями и увидите насколько круче станут ваши коммуникации с коллегами.

P. S. Если то, что вы прочитали выше, для вас само собой разумеющиеся, то я искренне рад, что вы существуете.

Просто поделитесь этими рекомендациями с теми, кто о них еще не слышал. Так мы сделаем нашу корпоративную жизнь чуть лучше ;)

А тем временем, уже прошло 3 занятия

На второй лекции нам рассказали про дорожную карту, по которой будет проходить наша работа над проектом. Построена она по принципам дизайн мышления (ДМ).

Я встречал различные формулировки дизайн мышления, Алина охарактеризовала ДМ следующим образом — это методология творческого поиска в условиях неопределенности, нацеленная на выявление и решение ключевой пользовательской задачи.

По сути ДМ — это решение проблемы, запрос на которую указал пользовать. Есть мнение, что проводить ДМ нужно в первую очередь для бизнеса (заказчика), чтобы обосновать ему, почему нужно делать удобно, решая проблемы пользователей, а не только бизнеса.

В любом случае, ДМ, это самый настоящий инструмент, позволяющий путем набора определенных методов выявить сначала проблему, а затем сгенерировать обоснованное решение.

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

Надеюсь, после прохождения этих этапов в рамках нашего проекта, и мне и вам станет яснее, что из себя представляет процесс ДМ.

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

О том, что интересного нам рассказал заказчик и как мы составляли методологию для интервью с пользователями, я постараюсь рассказать на этих выходных, ибо времени, действительно, стало катастрофически не хватать.

Аврора Харли написала о непредсказуемой работе крестиков, закрывающих окна с формами.

Если пользователь открыл модальное окно с формой и что-то в ней изменил, становится непонятно, что произойдёт, когда он нажмёт на крестик. Сохранятся изменения или пропадут? В разных продуктах крестик ведёт себя по-разному.

Чтобы продукт вёл себя предсказуемо:

1. Запрашивайте подтверждение перед деструктивным действием, когда могут пропасть пользовательские данные. Например, если пользователь закрывает фильтр, не применив его, отобразите диалоговое окно: «Вы хотели бы применить фильтр перед возвращением в список товаров? Да / Нет».

2. Замените крестик на текстовую кнопку, которая чётко даст понять, что произойдёт: отмена или закрытие.

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

https://ux.pub/otmenit-ili-zakryt-dizayn-neodnoznachnyh-deystviy/