19 августа 2019 – 25 августа 2019

@bohdan_orlov

London, England
19 августа 2019Понедельник
22 твита
8:12

Всем привет! Я @bohdan_orlov и я прошел life cycle iOS разработчика, о чём и поговорим. Рассказы из личного опыта. Не представляю позицию моего работодателя. #НоваяАватарка #АвторНедели #день1из7

8:17

Сегодня поговорим о смене работодателя. За 7 лет в разработке я поработал в 7 компаниях, я люблю менять роботу. Сейчас работаю в Лондонском офисе ФБ. Обычно смена работы это дополнительный стресс, но также прибавка к зарплате и бесценный опыт. #день1из7

8:19

Сначала разделаемся з зарплатным вопросом. Моя история прибавок к базовой зарплате при смене компании:

2013 +100%
2014 +56%
2015 +151%
2018 +27%
2018 +33%
2019 -14%

Бонусы, налоги, стоки и переезды не учтены. #день1из7

8:28

Средняя прибавка получается больше 50%. Прибавка меньше 20% не стоит потраченных усилий если нет других факторов.

#день1из7

8:30

Важно подметить что располагаемый доход (disposable income) редко возрастал больше чем на 20%, а однажды даже упал! И это не так страшно если вы понимаете что, делаете ;)

#день1из7

8:40

Моя максимальная прибавка внутри компании была:

8:53

Мой опыт всего лишь подтверждает статистику - чтобы не отставать от рыночной зарплаты менять роботу нужно часто. Смотрите на занимательный график: forbes.com/sites/cameronk…

#день1из7

9:08

Стоит ли обговаривать зарплату с коллегами?
Я считаю, стоит.
Если вам "переплачивают" (мало вероятно), то вы займётесь саморазвитием (если вы не надменный мудак), но скорее всего вам не доплачивают. Вы или получите повышение, или уйдете.
#день1из7

9:15

Все были свидетелями случаев когда кому-то не повышали ЗП, человек уходил в другую компанию и получал что, хотел. Компании просто экономят большую кучу денег платя разные зарплаты за те же навыки. Не нужно обижаться, а нужно понять и простить. #день1из7

9:24

@mobileunderhood А вот другая точка зрения - в Германии я столкнулся с тем, что многие компании считают, если человек проработал менее 2 лет в 1 компании, то он «не надёжный». Это прежде всего из-за сложности найма (дорого, долго, буткамп 3 мес). Прокоментируете?

Также и в UK. Я здесь считаюсь "Jumper"-ом. Почти все работодатели поднимали этот вопрос чтобы: 1) получить успокоительную речь о том, как их компания отличается 2) попытаться занизить зарплату. На горячем рынке работодателю сложно быть придирчивым.
#день1из7 twitter.com/pingwinator/st…

13:43

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

#день1из7

13:43

Если вам стало не комфортно работать, накидывать наверх стресс собеседований не лучшая идея. #день1из7

13:43

А вот ходить на собеседования когда у вас на роботе все хорошо — это сказка! Себя показал, других посмотрел, а не срослось — ну ничего страшного, не очень-то и хотелось! #день1из7

14:55

@mobileunderhood Странная логика. Что ж тогда делать в подобном случае?

Проясняю, свою позицию.
Если плохо, то искать и сваливать безусловно нужно.
Но если все идет стабильно то это не значит что нужно 5 лет сидеть на попе и ждать пока плохо не станет — нужно быть про-активным.
#день1из7 twitter.com/iLLuzor/status…

14:59

Но что подумает менеджер, если узнает что я пошел на собеседование почти сразу после повышения? Если вы найдете новую роботу — то вам не доплачивали, и ваш менеджер не ваш союзник. А если нет то вы "откалибровали" себя ;)

#день1из7

15:00

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

#день1из7

15:04

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

#день1из7

15:04

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

#день1из7

15:20

Стоит ли оставаться в компании потому что есть чувство долга перед сотрудниками даже если ЗП меньше рыночной? #день1из7

15:58

Платит ли ваш работодатель значительную часть компенсации стоками (Restricted Stock Unit)?
#день1из7

18:18

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

В итоге кто-то прокачает навыки и запросит больше. Идея не в том чтобы у всех было одинаково, а в том чтобы друг на друга и рынок равнялись. Хочешь быть самим "дорогим"? Иди и докажи, начальству или рынку что ты стоишь денег.
#день1из7 twitter.com/stevenpigeon3/…

