Стоит помогать бывшим клиентам?

Договориться на берегу

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

Важно донести клиенту, что бесконечной поддержки нет. Идеальный проект не сделать и можно допиливать сделанное бесконечно. У моего сайта-портфолио уже 13 версия пошла, и это не кончится.

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

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

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

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

Угрозы, манипуляции

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

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

А правка-то нужная!

По поводу правок есть тонкий нюанс: они могут быть адекватные и нужные. Тебе присылают правку, ты на неё смотришь и такой: «Ну да, вот она реально нужна проекту. Сделано не очень, можно лучше». Но это ни о чем не говорит. Вот контракт или устная договоренность, вот сроки, вот обьём работ. Я выполнил, вы пряняли. Все.

Дальше это уже разговор и новые итерации для улучшений продукта. Я на свои старые работы смотрю и такой: «господи боже, что за говно я сделал, тут все переделать надо». Но это не значит, что если клиент сейчас придет и скажет: «Дань, а твоя работа-то, говно». Я с ним даже соглашусь, но улучшение будет стоить столько-то, оплата сюда.

Болото, которое надо обойти

Если вовремя не тормознуть клиента, он сядет вам на шею и будете штатным сотрудником этого проекта бесплатно. А чем дальше ты в это залезаешь, тем больше неловкости появляется и растет злоба. Когда-нибудь рванет и тогда сотрудничество будет завершено на негативе 100%.

А если вовремя сказать, что это денег стоит, это спасет отношения.

Пример из опыта

Клиент после проекта написал список из 45 правок. Я смотрю и думаю: «Ну ты прикалываешься наверное, тут работы ещё дня на три». Причем правки а-ля увеличить шрифт на 1px — бесполезные для бизнеса.

Я ему говорю, мол, окей, правки сделаю, будет стоить 40 тысяч рублей.

Он такой: «А, понял, тогда посчитай первые три».

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

#42 Выступить с докладом

Первый раз я выступал на GetConference 5 у Сергея Харькова.

Выступал с темой «Юзабилити Геткурса. Проблемы и решения в пути ученика»

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

И собрал презентацию

#42 Выступить с докладом 1

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

В конце презентовал свой новый продукт — Нюансы Фриаланса. И получил 100 продаж, чего вообще не ожидал. Заявки летели только так. Пишу это сейчас и муражки по коже.

#42 Выступить с докладом 2

Выступления после

Дальше я ходил на Getc7, Getc8 и выступал для Клуба Инфо. Мне это нравится, я хотел бы этого больше в своей жизни.

По презентациям для последующих выступлений я конечно упоролся. Ниже скрины со слайдами в Figma.

#42 Выступить с докладом 3
#42 Выступить с докладом 4
#42 Выступить с докладом 5

Как ограничить сумму доната определёнными рамками

Многие знают, как сделать предложение с произвольной ценой, но как только вы сделаете так, как описано в статье геткурса, сразу встаёт 2 вопроса:

  1. Как убрать лишние знаки, которые путают пользователей, и оставить просто «руб» 😅
  2. Как поставить минимальную или максимальную стоимость. Ниже или выше которой вписать было бы технически невозможно.
Как ограничить сумму доната определёнными рамками 6

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

Изменить минимальную и максимальную стоимость предложения можно в коде скрипта:

$(()=>{setTimeout(()=>{
  let min = 150;    // Минимальная стоимость предложения
  let max = 999999; // Максимальная стоимость предложения
  $('form .count-'+min+'-'+max).each((i,el)=>{
    $(el).find('.offer-count-need-hide').hide();
    $(el).find('.final-price').html(function(){
      return $(this).html().replace('1','');
    })
    $(el).find('.offer-count-input')
         .attr('min', min).off('input')
         .on('change', function(){
           let val = parseInt($(this).val());
           if(val < min) val = min;
           if(val > max) val = max;
           setTimeout(()=>{
             $(this).val(val).attr('data-qty-value', val);
             let $pos = $('.min-'+min+' .form-position-input');
             $pos.attr('data-qty-value', val);
             $pos.attr('checked', false).prop('checked', false);
			 $pos[0].click();
			 if(!$pos.prop('checked')) {
			  $pos[0].click();
			 }
           });
         });
  });
})});

❗️Чтобы скрипт заработал нужно прописать в настройках блока с нужным предложениеми класс count-min-max, только min и max замените на цифры, которые вы указали в скрипте. Например, count-150−999 999

