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

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

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

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

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

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

Заботливый менеджер

Классная черта любого лидера — умение подбодрить команду, когда тяжело, и отметить успехи, когда они были.

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

Внезапная забота — это не ожидаемо и всегда приятно.
Я помню, как на прошлом месте работы директор повёл нас в кафе после сдачи сложного госпроекта, к презентации которого готовились до 3 ночи. Это было лет 10 назад. Но я уже не особо помню тяжесть, с которой мы тогда столкнулись.

Или как-то мы делали очень сжатый по срокам проект и к концу срока проекта работали уже без выходных по 12 часов. В последний день срока, переходящий в ночь, я сходил и купил пирожные всей команде. Остановились, попили чая, поболтали и продолжили. Все взбодрились и потом долго вспоминали пирожную паузу. Может и сейчас помнят.

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

Почему так? Ответ есть у психологов 🙂 Даниэль Канеман, в книге «Думай медленно... решай быстро» описывал опыт про вспоминающее «я».

Перескажу кратко.
Подопытному надо было пройти три теста «холодная рука».
Поочерёдно левую руку опускали в один сосуд с водой, а правую в другой. Вода была холодная: 14 градусов Цельсия. Вызывает болевые ощущения, но не сильные.

Левая рука находилась в холодной воде минуту, а потом её доставали и вытирали.
Правая рука находилась в холодной воде тоже минуту, но потом незаметно в воду добавляли тёплой воды и рука ещё 30 секунд была в воде. Тёплая вода подогревала воду всего на 1 градус, но этого было достаточно, чтобы ощутить снижение болевых ощущений.

Потом подопытным говорили — какой же эксперимент ты выберешь третьим: тот, который был для левой руки, или тот, который был для правой? 80% среди тех, кто почувствовал снижение боли, выбрали эксперимент с правой рукой. То есть они были готовы терпеть столько же боли, что и левая рука, но ещё и 30 секунд с небольшим уменьшением.

👉 От внезапной заботы люди готовы сделать больше и лучше

Меня тут спрашивают, зачем нужны шпаргалки, о которых я написал постом выше

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

Например, вы знаете основы JS, но всё чаще встречаете в примерах непонятный новый синтаксис — ES6. Вы можете прочитать про него длинную статью (например: http://babeljs.io/learn-es2015/), но, скорее всего, сразу всё забудете. Тут вам и придёт на помощь шпаргалка https://devhints.io/es6

Или вы установили себе модный редактор кода Visual Studio Code, но не знаете ни одного хоткея в нём. Вот шпаргалка с ними: https://devhints.io/vscode

Или вы решили научиться верстать флексбоксами, но постоянно забываете синтаксис. Шпаргалка вам его быстро напомнит: https://devhints.io/css-flexbox

Дизайнер Лили написала про 12 типов тёмных паттернов.

1. Завлечь и переключить. У пользователя нет уведомлений, но Фейсбук показывает, что они есть, когда тот не залогинен.

2. Заставить испытывать вину или стыд. 2 кнопки: «Скачать буклет о здоровом питании» и «Нет, спасибо, мне плевать на своё здоровье».

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

4. Затруднять отмену подписки. Когда заканчивается подписка, деньги списываются с привязанной карты с минимальным уведомлением или вовсе без него.

5. Собирать контакты друзей и спамить им от вашего лица. Как LinkedIn.

6. Отвлекать внимание. Если не снять флаги с малозаметных чекбоксов при обновлении Скайпа, можно сделать Bing поиском по умолчанию, а MSN — домашней страницей.

7. Затруднять сравнение цен. Например, одни и те же яблоки в упаковках и на развес.

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

9. Упрощать пользователям желательные (для вас) действия и затруднять нежелательные. Попробуйте удалить свой профиль на Фейсбуке.

10. Формулировки с подвохом. Кажется, что ставя флаг вы отказываетесь от рассылки, а на самом деле наоборот на неё соглашаетесь.

Запрещено в Великобритании:

11. Скрывать полную стоимость. На последнем шаге оформления стоимость заказа немного увеличивается: появляется информация о доставке или дополнительном сборе.

12. Добавлять в корзину товар или услугу по умолчанию. Например, страховка при покупке билетов на самолёт.

Семантика и синтаксис интерфейса

Семантика — то, как элементы интерфейса сочетаются, группируются и как их воспринимает человек.

Cемантика опирается на ожидания от продукта и привычки. Например, что в форме регистрации есть кнопка «Зарегистрироваться», а в соцсетях — лента новостей.

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

Элементы без текста — чаще всего просто иконки и фреймы. С них не так-то легко считать информацию.

К чему это я? Круто, когда UX-писатель умеет писать. Но ещё круче, когда разбирается в семантике. Это уже хай левел.

Рефлексия

Рефлексия

«Военачальник, который выигрывает сражения, прежде чем сражаться, много размышляет в своем храме»
© Сунь-Цзы, Искусство войны

Чем выше руководитель по уровню развития, тем больше времени он выделяет на размышления о развитии своего направления.


Кому и зачем нужна рефлексия?

Менеджер, который все время в огне и вечно занят, находится на соответствующей ступени своего развития.

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

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

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

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


О чем думать?

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

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

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