Wiki Category: Дао

14 привычек высокоэффективных разработчиков

1. Пишите маленькие методы
2. Давайте содержательные имена
3. Не загромождайте ваши методы множеством параметров
4. Избегайте слишком большого количества методов в классе
5. Используя сторонние библиотеки, пользуйтесь LTS / стабильными релизами
6. Научитесь идентифицировать самые распространенные шаблоны проектирования
7. Всегда помните о разработчике, который придет вам на смену
8. Привыкайте к ударам по вашей гордости
9. Оставьте «кемпинг» более чистым, чем вы его нашли
10. Не бойтесь заниматься вещами, не связанными с написанием кода
11. Будьте фанатом документации
12. Оставляйте себе время на отдых и физическую активность
13. Учитесь отстраняться от личных чувств
14. Давайте хорошие советы

Читать дальше

На смерть Fixed Cost

Alexander Shishenin·Wednesday, February 13, 2019

Давно была мысль написать текст о том, почему разработка по модели Fixed Cost постепенно уходит в прошлое, но после пары диалогов на обедах во время Лидеров России, понял, что проблему многие уже ощущают, но не могут формализовать. Поэтому решил всё же написать, почему идея разработки по ТЗ и как следствие модель Fixed Cost останутся в очень небольшом сегменте рынка.

Для начала опишу ключевые фразы, которые являются маркерами проблемы. “Мы не можем найти программистов на наше замечательное ТЗ!”, “Руководство не понимает, чем заняты разработчики!”, “Да, вы сделали по ТЗ, но у конкурентов ведь лучше! Куда вы смотрели!!!”, “Мы вам выделили огромный бюджет, но после пяти лет разработки продукт не окупается!”, “Мы начали контролировать маржинальность разработки, а они начали крутить каждую гайку по два года!”

На первый взгляд может показаться, что это всё про разное, но на самом деле корень проблемы один. Ещё Брукс в своей книге “Мифический человекомесяц” в заключении писал, что время когда один человек мог уместить в мозг все аспекты цифрового мира, давно канул в прошлое. С тех пор ситуация для сторонников “продуманного плана” стала только хуже. Языков программирования и технологий расплодилось великое множество и даже в своей предметной области уместить всё в голову никто не может.

В результате мы имеем ситуацию, когда создание качественного ТЗ по своей сложности сравнимо с созданием самой системы. Это ооочень долго и ооочень дорого. Сторонники этого метода парируют, что разработка то теперь будет стоить дёшево, но вот только фигушки. Рынок программистов постоянно нагревается, разговоры о том, что он перегрет, среди сторонников ТЗ, идут постоянно, но вот только дефицит кадров такой, что ни о каком остывании пока речи не идёт. В результате, даже если хорошее ТЗ сделано, программистов на него найти сложно. Делать так, как написал другой дядя, с карьерной точки зрения, не имеет никакого смысла. Поэтому этим готовы заниматься только совсем начинающие, за которыми надзор нужен. А надзор сам по себе требует квалификации и желающих им заниматься на рынке не много, и стоят они дорого. Итог для любителей ТЗ очень печальный, им остаются индустрии, где итерации невозможны. Это в первую очередь медицина и космос, но в общей массе проектов, это капля в море.

Вторым важным фактором является предельная зависимость IT проектов от скорости разработки. Это доказал ещё Microsoft в момент своего вертикального взлёта и это ещё во времена офлайн. С приходом интернета понятие скорости разработки перешло на качественно иной уровень. Сейчас схема – сделали за неделю, раскатили на 1% аудитории, посмотрели реакцию, если хорошо, раскатили на 10% аудитории, если хорошо, то раскатили на всех, не вызывает удивления в индустрии.

Но ровно эта схема, это ночной кошмар сторонников fixed cost. Оплачивать каждую неделю отдельно? А что если аудитории не понравится? А как же длительные итерации, долгие переговоры и согласования? И правда в том, что на эти вопросы нет ответа, кроме как – смиритесь, жизнь изменилась и по-старому уже не будет. Причин две. При реализации нового, право первой ночи критически влияет на успех. А при развитии старого, никто не может предсказать реакцию текущей аудитории, а именно она является священной коровой большинства текущих сервисов. Может ли из-за плохого обновления разбежаться треть аудитории? Ещё как может и это не самый плохой вариант. И зачем тогда клепать обновления по несколько миллионов долларов? Только если маркетинг обещает привести под обновление больше, чем можно потенциально потерять. У молодого продукта математика этого решения ещё может сойтись, у возрастного и популярного, практически нет.