Полезные скрипты для GetCourse на сайте getscript.ru

Сериал «Темная материя» (спойлеры)

Смотрел здесь https://allplay.uz/movie/60 267/dark-matter. 9 серий.

Ниже мои мысли о сериале, хороших и плохих моментах. Я просто писал её для себя во время просмотра.

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

Обложка сериала

Что понравилось

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

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

Классный юмор.

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

Что не понравилось

Глупые поступки главного героя.

Хорошие моменты

  • Создатель куба в своем мире женат на Аманде. Когда он возвращается в мир к Даниэлле, то ходит на прием к местной Аманде-психотерапевту и обсуждает текущие отношения. А в конце отвечает на вопрос, откуда узнал о ней: «От бывшей жены» — аплодирую стоя.
  • Круто, что герой, который вернулся из той жести и не ведет себя как идиот. Не ведется на манипуляции злого Джейсона. Когда тот просит разрезать веревки, которым связан, версия хорошего Джейсона такая: «Может тебя разрезать?». Люблю, когда герои не идиоты.
  • «Ты дала её надежду, но угнала машину» — шутка после встречи Аманды с мамой в другом мире клевая.

Нелогичные моменты

  • Зачем в кубе столько дверей? Можно открывать всегда одну и ту же, ведь ты можешь менять свои чувства и мир за дверью будет меняться каждый раз. Update: тогда бы не получилось художественного приема переключения в кубе. Был бы просто куб и как бы он визуально менялся? Не было бы бега по этому коридору и других волнущих сцен. Но на деле смысла в них нет)
  • Почему Джейсону сразу не рассказали о том, кто он такой и в чем дело, когда он прибыл на место злого Джейсона? У них должен был быть протокол на этот случай. То, что они ему четко по полочкам не разложили все, спровоцировало его побег и дальнейшие сложности.
  • «Я не могу грабить банки и таскать деньги туда-сюда, потому что там купюры, можно сесть за подделку». Братишка, есть золото и бриллианты. Они скорее всего в большинстве миров котируются. А если нет, тебе за это ничего не будет. Ну принес блестяшки какие-то, пальцем у виска покрутят и все.

Воспоминание своего мира — это финиш

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

Пишет «Красная вывеска» — пошел проверять. В следующий заход «Винный бар через дорогу» и так далее. И так много заходов. Потом на 3−5 заход горестно констатирует: «Памятного дерева нет».

Бл*, серьезно? Может надо не про бар и винный магазин писать?

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

Учитывая, что этот человек преподаватель физики, странно, что он ведет себя так недальновидно.

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

Механики мира

Эмоции и решения разные вещи. Войти в этот мир можно только с нужными эмоциями. А в момент решения дублируется мир и все люди в нем. Зафиксировали.

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

Кто ещё был в своем мире и ушел в другой? «Злой» Джейсон, он будучи в разных мирах, делал разные выборы и по идее должны были создаваться его копии, причем миры, откуда он ушел и куда хочет прийти остались бы такими же, в единственной копии.

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

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

Но тогда появляется …

Вечный цикл

Первого Джейсона похители → Он делал решения → Копировались новые Джейсоны → Делали решения в мирах, в том числе в родном → Делали копии новых Джейсонов → круг замкнулся.

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

71 Джейсон сделали десятки решений начиная с их копирования. В итоге количество Джейсонов растет по экспоненте.

71 Джейсон сделали допустим по 20 решений каждый = 1420 решений. То есть 1420 новых Джейсонов. Новые Джейсоны за короткий промежуток сделают ещё по 20 решений = 28 400 Джейсонов. И так далее.

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

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

Сортировка по количеству в дашборде Геткурса

Мне надо было отсортировать список по количеству продаж продукта. Кнопок я не нашел, попросил ИИ написать код.

Добавляете его через виджет кода JS в браузере и он сортирует таблицу по колонке «Количество».

Как выглядит

До применения

Сортировка по количеству в дашборде Геткурса 7

После

Сортировка по количеству в дашборде Геткурса 8

Код

// Создаем кнопку
var button = document.createElement('button');
button.textContent = 'Сортировать по количеству';
button.style.position = 'fixed';
button.style.bottom = '10px';
button.style.right = '10px';
button.style.padding = '10px 20px';
button.style.backgroundColor = '#007bff';
button.style.color = '#fff';
button.style.border = 'none';
button.style.borderRadius = '5px';
button.style.cursor = 'pointer';
button.style.zIndex = '1000';