18:30

@mobileunderhood А это точно не тот случай когда из всех статистик выбрал только ту что подходит под свой опыт?

Это не точно. twitter.com/industrieapps/…

20 августа 2019Вторник
20 твитов
8:41

Сегодня говорим о требованиях, а конкретно о Product Requirement Document (PRD).

#день2из7

8:59

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

#день2из7

8:59

В большинстве известных мне компаниях необходимость записывать (и предоставлять разработчикам) требования продукт менеджеры или заказчики закидывают отмашками: это не Agile, это трата времени, это никому не нужно.

#день2из7

8:59

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

#день2из7

8:59

Другим результатом есть сложность взаимодействия команд с разными правилами к требованиям: одни верят в что все должно быть в JIRA другие утверждены что нужны Google docs для общей картины.

#день2из7

8:59

Оказывается можно относиться к требованиям таким же образом как мы все относимся к дизайну (UI). Формальные требования могут быть артефактом который блокирует разработчика, так же как и отсутствующий дизайн.

#день2из7

8:59

Таким образом у продукт менеджера появляется конкретный выхлоп — требования в форме PRD. #день2из7

8:59

Как в вашей компании относятся к качеству требований?

11:10

Мне удалось поработать в Badoo (MagicLab) где компетентные продукт менеджеры реализовали формальный подход PRD.
Они понимают, что задача ПМа не только придумать что делать, но еще и запечатлеть это в документе и вовремя вносить в него правки.

#день2из7

11:13

Лучший обзор как работает Badoo и как PRD играет ключевую роль в жизни компании глазами разработчика, Александра Балабана. youtube.com/watch?v=eehzud…

#день2из7

13:37

Ключевая часть PRD это скриншоты сырого дизайна которые подкрепляют user story. Скриншоты не заменяют Figma или Zeplin. Они нужны чтобы можно понять большую картину быстро просмотрев документ.

#день2из7 pic.twitter.com/Vn9PofxzUE

13:37

Добавление технических деталей в PRD это типичная ошибка разработчиков, которые пытаются начать писать документ с требованиями. Очень важно разделять ЧТО и КАК, поэтому технические детали должны быть в отдельном документе. #день2из7

13:37

Делать проект или фичу и не измерять её производительность — это деньги на ветер. Бизнес аналитики описывают как это сделать в PRD, фича без аналитики в продакшин не ходит. #день2из7 pic.twitter.com/z0kwSRBfQs

13:37

Наличие PRD позволяет точно оценивать задачи по времени, подключать новых людей к исполнению за несколько часов, а также накапливать и передавать знания "новому поколению". #день2из7

13:37

Также важным отличием PRD от Google Doc описывающего хотелки это жесткая структура документа. В одной компании все PRD должны выглядеть одинаково, сотрудникам очень легко искать информацию в гомогенных документах. #день2из7

13:37

Пример структуры PRD:

  • Links
    • Designs
    • Tech Spec(API)
    • JIRA
  • Goals
  • What's New
  • Platform variations
  • Description
  • Communication
  • Use Cases
  • Edge Cases
    • No Connection
    • Tablet/Small Devices
    • Error Handling
  • Release Plan
  • Analytics

#день2из7

15:08

Самый простой способ внедрить PRD в компанию это нанять продукт менеджера, который уже спец по этому делу. Именно так и поступили в Badoo несколько лет назад наняв ПМа из Испанской компании Tuenti.

#день2из7

15:08

Другой вариант это продвигать идею из "низов" когда разработчики и тестировщики сами пишут PRD пока практика не приживется (все равно же записывают что нужно сделать). Но есть большая вероятность что ПМы так никогда и не поймут что это их робота. #день2из7

15:08

Доказать продукт менеджеру что его робота не только придумать что делать, а еще писать и редактировать PRD очень сложно. Это не интересная задача от и от PRD мало толку если не знать как их использовать. #день2из7

15:08

Поднимайте вопрос о качестве требований на командных обсуждениях и предлагайте PRD как конкретное решение. Нужна критическая масса людей которые верят в то что это таки часть работы ПМа, а не просто хотелки разработчиков. #день2из7

21 августа 2019Среда
23 твита
8:34

