Не начинать с отмазки и нытья

Плохая практика начинать свой рассказ с отмазки, давления на жалость и запроса преференций:

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

Зачем ты мне это показываешь, если не хочешь, чтобы я дал честную обратную связь?
Если сам знаешь, что показываешь откровенное Г., то зачем вообще показываешь?
Если у тебя нет опыта, но ты почему-то взялся и написал/сделал — почему я не должен критиковать?

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

Как отличить проработанное решение задачи от поверхностного

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

В задачах, которые решают дизайнеры, копирайтеры, маркетологи и все, кто создаёт что-то новое, нет правильного решения.
Нельзя прийти к постановщику задачи и сказать: "Вот итог, правильно я сделал?"
Может быть только проработанное решение, которое после принятия, возможно, проверится цифрами.

Есть универсальный вопрос, который позволяет отличить проработанное решение от поверхностного:
"Ты уверен, что лучше эту задачу нельзя было решить ?"

Если решение проработано, то исполнитель расскажет про другие тупиковые ветки решения и почему выбрал то, что сделал.
Если решение поверхностное, то будет что-то вроде: "Ну, я точно не могу сказать. Давай я ещё подумаю?" или "А почему нет? Вроде, нормальное решение".

В общем, прорабатывайте решения и будьте в них уверены. Вдруг спросят: "Ты уверен?"

О собеседованиях и найме

На днях прочитал отличную статью (https://vas3k.ru/inside/46/) о собеседованиях и найме. Написано в основном о том, как нанимать программистов, но озвученные мысли подходят и для остальных. Идеи близки мне по духу, потому что я считаю, что типичные собеседования это пустая трата времени. Вопросы о сложности алгоритмов или о бинарных деревьях не покажут ничего, кроме того, что человек об этом слышал и запомнил, а интервьюер тешит своё эго, потому что прочитал об этом 5 минут до интервью. А заставлять писать код на бумаге или на доске это вообще лютый зашквар.

Требования к будущим сотрудникам отличаются в каждой компании. Мы, как стартап, в первую очередь ориентируемся на то, чтобы человек был командным игроком и умел делать работу. Под "умел делать работу", подразумевается – брать и делать, без отговорок. Идеальный кандидат понимает бизнес и почему принимаются те или иные решения. Он готов иногда писать неидеальный код для быстрого тестирования гипотез. Он не пытается строить архитектуру на века, если в этом нет необходимости и не решает несуществующие проблемы. Такие качества человека проявляются в разговоре "за жизнь". Наблюдайте, как человек рассуждает, какие вопросы задает, как анализирует информацию.

ОК, на этом этапе определились, что человек нам нравится и мы готовы с ним работать в одной команде. Но как проверить технические знания? Для меня лучший тест – это сесть и вместе решить задачу, которую сами недавно решали в продукте. В таком варианте интервью будет сразу понятно как человек мыслит, как строит логические цепочки, какие аргументы за и против приводит, какие потенциальные проблемы видит, на какие грабли наступал и т. п.

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

Итог по блоку исследования

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

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

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

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

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

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

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

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

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

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

А пока я хочу обратить твоё внимание на парадокс

А пока я хочу обратить твоё внимание на парадокс

1. Ты часто делаешь работу не к сроку, я бы сказал систематически (ровно так же, как это делают 100% известных мне творческих специалистов).

2. Но всякий раз считаешь это случайностью и объясняешь внешними причинами.

Это не потому что ты плохой — ты очень хороший! Это потому что у тебя предпринимательский баг оптимизма, природу которого ты пока не исследовал.

Я читал об этом в книге Канемана.

Если коротко: «обычный» человек переоценивает потери и недооценивает выигрыш. Если «обычному человеку» предложить сыграть в игру с подбрасыванием монетки, где «орёл это получить 1200₽, а решка это отдать своих 1000₽», он не согласится, хотя математическое ожидание — положительное. Это «страх потери», который добавляет негативному сценарию дополнительный вес. У «обычного человека» равновесие достигается примерно в точке «выиграть 1500₽ или проиграть 1000₽».

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

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

Как же быть?

Понимать, с кем имеешь дело.

— Если имеешь дело с такими же предпринимателими, творцами и специалистами по неопределённости, то расслабиться, принять своё «несовершенство», делить с ними ответственность, давать больше обещаний про процесс и меньше про результат.

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

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

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

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

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

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

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