Третьим важным фактором является эффект бабочки в ТЗ. Дело в том, что желание что-то поменять у заказчика возникает регулярно. Этому способствуют действия конкурентов, результаты промежуточных приёмок и много чего ещё. Да и само по себе это желание правильное, но вот только модель fixed cost его не предполагает. Связано это с тем, что атомарные изменения в современных IT системах можно сделать крайне редко. Да и нормальный заказчик смотрит именно ключевой функционал, от которого должна зависеть вся система. Но формальное ТЗ в случае fixed cost это штука плоская. В нём нельзя написать, что этот интерфейс не особо важен для ключевого функционала, согласуем в последний месяц разработки. Каждый элемент должен быть описан заранее. Но вот бац, заказчик осознал что в ключевом функционале есть проблема и её надо поменять. И вот мы видим эффект бабочки или как по всему ТЗ катится цунами обновлений, которые ведь надо согласовать, забюджетировать и много чего ещё. Эксперты и аудиторы потирают руки и прикидывают, какой бонус попросить за внеурочную работу. И так будет каждый раз, когда нужно будет что-то изменить и цена такой итерации совсем не нулевая и в итоге fixed cost может вырасти и в два и более раз. Тем, кто думает, что такое случается только в IT, советую почитать, как строят новый аэропорт Берлина. И это в Германии, которая достаточно прозрачная страна. Поэтому да, помните про эффект бабочки в большом проекте. Он может стоить очень дорого.

Казалось бы, уже этого достаточно, чтобы убить fixed cost, но есть ещё один важнейший фактор. Это техническая сложность систем и предельная зависимость от личной ответственности практически каждого разработчика. В современном IT настолько просто сидеть на зарплате и пилить задачи по плану, что практически все системы контроля рабочего времени работают крайне плохо. Обосновать, почему задача на 1 час, стоит 8 часов, может практически любой программист. Раскрыть его могут только коллеги и иногда руководитель группы. Те, кто выше, практически не имеют шансов предъявить конкретные претензии ощутимому проценту разработчиков.

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

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

Цена акции и общая успешность компании из проблемы далёкого дяди, становится личной шкурной мотивацией. И вот случается чудо, Вася видит, что Петя пилит по восемь часов, то, что надо пилить за час. Ранее его мотивации начать делать то же самое, ничего не мешало. Круговая порука и всё такое. Но вот акции… Если мы будем бездельничать, то опцион не вырастет в цене и шансов стать миллионером не будет. Да, если я стану миллионером, то дядя сверху станет миллиардером, но блин… другого легального способа на простой работе стать миллионером нет. И вот круговая порука ломается, Вася вначале говорит с Петей, если тот не понимает, то с начальником Пети, если тот не понимает, то Вася идёт выше. Вася не боится потерять работу, так как он хороший программист и найти схожую вакансию для него не проблема. То есть хуже ему не станет, даже при увольнении, а вот не потерять возможность стать миллионером, это стоит того чтобы добиться решения проблемы. И вот у нас уже не коллектив исполнителей, а коллектив собственников. Да, им куда сложнее управлять, но зато в нём каждый реально нацелен на рост стоимости компании.

Казалось бы, а какое отношение опционы имеют к fixed cost? Ведь заказная разработка практически не имеет отношения к стоимости компании. Ах да… найм… Чтобы перекрыть бонусы от опционов, основное тело зарплаты надо поднимать до совершенно неприличных размеров, да и то, от проблемы высиживания стула, это не избавит.