"Мама, я тимлид!" Многие разработчики становятся тимлидами потому что это круто и они не видят альтернативы. Сегодня будем отделять котлеты от мух.

#день3из7

8:35

Согласно этой Teamlead Roadmap писать код как тимлид это 1 из 131 возможных обязанностей. github.com/tlbootcamp/tlr…

#день3из7

8:38

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

#день3из7

8:39

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

#день3из7

8:40

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

8:42

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

#день3из7

8:44

Роли и вопрос становления тимлидом я более детально разобрал в прошлогодней заметке: medium.com/hackernoon/how…

#день3из7

12:57

Тимлида в любой момент времени кто-то считает конченым мудаком. Если никто не обижен на тимлида скорее всего он плохо продвигает интересы компании/подчиненных.

#день3из7

12:57

Быть ТЛом это не только принимать важные решения, а также защищать своих подчинённых и продвигать их интересы в компании. Помните, вы начальник своих подчиненных временно, а как долго зависит во многом от вас. #день3из7

12:57

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

#день3из7

12:57

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

#день3из7

12:57

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

#день3из7

16:23

Будучи разработчиком достаточно легко анализировать свои промахи: не сделал фичу или сделал плохо, кто-то будет недовольный. Это очень простой сигнал что нужно что-то делать. #день3из7

16:23

Понят что ты не делаешь как ТЛ сложнее, нужно все время использовать множество подходов и инструментов:

  • эмпатию
  • делегацию
  • фильтрацию указаний сверху
  • обратную связь
  • авторитет

#день3из7

16:23

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

#день3из7

16:23

Делегация — нужно отдавать задачи другим, а это очень тяжело. Особенно, если вы уверены что сами сделаете лучше. Хороший доклад на тему: youtube.com/watch?v=1bZ9EJ…

#день3из7

16:25

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

#день3из7

16:25

Обратная связь — создавайте возможность жаловаться:

  • 1-to-1
  • 360 team feedback
  • Ретроспективы/Пост-мортемы
  • Встречи вашего начальника и подчиненного (skip meeting)

И конвертировать в действия для себя и команды. #день3из7

16:25

Авторитет — это топливо для принятия решений с которым сотрудники не согласны. Не использовать намного опаснее чем использовать аккуратно. Будьте готовы брать ответственность на себя.

#день3из7

18:38

"Фильтрация указаний сверху" может привезти к образованию диады "папа - ребёнок" в команде. В итоге, цели лида могут могут не совпать с целями компании. Если связь сильная, лид решает уйти, то команда обречена, другой лид не сработается. Это вредит компании. Не надо так делать) twitter.com/mobileunderhoo…

У меня так и было, лид ушел, а с новым не сработался потому что он просто все перекидывал на низ по цепочке и старался не вступать в конфликт со своим начальством.
"Мне сказали делать глупость - я вам сказал делать то же самое". twitter.com/mike_emelyanov…

18:40

Разработчики часто считают 1-to-1 как трату времени. И чаще всего так и есть. Неопытные тимлиды используют встречу с разработчиком, чтобы узнать о прогрессе над задачами, дать ценные указания и возможно накинуть еще задач.

#день3из7

18:40

1-to-1 это встреча принадлежащая разработчику. Разработчик должен говорить о том что ему лично важно минимум 2/3 встречи. Поэтому задача ТЛа это установить доверие, чтобы разработчику не хотелось свалить по-быстрее и он видел в вас союзника.

#день3из7

18:40

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

#день3из7

22 августа 2019Четверг
9 твитов
8:27

Сегодня говорим о UK Tier 1 Talent Visa.

Многие знают (или догадываются) что можно переехать в Лондон по рабочей визе от компании-работодателя (Tier 2 General), но большинство не слышали о визе таланта.

#день4из7

8:29

Для меня просветителем оказался @wiruzx, который меня познакомил с обладателями визы (о важности их помощи ниже). А я, пользуясь случаем, передаю большое спасибо Виктору :)

#день4из7

8:38

Если сравнить EP и Tier 2 General, то ЕР не зависима от работодателя.

Если временно перестали работать, то вас не будут пытаться депортировать домой.

Можно стать контактором (LLC) что позволяет заработать намного больше денег сидя на контрактах по 6-12 месяцев.

#день4из7

8:38

