У меня получалось быть молодым фрилансером. Как быть старым фрилансером?

У меня получалось быть молодым фрилансером. Как быть старым фрилансером?

Молодой фрилансер постоянно фигачит, учится, весь такой на подрыве.

Я всегда думал, что взросление обязательно связано с переключением в роль управленца — стать арт-директором или CTO, растить команду, учить, брать больше ответственности. «Солдат, что не мечтает стать генералом» казался мне неправильным. Ребят, которые попробовали руководить и откатились до исполнителей, я считал слабаками и дауншифтерами.

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

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

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

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

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

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

Gmail: про эксклюзивность

Gmail: про эксклюзивность

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

В 2004 году Google запускает бета-тестирование своего почтового сервиса Gmail, но делает это весьма интересно. Чтобы получить доступ, тебя должны пригласить. У одного пользователя было только одно приглашение.

Вокруг сервиса образовалась такая шумиха, что дело доходило до безумия. Народ продавал инвайты на Ebay от $65 до $125 за штуку. Те, кто получал заветное приглашение, чувствовали себя избранными.

По итогу сервис привлек большую аудиторию и выпустил версию для всех.

Мясо

Прием эксклюзивности или чего-то "закрытого" применяется часто. Из известных у меня на памяти: Лепра и Аура Яндекса. Помню, как в ленте фейсбука все клянчили друг у друга приглашения.

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

Посмотрите на свои продукты. Можно ли к ним применить принцип эксклюзивности?

Периодически обновлять фреймворк

У нас в ГдеМатериале есть хорошая практика — мы периодически проверяем актуальность зависимостей. Я говорю не о мелких обновлениях и не о фиксах безопасности (они давно автоматизированы), а об обновлении мажорных версий библиотек, скажем Django с 1.11 до 2.0.

Вообще, обновление любого фреймворка — кошмар программиста. Во-первых это сложно из-за проблем с обратной совместимостью. Причём, чем больше проект, тем сложнее.

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

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

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

Немного о том, есть ли жизнь после британки

Как я говорил ранее, я уже больше трех месяцев работаю в hh.ru. За это время мы неплохо поработали и полностью изменили навигацию в приложении. Теперь там удобный таббар (ура). На протяжении нескольких месяцев мы отбирали разные варианты, спорили, тестировали. В итоге остановились на компромиссном решении, со своими плюсами и минусами.

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

Удобная навигация — залог счастливого пользователя, поэтому особенно хочется похвалить нашу версию под android, далеко не каждый продукт может похвастаться столь продуманной навигацией под эту платформу (привет, системная кнопка «назад»).
Также крайне важно не столько сделать классно, сколько донести до пользователя о новой пользе, поэтому мы стали разными способами рассказывать о новых функциях (как, например эта сторис👇).

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

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

let el = document.querySelector(".someClass");
el.innerText // текстовое содержимое
el.innerHTML // HTML-разметка содержимого
el.outerHTML // полная HTML-разметка
el.offsetWidth // ширина, аналогично Height
el.offsetLeft // координата левого угла
// и так далее

Назначенные узлу стили можно узнать через свойство sytle:

el.style.color // цвет текста

Но в нём содержатся только те CSS-свойства, которые назначены непосредственно узлу. Чтобы узнать все свойства, которые получил узел из CSS-стилей, потребуется более сложная конструкция:

getComputedStyle(el).color // цвет текста

Если захотите узнать более сложные свойства, то не забудьте преобразовать их названия в camelCase. Например: background-color → backgroundColor;

Подробнее в видео: https://youtu.be/kM8YAhsaHfE
И в примере с кодом: https://codepen.io/detepr/pres/mQqKZO

Безусловная и непонятная директива

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

Это — безусловная и непонятная директива. Такими директивами обычно общаются непродуктивные ребята, когда приходят с решениями вместо проблем (см. Фичреквесты, которые не стоит выполнять (https://t.me/pmdaily/98)).

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

Будьте подробными: рассказывайте о том, почему пришли к тем или иным решениям. Не «давай перенесём кнопку наверх», а «Эта кнопка — ключевой call-to-action на странице, а я боюсь, что новые пользователи сразу её не увидят» Так вы не только уменьшите количество переписки в трекере, но ещё и опытом с коллегами поделитесь.