В итоге не делать опционы могут позволить себе только проекты, у которых предельно высока нематериальная стоимость. Это в первую очередь социальные проекты, а во вторую оборонка и общегосударственные сервисы, где умелое использование патриотизма исполнителей может давать огромный эффект. Но это всё очень тонкие материи, работать с которыми умеют единицы, да опять-таки, патриотизм и социальная ответственность по фиксированной цене не бывает.
В итоге fixed cost останется только в космосе, медицине и других подобных областях, где итеративность невозможна просто в силу природы этой области. В остальных переход на опционы и схему time and material по сути неизбежен. Те, кто этого не будут делать, рано или поздно проиграют конкуренцию.

ТОП 50 шуток программистов о себе

Если вы посмотрите на код, который вы писали более полугода назад, то, скорей всего, вам покажется, что автор – кто-то другой.
Главная проблема при работе со штатом программистов: никогда не поймешь, чем заняты сотрудники, пока не окажется, что уже наступил дедлайн.
Обычно на написание 90% программного кода разработчикам требуется 90% отведенного на проект времени. А дальше случается парадокс: оставшиеся 10% работы требуют … 90 или даже 100% времени.

Читать дальше

просто за-бали уже до чертиков со своими высерами про цеховых рабочих

Утянул у

Gennady Dogaev full-stack web developer (freelance)

ну вот жеж, любое сравнение с обычной работой на потоке тебя подрывает неслабо, судя по прошлому комменту)

Я прямо сейчас кое-что «собираю из готового», и прямо-таки матом не ругаюсь, а разговариваю, поэтому да — меня дико бомбит от этих высеров про цеховых рабочих.

Чисто для примера сборки из всего готового:

  • Разработчики фреймворка вообще молодцы и создали классную вещь, но они клали на анимацию при перереходе между страницами (а без анимации SPA по ощущениям таки похуже, чем с ней, даже статья вот есть почему)
  • Разработчик плагина для той самой анимации тоже молодец и проделал огромнейшую работу, но не учел особенности при подгрузке данных с сервера и не под каждую верстку оно одинаково хорошо работает
  • Ну и разработчики UI-фреймворка тоже конечно молодцы, но они клали на всё вышеописаное

И вот оно по отдельности вообще все офигенное и классное и осталось только все вместе собрать в свой сраный примитивный CRUD, но не тут-то было — всё вместе оно начинает работать криво и ты не нагуглишь почему, потому что до тебя никто не использовал это с тем же UI-фреймворком и большинству не нужна была отдельная анимация для загрузки данных. И начинается самое интересное — понять что не так с твоим сетапом что у тебя оно не работает как ты хочешь, и либо найти воркэраунд методом тыка, либо погрузиться в большое количество кода незнакомых тебе людей чтобы понять до конца как оно устроено и в чем реальная причина твоих бед. Цеховой рабочий, *** !

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

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

gty_dog_cat_ll_1203008_wmain

Типичные ошибки заказчика при работе с фрилансером

фрилансер (freelancer) — «свободный работник, частный специалист, который может одновременно выполнять заказы для разных клиентов» © Википедия. Как правило, фрилансер работает удалённо, отыскивая заказы через интернет. Занимается поиском более-менее постоянно, потому что работа имеет свойство подходить к концу. Это фактически бизнесмен — владелец фирмы из одного человека. Для многих фриланс — первая ступень к страницам Форбс (ну или они на это надеются). То есть неправильно строить взаимодействие с фрилансером по модели начальник-подчинённый.

Далее, коль скоро фрилансер — бизнесмен, выполняющий разовые заказы, он не является частью вашей команды. Заключение вроде бы очевидное, но при переговорах о нём часто забывают. Да, я прагматично работаю за деньги и не интересуюсь карьерой. Нет, я не дам вам скидку только потому, что у вашей быстрорастущей фирмы временные сложности с финансами. Тем более ничего не буду делать бесплатно. Почему? Да потому, что с одной стороны любая скидка означает меньше денег для меня и моей семьи. С другой — никаких плюсов конкретно для меня от неё не будет.

Читать дальше

Scope creep: причини і наслідки

Чи виникало у Вас коли-небудь таке відчуття, що продукт ніколи не вийде в реліз? Щоразу після зустрічі з представниками замовника з’являється потреба у новій функціональності, а обсяг робіт по існуючому функціоналу росте як на дріжджах. Як наслідок, усі початкові бюджети перевищено, а строки завершення робіт протерміновано. Знайомтесь — перед вами розростання обсягів проекту (в англомовній літературі «scope creep»).