С точки зрения документации на ET и EP все одинаково, только планка на EP ниже.

Я делал EP вариант, так как вероятность получить визу больше.

#день4из7

10:50

@mobileunderhood @wiruzx Так как ET то получить?

Получить абсолютно также.

Согласно блогу @pomidorus средние обладатели:

Tier 1 EP Visa - 20-40 лет, 0-5 лет в индустрии. И уже есть достижения, но еще есть куда расти.

Tier 1 ET Visa - 20-90 лет, 3-20 лет в индустрии. Признанный эксперт, часто цитируемый, иногда со стартапом. twitter.com/igrekde/status…

10:56

Первым делом нужно прочитать требования на gov.uk/tier-1-excepti…

#день4из7

10:56

Дальше, очень полезно пообщаться с кем-то, кто уже делал визу. В моем случае мне помогало несколько человек, но самую большую и безвозмездную инвестицию времени сделала @SBozhko. Света официальный Visa Ambassador, а также владыка devzen.ru

#день4из7

11:13

@mobileunderhood Надо ещё учитывать, что на EP есть лимит. Точно не помню какой сейчас но было 2 тысячи в год.

Да, каждый год 6 апреля начинаться новая квота 2000 мест. twitter.com/romk1n/status/…

13:55

@mobileunderhood @pomidorus Особо не изучал вопрос, поэтому заранее прошу прощения. Скажите, что является достижением в контексте этого вопроса?

Определение достижения намерено размытое.

Нужно доказать что вы делали что-то больше чем работали в IT компании, как ваша деятельность повлияла на индустрию. А также ваш (потенциальный) вклад в экономику UK. twitter.com/dskibin/status… pic.twitter.com/HJ4hOnuPHy

23 августа 2019Пятница
24 твита
8:52

Сегодня я расскажу как перестать обсуждать iOS архитектуру.

#день5из7

8:53

iOS Архитектура — это религия для разработчиков.

#день5из7

8:54

Религия — это миф о том как устроен мир

iOS Архитектура — это миф о том как должно быть устроено приложение

#день5из7

8:54

Какая религия "правильная"? Буддизм? MVP? Ислам? MVVM? Христианство? MVC?

Я считаю все религии полезны. Каждая учит как сделать мир (приложение) лучше.

#день5из7

8:55

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

#день5из7

8:57

Религия — это хорошее начало развития морального компаса

iOS Архитектура — это хорошее начало развития навыка проектирования приложения

#день5из7

8:58

Сила религии изменять мир вокруг зависит от количества последователей, если вашей архитектуре никто не следует, какая разница что вы считаете ее лучшей?

#день5из7

8:59

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

#день5из7

9:02

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

#день5из7

9:03

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

#день5из7

9:06

В итоге iOS разработчики, предоставлены сами себе, начали смотреть по сторонам и перетягивать другие архитектуры из 3 букв из соседних цехов.

#день5из7

9:07

Добавляя новые буквы (и наделяя их сакральным смыслом) началась гонка вооружения MVP/MVVM/VIPER/SILVER/DISCOVER/PIDOR.

#день5из7

9:10

@mobileunderhood Clean Architecture конечно! Сразу же подразумевается что все остальное unclean и даже dirty

Оговорюсь что Clean Swift Architecture (aka VIP) (набирающий популярность у павших от ВИПЕРА) это для сектантов и не имеет ничего общего с Uncle Bob's Clean Architecture.

#день5из7 twitter.com/simonovvasiliy…

9:12

Где началось наше занимательное архитектурное путешествие?

На Apple's MVC.

А почему мы не говорим о том что было до этого? Разве раньше не было архитектурных проблем?

#день5из7

9:52

Откладываем архитектурные заметки с Medium в сторону и погружаемся в историю.

1979, Trygve Reenskaug опубликовал оригинальный доклад об MVC.

Если хотите понять где Apple сделала шаг не туда, читайте оригинал и делайте выводы сами. folk.uio.no/trygver/2007/M…

#день5из7

9:53

Очень сильная заметка-разбор оригинального MVC (не пропустите ссылку на вторую часть в конце текста)

habr.com/ru/post/321050…

#день5из7

9:54

Моя заметка показывающая как всякие ВИПЕРы не далеко-то убежали от MVC

badootech.badoo.com/do-mvc-like-it…

#день5из7

13:17