// Добавляем кнопку на страницу
document.body.appendChild(button);

// Функция сортировки
function sortTable() {
    var tbody = document.querySelector('tbody.funnel-parts');
    var rows = Array.from(tbody.querySelectorAll('tr.part-row'));

    // Функция для извлечения количества из строки
    function extractQuantity(row) {
        var quantityTd = row.querySelectorAll('td')[1];
        var quantityText = quantityTd.querySelector('div.funnel-line-text a').textContent.trim();
        var quantity = parseInt(quantityText);
        return quantity;
    }

    // Сортировка строк
    rows.sort(function(a, b) {
        var quantityA = extractQuantity(a);
        var quantityB = extractQuantity(b);
        return quantityB - quantityA;
    });

    // Обновление таблицы
    tbody.innerHTML = '';
    rows.forEach(function(row) {
        tbody.appendChild(row);
    });
}

// Добавляем обработчик события на кнопку
button.addEventListener('click', sortTable);

Полезные скрипты для GetCourse на сайте getscript.ru

Обновление калькулятора себестоимости спустя 6 лет

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

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

Обновил внешний вид

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

Обновление калькулятора себестоимости спустя 6 лет 9

Изменил тексты для лучшего понимания

Раньше было «3 пунктов» и «.руб на единицу». Каких пунктов? Какую единицу? Непонятно.

Теперь стало гораздо понятнее: материалов и рублей на клиента.

Обновление калькулятора себестоимости спустя 6 лет 10

Состояние по-умолчанию

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

Обновление калькулятора себестоимости спустя 6 лет 11

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

Обновление калькулятора себестоимости спустя 6 лет 12

Добавил кнопку «Добавить ещё»

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

Обновление калькулятора себестоимости спустя 6 лет 13

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

Обновление калькулятора себестоимости спустя 6 лет 14

Числовая клавиатура на мобильном

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

Обновление калькулятора себестоимости спустя 6 лет 15

Автоматическая прокрутка к новому пункту

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

Обновление калькулятора себестоимости спустя 6 лет 16

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

Обновление калькулятора себестоимости спустя 6 лет 17

Сохранение в куки

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

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

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

Обновление калькулятора себестоимости спустя 6 лет 18

Как перейти на почасовую оплату на фрилансе?

Я работаю по почасовой ставке 4 года.

Как лучше устроить работу по почасовой ставке:

  • Установить трекер TopTracker. Возьмите типовой проект за фиксированную оплату, выполнить его с трекером, чтобы понять, сколько времени на это уходит.
  • В будущих проектах говорите примерное время и показывайте, какие задачи и за сколько времени вы уже решали.
  • Дробите на итерации. Не надо брать предоплату за 100 часов. Разбейте проект на итерации по 3,5,10 часов и берите предоплату и постоплату за них. Клиенту будет проще начать работу с вами и он может по первой итерации понять, соответствует ли скорость работы вашим обещаниям.
  • Нарабатывайте базу проектов и потраченного времени. Со временем вы будете оценивать каждый проект точнее.
  • Предупреждайте клиентов заранее, что это почасовая ставка. Реальной кусок моего сообщения клиенту ниже.

Я работаю по почасовой ставке

Что это значит? Есть типовые, предсказуемые задачи, которые я делал много раз и знаю сколько времени это займет. Такие задачи я делаю по фиксированной стоимости.

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

Примерная оценка нашей работы: 20 часов. Стоимость почасовой ставки: 2500₽. Примерная стомость проекта: 50 000₽.

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

Оплачивать все сразу необязательно. Чтобы вам было спокойнее, мы можем разбить работу на этапы по 5 часов. Вы предоплачиваете 5 часов (12 500₽), я их отрабатываю, пишу отчёт, что сделал, а вы решаете, хотите ли продолжать со мной работу. После каждого этапа итоговая оценка доуточняется.

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

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

Установка и настройка TopTracker

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

Я пользуюсь им уже 4 года.

Плюсы трекера

  • Цена — 0₽
  • Простота установки
  • Аналитика
  • Снимки экрана и вебки (можно настроить)
  • Удобный интерфейс

Как выглядит аналитика?