Читать дальше

Сколько стоит создание сайта

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

Однако этот вопрос заказчики постоянно задают.

Читать дальше

Какую оплату за проект лучше выбрать фрилансеру: фиксированная или почасовая ставка?

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

Так, сколько вам действительно брать с клиентов? Как понять, сколько стоит работа, чтобы ваши цены были конкурентоспособными и адекватными?

Читать дальше
3016e3bd0ba4637422e07383309cc9c9

Внедрение без ТЗ: дорога в никуда

ТОП-6 фраз клиентов

И так всё понятно — зачем тратить время?
Здесь всё просто! Да я на пальцах объясню
Почему я должен платить за то, что войдёт в следующий релиз?
Я не умею его составлять
Да программисты ничего не понимают в продажах (бизнесе, складе, бухгалтерии и т.д.)!
Вы составляете ТЗ за деньги?!
Я подразумевал другое!

Читать дальше
6de82e4fa8494d95b7184197a589b7c9

Без ТЗ: почему клиент не хочет его

«У нас очень маленький и простой проект»
«Это коммерческая тайна, мы вам не расскажем»
«Сначала скажите сколько стоит!»
«Почему мы должны платить за то, что нужно вам?»
«Мы хотим увидеть варианты!»
«А вдруг у нас изменится концепция»
«Нам нужен точный клон этого…»
«Придумайте сами — вы же специалисты!»
«Мы сами напишем/написали ТЗ»
«Другие программисты не примут ваше ТЗ»

Читать дальше

Менеджерско-программистская выжимка за 17 лет в отрасли

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

Читать дальше

«Мир есть совокупность фактов, а не вещей»: Витгенштейн и операционно-ориентированное программирование

За каждым методом бизнес-логики стоит факт мира, который этот метод (чаще не в одиночку) моделирует. Факты программирования – это операции: дальше будем называть их так. Делая метод членом класса, ООП требует от нас привязать операцию к объекту, что невозможно, потому что операция – это взаимодействие объектов (двух и более), кроме случая унарной операции, чистой рефлексии. Метод ВыдатьЗарплату (PaySalary) может быть отнесен к классам Сотрудник (Employee), Касса (Cash), БанковскийСчет (Account) – все они равнозначны в праве владения им. Дилемма о расположении методов сопутствует всему процессу разработки: неловкое ее разрешение может оказаться критичным и даже фатальным.

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

Читать дальше

6 вопросов, которые спасут проект

Недавно знакомый предприниматель поделился со мной своей бедой: «Не знаю, что делать с менеджерами проектов. Половину проектов мы делаем плохонько, а вторую половину – еще хуже. Несмотря на два десятка KPI и регулярную отчетность, они все равно не выявляют проблемы на ранних стадиях, и поэтому мы тратим вдвое больше ресурсов. Кроме того, слишком часто мы вынуждены идти на поводу у заказчиков и снижать выручку проекта. И ведь ПМ-ы – парни все хорошие и стараются, но получается все равно кое-как».

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

Так что же делать? Куда смотреть? Как понять, что в проекте уже что-то идет не так? И что именно?

Читать дальше

Класс объектов или объекты класса?

Пусть у нас есть конкретная машина. КОНКРЕТНАЯ! Не тип и не класс машин, А именно конкретная машина, на которую я указываю своим указательным пальцем. Хозяин этой машины утверждает, что его машина состоит из множества компонентов, в том числе из колес. Он говорит, что его машина состоит из пяти колес (одно запасное). Замечу сразу, что хозяин говорит: «состоит из», а не «включает в себя».

Вопрос: слушая хозяина машины, что мы себе представляем: то, что машина состоит из колес одного класса?

Читать дальше

Люди не умеют оценивать

Исследователи попросили несколько групп разработчиков дать оценку некоторых программистких задач, описанных в спецификации. В среднем, группы оценили работу в 100 часов (я пропорционально привел все данные в исследовании к круглым цифрам, чтобы было проще запоминать).

После чего, начались следующие эксперементы:

Читать дальше