12 Мая 1979, день рождения MVC

#ios #holiday

13:17

Но если бы Trygve не переименовал THING-MODEL-VIEW-EDITOR в MODEL-VIEW-CONTROLLER у нас бы сейчас был TMVE

#день5из7

13:19

Еще накину на Clean Swift Architecture(VIP)

Сверху Clean Architecture
Снизу Clean Swift Architecture

Не говоря уже о "Worker"

#день5из7 pic.twitter.com/m6MYpzM9pM

13:46

Оригинальный МVC подразумевал что Модель и Вид живут отдельно и их можно легко подменять. Но мало кто пишет UI независимый от Модели/Домена.

Если положить UI в отдельный фреймворк который не импортирует Модель/Домен. То его можно строить и тестировать отдельно. #день5из7

14:34

@mobileunderhood Можешь пояснить, что именно значит «UI независимый от модели / домена»?

Конкретный пример, вот в такие карточки можно прокидывать сущности модели типа User.

card.user = user:

А можно делать их независимыми от Домена:

// Mediator
cardData = {
title = user.title
subtitle = user.handle
}

// UI Framework:
card.data = cardData twitter.com/AndreyMishanin… pic.twitter.com/3g3lQxIEuN

14:34

То есть писать сначала карточку которая использует исключительно типы из вашего UI фрейморка.

Покрывать ее тестами, а потом в отдельном месте прикручивать свой домен (инжектить данные User или что угодно)

14:34

Хороший доклад про то как делать "props-driven UI"
youtube.com/watch?v=tnKeUr…

24 августа 2019Суббота
13 твитов
7:25

Сегодня (не) любимая тема всех разработчиков - собеседования! Поехали! #день6из7

7:27

Собеседования на первую работу это вообще цирк. У вас нету опыта и у нанимателя есть только два варианта: закидывать задачки алгоритмические (вы же только что в универе это проходили, да?) или давать писать код и смотреть что получаеться. #день6из7

7:29

Дальше, чем ближе вы подбираетесь к топовым компаниям в своем регионе тем сложнее и структурирование становится процесс.
У меня всегда было так что чем сложнее задания спрашивают собеседующие - тем интереснее потом работать в компании. #день6из7

7:31

Есть ли корреляция между сложностью собеседования и техническим уровнем собеседующих? #день6из7

7:35

У tech гигантов не спрашивают специфические знания платформы и часто нанимают просто software engineer. Также у них похожая структура собеседования и куча отзывов в интернетах. Это сильно помогает подготовиться. #день6из7

7:39

Компании по меньше обычно не имеют устоявшихся практик и спрашивают там то, что сотрудники считают важным. #день6из7

9:00

Проваливать собеседования - это не ошибка. Ошибка это не ходить на интервью и считать что уже самый умный, это конечно проще. Провальные интервью учат нас намного больше чем успешные. #день6из7

9:02

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

9:03

У неопытных собеседующих есть такой подход который можно назвать "техническая беседа о жизни". Это очень привлекательный для собеседующего подход так как он задает "интересные" вопросы находясь в зоне комфорта. При этом он как бы "копает в глубь". #день6из7

9:05

Такой подход очень опасен для собеседующих:

9:26

Не так важно что спрашивается а важно чтобы была "ровная планка" (even ground). То-есть вы спрашиваете всегда одни и те же вопросы и какдидат зарабатывает баллы. В конце у вас список с оценками, удобно, честно и мало места для бессознательных предубеждений (unconscious bias).

16:22

Отдаю на общее растерзание список iOS вопросов, которые я когда-то спрашивал на первом интервью. drive.google.com/file/d/1QZriqG… #день6из7

20:16

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

То есть, если в компании есть 3 разработчика задротa то и нечего набирать скиловых кандидатов с которыми не сошлись в интервью? twitter.com/Kan__Nabi/stat…

25 августа 2019Воскресенье
2 твита
9:12

В этот выходной отдыхаем. Темы нету, но отвечу на вопросы. #день7из7 #WorkLifeBalance pic.twitter.com/4yxF8dt77U

13:02

@mobileunderhood Спасибо за крутую неделю! Было интересно 😊

Всем спасибо за активное участие и отдельное @igrekde за приглашение!
С вами был @bohdan_orlov, до новых встреч! twitter.com/EbTvoy/status/…