Установка

  1. Перейдите на сайт https://www.toptal.com/tracker
  2. Чуть ниже первого блока есть блок с выбором операционной системы. Нажите на вашу операционную систему и у вас начнется загрузка программы.
  3. Выше есть две кнопки. Нажмите кнопку «Get started as freelancer»
  4. Зарегистрируйтесь. Данные будут нужны для входа в приложение
  5. Отправьте мне или менеджеру свою почту.

Настройки

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

Установка и настройка TopTracker 19

Какие настройки проставить

Установка и настройка TopTracker 20
Установка и настройка TopTracker 21
Установка и настройка TopTracker 22

Как трекать

Чтобы начать трекать проект, откройте приложение, выберите проект и нажмите «Start». Когда нужно закончить трекинг, откройте приложение и нажмите «Stop».

Установка и настройка TopTracker 23

Что такое активность?

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

Установка и настройка TopTracker 24

Поле можно заполнять так: «Делаю мобильную версию», «Верстаю страницу Контакты».

Примерно через 10 минут трекер спросит снова, уже с заполненным предыдущим ответом. Если вы делаете тоже самое, нажмите Enter. Если изменили задачу, введите новое значение.

Если. вы хотите поменять его без всплывающего окна самостоятельно, откройте приложение и нажмите «Switch Activity». После нажатия откроется

Установка и настройка TopTracker 25

Нюансы

Иногда проект может не появиться в приложении

1. Проверьте почту. Возможно вам пришло приглашение, а вы его не приняли.

2. Нажмите Force Sync. Это принудительная синхронизация с облаком. Чтобы вызвать такое меню. На виндоус надо кликнуть правой кнопкой мыши на иконке программы в правом нижнем углу. На маке в правом верхнем углу кликнуть один раз левой кнопкой.

Установка и настройка TopTracker 26

3. Авторизуйтесь на https://tracker.toptal.com/, зайдя в личный кабинет вы увидите такой экран, там будет проект, куда вас пригласили

Установка и настройка TopTracker 27

4. Кликаете на проект и переходите внутрь. Нажимаете галочку слева и Accept справа.

Установка и настройка TopTracker 28

5. Проверяйте ещё раз с Force Sync

Иногда приложение сваливается в Offline режим

Это бывает даже тогда, когда интернет есть. Вы можете продолжать трекинг в этом режиме. Все данные он сохраняет и после восстановления соединения отправляет их на сервер. Ничего не пропадет. Если напрягает, перезапустите приложение. Обычно это помогает.

Как напоминать о себе клиентам?

Сначала надо принять данность: никто не помнит о вас. Через пару недель, как вы закончили проект с клиентом — он о вас забыл.

Значит нам надо записать в нашу базу клиентов такие данные: когда работали, что делали. Например: «Дизайн сайта по продаже крема, октябрь 2023». Этого хватит.

Мне о себе недавно напоминил фрилансер, и вот так делать не надо.

Плохо

Как напоминать о себе клиентам? 29

Почему? Мне как клиенту — плевать на петр-проекты, пет-макеты и когда кто их там доделает. У меня 100 500 других дел, которые надо делать.

Этот человек, не предложил никакой пользы. Я смотрел на это сообщение и думал: «И че дальше?». А ничего, просто напомнил ради напоминания.

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

Лучше

  1. Напомните о себе: кто вы, как участвовали в работе над проектом клиента.
  2. Если вы уже работали, напомните над чем работали, чтобы «подгрузить» воспоминания клиента о вашей работе.
  3. Не клянчите работу, а расскажите, чем вы сможете помочь.

Примеры

Пишем лиду, который написал и пропал.

Пишем клиенту, с которым мы работали.

Как завышать цену?

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

Если будущие этапы требуют результата работы первых — так и напишите клиенту.

Когда ко мне обращаются с заказом по разработке сайта, я разбиваю работу на этапы: прототип, текст, дизайн, разработка.

Разработка требует дизайна, дизайн требует прототипа. Поэтому заранее сказать невозможно.

Я пишу клиентам примерно так:

Иван, проект состоит из 4 частей: (перечисляю).

Для того, чтобы корректно оценить последующие этапы, надо выполнить первый. Он будет стоить (цена).

Другие этапы будут стоить примерно (цена), но я не могу гарантировать эту стоимость, потому что она зависит от результата первого этапа.

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

Не надо думать, что клиент уйдет из-за такого ответа. Это нормальная ситуация, когда в сложном проекте один этап может повлиять на другой.

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