Как стать автором
Обновить

Практическое пособие «Как вывести из себя программиста»

Время на прочтение 6 мин
Количество просмотров 58K
Всего голосов 58: ↑46 и ↓12 +34
Комментарии 117

Комментарии 117

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
И не только у автора.
И не только глаз.
Вы — программист, которые не отвечает за свой код?
Что-то постоянно открешиваетесь от тестирования.
Хотя бы TDD программист должен делать сам, счита.
BDD — возможно и нет.
TDD — это процесс, а не просто работа программиста, так что он может применяться, а может и не применяться.
И, что более важно, TDD никак не исключает QA.
В мире давно уже все делают все
https://habrahabr.ru/company/jugru/blog/314644/
«о главных принципах DevOps. Помогайте друг другу, что ли...»

А автор того коммента — открещивается только.
Живет в каком-то прошлом веке — я программист и QA не моя задача.

Его слова — это не слова не профи, а слова профана.

«В чем же принципиальное отличие DevOps подхода от стандартного подхода в QA?

– Из моей собственной практики — в DevOps подходе люди начинают больше писать интеграционных тестов, сокращают циклы разработки. Continuous Delivery — вполне естественный процесс доставки изменений в DevOps среде, а это косвенно улучшает ситуацию для QA, уменьшая количество изменений в билдах, которые ему требуется протестировать. Конечно, ценой увеличения количества этих самых билдов, но тут уже вопрос баланса.»

"– Чаще всего в DevOps используется Continuous Delivery, для которого характерен быстрый темп выкатывания новых релизов и деплоя. Не превращается ли это в итоге в «крысиные бега», когда один человек занимается и написанием кода, и тестированием, и административными функциями?

– Ну, если Вы у себя в команде нанимаете «DevOps-инженера» — то превращается. До тех пор, пока DevOps будут связывать с конкретными людьми — то ситуация будет выглядеть примерно так, ведь спрос будет идти с этих конкретных людей. А вот когда у вас уже команда «пропиталась» DevOps-ом — то выкатыванием занимаются все вместе. Ведь, напоминаю, работа разработчика не заканчивается коммитом, она там только начинается. Довести свои изменения до конечного пользователя — вот это цель каждого. "

В июне 2016 года на сайте devops.com вышла статья «How DevOps is Killing QA», в которой говорится, что DevOps не нуждается в QA.
Удалите у себя из головы фразу «Ты ж программист»… или мне может еще и самому нарисовать эту кнопку? а ну да и протестировать же тоже обязан… может еще и чайник отремонтировать? — ну да «Я ж программист»
> Ты что, не видишь как всё х%%во?! Сделай что-нибудь!
… краткая постановка задачи менеджером
Как вывести из себя программиста

Немного похоже на «Как стать непрограммистом».
Вот я тоже сначала подумал, что в заголовке имеется в виду «Как перестать быть программистом и начать жить».
только ради этого открыл статью
«Метод Кошастого» почитайте. Есть такой дауншифтер, бывший ИТ-шник с высшим биологич. образованием, который предрёк ресурсный кризис и за 10 лет до поджигания покрышек в Киеве свалил оттуда на хутор коней пасти.
Я до чтения статьи думал что это мегамозговское «как вывести из себя программиста и стать (розовым слоном, например)». «Как изжить в себе программиста», а оказывается банальное «как задолбать».
Я несколько раз пытался вывести программиста из себя — он иногда мешает общаться и искажает ход мыслей пользователей. Но так и не смог.
Если ты не закончишь вовремя — придется отдать на фриланс
Через неделю
«Нужно кое-что глянуть в работе этого фрилансера. Это быстро и несложно»
Есть один хорошо знакомый конструктор — сидит в своём «Солиде» полный рабочий день безотрывно.
Вот один-в-один всё как тут, даже включая «отдать во фриланс… глянуть быстренько, что там наваяли фрилансеры».

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


Ну и как тут не нервничать? :-)

Вот взгляд со стороны WEB.

Описание бизнес процесса ->
Спецификация ->
Дизайн ->
Верстка ->
Frontend ->
Backend ->
QA ->
Bug fixing ->
QA ->
Staging ->
QA ->
Bug fixing ->
QA ->
Production

Итак, вам нужны:
1) BA
2) Product manager
2) Designer
3) Верстальщик
4) Frontend developer
5) Backend developer
6) QA
7) Release manager
8) *nix администратор

Если посмотреть hh, то можно запросто заметить тенденцию на покрытие пунктов 3,4,5,6,7,8 за счет одного человека. Бизнес можно понять, бизнес пытается не раздувать штат, но и покупая запорожец не стоит ждать от него работы на уровне мерседеса. Покрыть все бизнес процессы на которые требуется 8 специалистов за счет 2-3 == принять на себя риски по некачественной реализации практически каждого из них.

И это еще без взаимодействия расчет. А если добавить сюда синхронизацию со всякими 1С, внешние сервисы и поддержку клиентов, то можно еще 4 спецов добавить. Потом выстроить их взаимодействие между собой и управлять командой с помощью лидов. И вот после этого, когда условия для разработки созданы в полной мере, можно смело требовать полного соблюдения сроков и работоспособности.

Но, программисты не требуют бизнес аналитиков и грамотных спецификаций, да и покрывают несколько специализаций самостоятельно. Бизнес со своей стороны терпит по срокам, экономя на штате. Все просто :)

Когда в следующий раз начнете нервничать, просто умножьте каждый пункт на 70-90к рублей (на средних спецов) и сопоставьте с потраченными нервами))) В среднем это от 200 до 500к в месяц. Потом сравните с реальными потерями от простоя и может быть трата нервов будет обходится дешевле хорошо выстроенного процесса))) Have a nice day))
увы, менеджеры вас не читают и не слышат. Им нужна кнопка «сделать все», чтобы уволить этих обнаглевших программеров совсем.
Вспомнился анекдот:

Менеджер говорит программисты:
— Искусственный интеллект уже близко, и скоро программисты будут вообще не нужны. Я просто дам искусственному интеллекту полное и подробное описание того, что программа должна делать, и он мне сам напишет код.
Программист:
— А ты знаешь, что такое полное и подробное описание того, что должна делать программа? Это и есть код.
Посмеялся после
Я просто дам искусственному интеллекту полное и подробное описание того, что программа должна делать,
Я даже знаю у кого это получилось (всех технарей). Жили счастливо (когда всё работало), но не долго, ибо доработки под их хотелки сами не появляются, а искать кого «быстро посмотреть» стоит денег. И времени. И разгребания последствий. Что тоже стоит денег. И времени. И…
Где же что-нибудь про оценку трудозатрат? Меня это больше всего «радует», например. «Сколько тебе надо времени, чтобы это сделать?», я бы так это назвал.
пункт «Скажи точно, когда закончишь»
Через 10 лет точно будет готово. Может раньше управлюсь.
Хорошо.
Когда закончу, скажу: «Точно».
НЛО прилетело и опубликовало эту надпись здесь
— Ты потратил на этот баг неделю, а в итоге поменял только 2 символа в одной строчке? Чем ты занимался всё это время?
Вспоминается байка про «удар молотком — 1 доллар; знал куда бить — 9999 долларов»
+1
НЛО прилетело и опубликовало эту надпись здесь
>> «Скажи точно, когда закончишь»

Есть две простые задачи:
1) посчитать количество букв в предложении.
2) засечь время.

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

Эта простая задача не должна занять много времени, считать буквы вы умеете, секундомером мпользоваться тоже.
«Скажи точно, когда закончишь» — актуальная для меня на данный момент.
— «Нужно интегрировать нашу систему вон с той. У нас нет документации, но ты разберись. Когда сможешь сделать? Ну хотя бы примерные сроки ты можешь сказать?»
Вы так говорите, как будто это в первый раз :)
надо отвечать «потребуется неделя, приступить смогу через восемь месяцев, до этого момента все задачи расписаны»
Ага, да, примерные,
а потом «Ну тыже обещал сделать все за XXX времени, а потратил XXX+10% !!!!111адинадин»
А вообще в таких случаях берется время на анализ/изучение вопроса,
к примеру 3 дня,
не хватило — берешь еще время, тут уже обычно есть представление сколько еще нужно времени на доразбор
потом можно обсуждать сроки разработки.

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

А ещё надо учитывать, что каждый вышестоящий уровень уменьшает названное исполнителем время где-то процентов на 5-10.

Программист сказал, что сделает за неделю, руководитель отдела назвал 6,5 дней, координатор уже рассчитывает на 6 дней… Директору докладывают, что всё будет готово к утру, с чем и поздравляют исполнителя, который теперь уже вынужден работать ночами!
Последний плюс вариант к этому:
— Чем сейчас занят?..
— (Перечисление 2-3 задач с «приоритетом 0», которые чередуются, т.к. каждая в процессе требует то неготовую аппаратуру, то результат другой задачи + «быстро посмотреть что сломалось»).
— А, ну это не долго/не сильно загружает, вот ещё одна задача…

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

— Нужно кое-что глянуть. Это быстро и несложно
Это значит что кто-то, директор или клиент, что-то заметил и нужно глянуть.(Нужно с бизнес точки зрения) Менеджер конечно хочет чтобы все быстро исправили, но если это большая серьезная проблема, нужно просто ему об этом сообщить.
Т.е. заводим тикет — глядим, можем быстро пофиксить — фиксим, не можем, заводим еще один — кидаем в backlog, объясняем менеджеру.

— Ты так долго писал код, в нем же больше нет ошибок?
Если долго писал значит время куда то уходило (а значит и деньги на твою ЗП), поэтому — что получил наниматель взамен должно быть прозрачно. И если в трекере больше нет багов — то ответ на этот вопрос: «Да, в коде больше нет багов, о которых нам было известно»

— Ты должен мыслить как клиент
Это вообще делает процесс написания кода более приятным. Когда ты понимаешь как и кто будет этим пользоваться. Сходил, как то, на 'User testing', при мне 40 летний дядя из глубинки тыкал на прототип продукта в iPad, потому что он тренировал школьников и реально хотел считать индивидуальную статистику для игроков. Это меняет, теперь понимаешь что размер кнопки интерфейса может быть на самом деле важнее, чем ответ от сервера в 200мс вместо 500мс и использование quick-sort вместо пузырька. И оптимизируя css на сайте под IE, теперь знаешь, что, где то там, есть реальный человек, который просто кликнул на иконку «Интернет» и хочет решить свою проблему на твоем сайте, это скучное действо(правки css) превращается в наполненное смыслом.

— Я плачу за код, а не за комментарии
Я не пойму, какой то программист забюджетировал время на комментарии? Откуда менеджер вообще знает о комментах в коде? Понятно, что менеджер возмущен. Представьте вы отдали машину в сервис, получая счет там есть пометка «Внесение записей в блокнотик 40мин — 1500руб» вы не понимаете в чем дело, вам объясняют, что механику необходимо делать пометки чтобы работа была выполнена. И вроде все логично -> Но у вас ничего кроме ощущения 'развода' не останется. Если эта часть работы и менеджера интересует результат, ну зачем менеджеру все эти внутренние подробности.

— Скажи точно, когда закончишь
Давайте поймем что такое «законченный» и тогда будет понятно когда. Нет всех деталей, не совсем понятно что такое законченный. Ну давайте сделаем сейчас то что понятно, а это уже можно оценить.
(вот вам и agile. Ок вроде ясно что за неделю-две сделаю то и то, посмотрим что получилось, и потом поймем как двигаться к «законченному») Не понимание сколько времени займет та или иная хорошо определенная задача — признак малого опыта. Если задача не совсем определена — опять же можно сказать что знаешь более менее, а что не понятно и почему. Когда фирма/работник не может сказать, когда она закончит и сколько будут стоить ее услуги, с такой фирмой, невозможно работать. Это как вызвал такси и спрашиваешь мне нужно очутиться там то, сколько стоит — а вам водитель такой: «Ну не знаю, как карта ляжет»
Или: «Это 25км, без пробок 30 мин — в итоге, подчеркиваю — без пробок и по короткому пути: 500руб, но в случае пробок доп минута — 1руб, в случае объезда 15руб — 1км»
С каким поедете?

— Хватит тестировать, пора запускать
Во всех не болотных компаниях давно есть CI/CD практики, при таких условиях такой вопрос просто не возникает.
«Конечно, давайте запускать» — но для начала для 1% траффика или для клиентов которые подписались на beta. Что-то посыпалось — отлично, теперь мы знаем о критической баге, которую никак кроме как запуском не выловишь. Исправим и снова запустим. А маркетинг с рассылками и.т.п. пусть сам планирует в какой момент какую компанию и рекламу запускать.
Я не пойму, какой то программист забюджетировал время на комментарии? Откуда менеджер вообще знает о комментах в коде?

Документирование, втч комментарии, может вестись пост-фактум. Здесь и получается, что продукт готов, но программист почему-то чем-то занят.

С каким поедете?

С тем, кто приехал на вызов.
Товарищ гуманитарный менеджер, перелогиньтесь.

P.S. По вызову цена уже известна со слов диспетчера.
Товарищ гуманитарный менеджер, перелогиньтесь.

Вас, разумеется, не затруднит пояснить столь искрометный юмор.

P.S. По вызову цена уже известна со слов диспетчера

Угу
Это как вызвал такси и спрашиваешь

У кого, и зачем, если вам при вызове все говорит диспетчер?

P.S. ни разу в жизни не было такого, чтобы диспетчер называл цену — это вообще не его забота. Это, вероятно, какая-то местная особенность.
> Вас, разумеется, не затруднит пояснить столь искрометный юмор.
«Документирование, втч комментарии, может вестись пост-фактум.»

То есть сперва написал код, потом его еще раз перечитать целиком, чтобы комментарии расставить?

Если пишешь код с комментариями, это нужно делать СРАЗУ по нескольким причинам:
1) Ты пишешь код, ты знаешь что ты написал — сразу закомментируй. Комментировать потом — трата времени на перечитывание кода.
2) Например в Java, с ее javadoc, комментарии это часть языка. Анализаторы могут ругаться, что функции не задокоментированы.
3) Если ты работаешь по таскам, как ты объяснишь менеджеру, что ты фичу вчера доделал и время по ней залогировал, и закрыл и отдал в тестирование. А сегодня ты на нее снова логируешь время, хотя дефектов там тестировщики не нашли. Просто тебе комментарии вдруг нужно написать. Но если это нормальный CI, то после коммита твоих комментариев, по правильному новая версия должна пройти заново весь цикл тестирования, независимо от того, что там всего лишь комментарии добавились.
> 1) Ты пишешь код, ты знаешь что ты написал — сразу закомментируй. Комментировать потом — трата времени на перечитывание кода.

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

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

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

1) Ты пишешь код, ты знаешь что ты написал — сразу закомментируй. Комментировать потом — трата времени на перечитывание кода.

Смотря о каких комментариях мы говорим и смотря сколько времени прошло между этими моментами.

2) Например в Java, с ее javadoc, комментарии это часть языка. Анализаторы могут ругаться, что функции не задокоментированы.

Мир ею не ограничивается.

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

Да без проблем. У нас даже отдельная статья есть по которой можно закреплять время — для отдельного code review.
Например, ты закончил свой участок работы по функционалу и можешь передать задачу далее в QA. При этом ты можешь доделать комментарии по логике какого-нибудь legacy, в котором ты разбирался по ходу таска. В итоге сам таск отдан дргим людям, они не простаивают.

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

Отдельное тестирование после коммита комментариев no functional changes? Спасибо, но нет. У нас есть стандартный еженедельный цикл тестирования ключевых точек продукта плюс ежечасные юнит тесты, этого достаточно.
P.S. ни разу в жизни не было такого, чтобы диспетчер называл цену — это вообще не его забота. Это, вероятно, какая-то местная особенность.

Есть города >1кк, где это стандарт де-факто. Называешь адреса, тебе сразу говорят сумму. Ни от каких пробок она не зависит (и не понятно, почему должна).
Вполне допускаю, просто не понимаю этого «назвать адреса», «цена заранее». Ты вызвал машину в эту вот точку пространства. На этом работа диспетчера завершилась. А куда ты там потом поедешь — да черт его знает, еще десять раз передумать можешь. Или заехал по пути за знакомым, ждешь его — почасовая оплата тикает. И так далее.
Расстояние рассчитывается по карте отсюда и цена. Время ожидания фиксированное, X рублей минута — легко плюсуется. Если изменился маршрут — водитель связывается с диспетчером, стоимость пересчитывается с учетом новых данных.
Расстояние рассчитывается по карте отсюда и цена

А дорога только одна? Если пассажир хочет заскочить в магазин или к банкомату?

Время ожидания фиксированное, X рублей минута — легко плюсуется.

Да, но оно заранее неизвестно

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

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

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

Да, но оно заранее неизвестно

А зачем оно заранее? Стоимость проезда, допустим, 350 рублей. Минута ожидания 5 рублей. У банкомата провел 3 минуты. Доплачиваешь 15 рублей. Вроде бы не сложно суммировать :)

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

Нет никаких счетчиков, все расстояние считается по карте. От точки А до точки Б. Если добавляется новая точка в процессе, она сообщается диспетчеру, он пересчитывает и сообщает новую сумму.
Нет никаких счетчиков,

Интересная система. А где гарантия, что диспетчер не обманывает при расчете? Счетчики-то пломбируют и поверяют.
Имхо, гарантом выступает факт конкуренции: будут высокие цены, будут редко заказывать :)
Да и технически там все оцифровано, диспетчеров целый штат, ip-телефония, все логируется, номера телефонов, явки, пароли, адреса — откуда, куда, когда (можно потом юзать историю поездок и заказывать такси без участия диспетчера) и пр.
Кстати, после того, как приняли заказ, приходит, как правило, три смс:
  1. инфа о заказе, с адресом и стоимостью поездки;
  2. смс о том, что заказ принят водителем — сообщают номер, марку и цвет машины;
  3. наконец — что машина подъехала.

P. S. В Екатеринбурге, к примеру, уже лет 5, наверно, как такая схема стандартом де-факто является… Для меня было неприятным сюрпризом, что в МО службы такси, которыми я пользовался в течение 2013-16 годов о такой системе даже не слышали.
>> ни разу в жизни не было такого, чтобы диспетчер называл цену — это вообще не его забота.

Нормальные фирмы всегда называют. У диспетчера есть расстояние и примерное время в пути — из этого легко рассчитывается стоимость поездки. Это намного комфортнее для клиента, чем узнать по приезду машины что поезда будет 2000 и или соглашаешься или ждёшь другого с шансом опоздать. Местная особенность крупных городов.

PS. Это ещё и контроль таксиста — если он сотрудник, то под брендом такси не будет делать «левак».
Как вести с другой планеты. Откуда диспетчеру знать, куда я поеду, сколько раз поменяю маршрут, сколько будут меня ждать, пока я по дороге сигареты покупаю или снимаю деньги… Его дело — найти мне машину, и все. Такси — оно как бы называется так, потому что человек едет по таксе, само слово предполагает неоднозначность.

Это намного комфортнее для клиента, чем узнать по приезду машины что поезда будет 2000 и или соглашаешься или ждёшь другого с шансом опоздать.

У нас просто все фирмы, штук 30, сведены на одном портале, там видно и цену за км.

PS. Это ещё и контроль таксиста — если он сотрудник, то под брендом такси не будет делать «левак».

Да даже в этом случае: когда расчитываешься, все же в счетчике фиксируется, проверяется на раз, а без счетчика никто не поедет. Не говоря уж о GPS.
>> Откуда диспетчеру знать, куда я поеду, сколько раз поменяю маршрут, сколько будут меня ждать, пока я по дороге сигареты покупаю или снимаю деньги…

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

>> штук 30
Тут в одном районе чуть не такое количество фирм наберётся, на каждую работают некоторое количество таксистов (у некоторых договор сразу с несколькими), некоторые могут таксовать на своей машине (не постоянно), счётчики для таких случаев — проблема, а без счётчика мы отлично помним случаи называния цены по приезду и доставки на исходную точку в случае несогласия.
Наверно, от размера города зависит. У нас таксовать можно только на машине со счетчиком, чья она — неважно. Важно, чтобы чек можно было получить в конце поездки. Все равно удивительно.
На заре своей IT-карьеры работал в одном стартере. Там был своеобразная бизнес-модель, решения изменялись в последний момент. Так вот там инвестор (он же гендир) постоянно удивлялся, как можно не уметь оценить точные сроки выполнения задач. Он сам из строительного бизнеса, и я ему привел пример. Представь, что ты должен уложить асфальт на пяти квадратных км. Все просто, считается элементарно. Но только асфальт нужно уложить на вертикальную, постоянно меняющуюся поверхность. А еще тебе не известен состав и поведение асфальта, потому что его изобрели позавчера. Техники, способной уложить асфальт вертикально, вообще не существует, ее нужно сперва изобрести. А на середине процесса ПМ, увидев, как сложно идет укладка, говорит «ну нафиг, давай горизонтально, но сорок км, а не пять». После этого тема точных сроков как-то поутихла.
Невыполнимых задач не бывает, есть только требующие значительного количества времени или другого ресурса (которого, естественно, в нужных объемах нет).

Руководитель/менеджер не хочет слышать «нет, невозможно», он обычно хочет видеть варианты (пусть даже укрупнённые), из которых он выбирает: хотите 5км вертикально? Нет проблем, за вертикальный асфальтоукладчик готов взяться Завод тяжелого машиностроения им.Кащенко, его создание займёт 10 лет, стоимость будет -надцать млрд, если всё ок — завтра приступаем, итого в 11 лет уложимся. А можем дёшево и сердито положить горизонтально, за неделю, ещё и в 8 раз больше.

Так и с ПО: получая задачу ты уже в голове (а лучше на листке) прикидываешь примерный объём работы, к концу совещания уже готов примерный план работ. Можно прикинуть сроки, лучше умножить на 2 или 3. Понятны задачи, что являются ключевыми, а на чём можно сэкономить и сделать после сдачи (а даже если не сделать — не критично).

Я одно время в одной интересной отрасли (не медицина, конечно, но попытка тоже даётся только одна) получал задачи класса «завтра едете туда-то, что делать — определяетесь на месте, задача должна быть выполнена». То, что нужна подготовка, предварительное обследование, планирование и прочее — никого не волнует… Две минуты на обдумывание, навскидку 2-3 возможных варианта исполнения, согласование одного из предложенных.

Партия сказала «Надо!», комсомол ответил «Есть!». Мотивируем сотрудников на выполнение невыполнимого. Приехали, обследовали, на месте принял/уточнил/согласовал решения, спланировали, развернулись, отработали, свернулись, уехали. Самое сложное для меня было так распределить и донести задачи, чтобы исполнители с ними справились. А самое страшное было то, что результат зависит ото всех: один накосячит — накроется работа всей команды. Но при этом я сам знаю всё, что должен сделать исполнитель и могу проверить/исправить его работу.

Но зато все довольны: и заказчик, и руководство, и непосредственные исполнители, т.к. выполнили «невыполнимое».

В этом был свой драйв =)

Вон, народ ставит ориентировочные сроки полёта на Марс, и стремится к ним! И даже если они просчитаются и отправятся на год позже — они всё равно отправятся на, мать его, Марс! А если сроки не ставить — работа не будет выполнена никогда.
Речь не о невыполнимых задачах, речь о том, что сроки не всегда можно назвать точно.
Так и я про время как ресурс. Нельзя сказать точно — берите укрупнённо. Нельзя укрупнённо — берите срок на расчёт.

Мне очень помогло научиться считать сроки на работе, где даты были независимы от нас. Не успели вовремя — вся работа в утиль, никаких «ещё пол часика и всё будет готово». И хочешь не хочешь — считаешь и своё время, и подчинённых, и подрядчиков…
Когда начальник не в теме, он не всегда понимает, что такое «укрупненные сроки».
Так укрупнённые они для Вас, а для него — просто сроки. Ему они нужны для принятия соответствующих решений: согласиться на них, добавить ресурсов, снизить требования, или ещё что-то.

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

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

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

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

Не все манагеры одинаково полезны.
Диалог с руководителем о том, что в такой-то срок будет выполнен такой-то объём работ, а в такой-то — другой — это тоже обозначение сроков. Разве нет?
Конечно. Я и не утверждал, что сроки не нужно обозначать, я говорил о том, что не всегда это можно сделать точно. И что руководителям надо объяснять, почему именно так, а не называть «укрупненные сроки» как единственно возможные, потому что это приводит к сбоям в планировании.
Нельзя сказать точно — берите укрупнённо.

Проблема в том, что «укрупнённо» с учётом всех возможных факапов часто получается вида «от 1 недели до 5 лет», причём чем опытнее разработчик, тем больше возможных факапов он видит. И чтобы оценка не уходила в бесконечность, приходится выводить некое мат-ожидание с учётом вероятности возникновения проблем. Но начальство как правило не особо углубляется в мат-анализ. Есть цифра — она будет поставлена в график, в лучшем случае не уменьшая оценки «паникёров-перестраховщиков».

Кроме того, срок может вообще не поддаваться расчёту. Что-то вроде:
— Когда закончишь интеграцию?
— Когда админ заказчика закончит настройку своей базы.
— Ты дату точную назови…
Ну то есть работает кто-то другой, а сроки требуют с тебя.
Так что получается, что чем опытнее разработчик, тем сильнее он затягивает сроки? По идее опыт разработчика должен позволить ему максимально точно оценить сроки исполнения работы, а не написать сочинение на тему «Почему эту программу можно написать как за неделю, так и за 5 лет».

А теперь «правильный» вариант диалога:
— Когда закончишь интеграцию?
— Через три дня, после того, как админ заказчика закончит настройку своей базы.
— ОК, пойду пинать заказчика.

Вместо изначального f(x) = x(y), где переменная становится не определённой функцией, получается простая линейная функция f(x) = x + 3.
Первое работает только в том случае, если у разработчика есть полная исчерпывающая информация о системе/системах, с которыми ему придётся работать, что есть сильно не всегда. Особенно весело, если по условиям документация может быть получена только ПОСЛЕ оценки, но это уже вообще клиника и встречается не часто.

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

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

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

Хуже того, на переговорах с заказчиком такой управленец уверен, что создать дополнительное поле в таблице — это работа на пол-года, а вот определить, например, что на картинке изображена машинка или котег — чё там думать, результат будет уже завтра, это же элементарно!

Может в бизнес-аналитики/тимлиды податься? Как раз работу ищу =)

Резюме: Быстро нахожу общий язык с людьми. Синхронно перевожу с языка заказчика на язык исполнителя и обратно. Умею понять заказчика и донести до него позицию исполнителя. Что не может сделать конечный исполнитель — сделаю вместе с ним, заодно обучу.
Хуже того, на переговорах с заказчиком такой управленец уверен, что создать дополнительное поле в таблице — это работа на пол-года, а вот определить, например, что на картинке изображена машинка или котег — чё там думать, результат будет уже завтра, это же элементарно!
Причем это может внезапно оказаться именно так.
Например, у нас одно поле в учетной БД «создается» уже год или больше. Так долго потому, что на него многое завязано — под сотню сотрудников фирмы, десятки печатных форм, бизнес-процессы внутри фирмы, взаимодействие с контрагентами и т.п.
А картинку для распознавания, может быть, достаточно засунуть в какой-нибудь гугловый API для распознавания.
Возможен и такой вариант, но, коллега, это уже далеко не «создание поля в БД», а некий многоступенчатый процесс, в составе которого имеется создание поля в БД, судя по описанию… А гугловый АПИ может не прикручиваться на режимном объекте, где нет инета, хотя на презентации всё было так сладко, даже через глючный Вай-Вай…

Именно поэтому управленец, принимающий решения, должен быть в курсе того, как и что будет реализовано, чтобы не подставлять себя, свою команду и организацию.
Не до конца первый пункт осветили. Упустили самую раздражающую ситуацию — когда ты по уши в очередной задаче, досконально вник в ТЗ, жонглируешь в уме десятком классов, и тут — «Глянь, тут, вроде, немного. Или хотя-бы скажи, насколько сложно.».
Известная картинка
image
Случаи из жизни которые часто привожу в пример как не надо ставить задачу:
1) Приходит письмо с темой. Нужно сделать отчет, см. вложенный файл
Открываем файл там название колонок и все…
2) У нас есть конфигурация на 8.1, ее нам 4-5 лет назад делал франч, нужно в УПП сделать тоже самое только ЛУЧШЕ!

Самые раздражающие фразы.
1) Все должно быть автоматически
2)
-Надо чтобы это само грузилось и заполнялось.
-Хорошо, откуда брать данные?
-Не знаю. придумайте что нибудь?

Грабли для новичков:
-Почему это так работает?
-Вы сами это просили так сделать!
-Я не мог такое попросить!!!

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

Дело в том, что видео про эксперта высмеивает именно эксперта, а не клиента. Одно из возможных решений:



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

В формулировке из текущего обсуждения складывается ощущение, что эксперт — это такой педант, который даже не должен разговаривать с заказчиком, который не может сформулировать ему проблему. Потому он говорит, что решение невозможно, не желая признавать, что заказчик не владеет пространством решений. «Fuck you, that's why» эксперт. Конечно, если заказчик продолжает настаивать на своей формулировке, которая не даёт эксперту возможности указать решаемую проблему в пространстве решений, «на лад их дело не пойдёт» и контракт не состоится.
Ценность «эксперта» не в том, чтобы с умным видом доказать, что все вокруг дураки и несут чушь, а в том, чтобы максимально эффективно решить поставленную задачу, даже если условия звучат по-дурацки.
Звучит примерно так:
-На, что жалуетесь?
-Доктор, надо ампутировать ему ногу.
-Как скажите!

И чтобы уж наверняка, ампутируем и левую и правую.

А далее вопрос:
-Доктор, а почему он не ходит?
Вспоминается анекдот:

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

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

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

1. Являются ли все семь линий красными?
2. Являются ли 2-я, 4-я и 6-я линии прозрачными?

Если заказчик употребляет вполне конкретные понятия, которые с технической точки зрения противоречат друг другу и здравому смыслу, то нужно не выискивать лазейки, чтобы свести всё в непротиворечивую, но бессмысленную систему. Нужно вместе с заказчиком вернуться к его потребностям и целям, к конкретной предметной области, с которой он работает и в рамках всего этого выработать новое ТЗ. В идеале, по крайней мере, именно это и делает настоящий эксперт.
Отличная картинка, долго рисовали?

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

Это ж логическое продолжение усложнения картинки с развитием техники:
1) чёрно-белое фото в документах
2) цветное
3) голограмма/видео

Следовательно задача про 7 линий может быть решена и в динамике — как анимированный GIF или переключающиеся световые гирлянды на вывеске.

Можно придумать логотип компании, который «переливается» в зависимости от угла обзора, тогда и «волки сыты» (дезигнерши довольны) и аксиомы 2D геометрии выстоят.

Ещё вспомнилось:
«В процессе решения вопросов специалист для начальства виноват четырехкратно:

1. Он вообще открыл рот.
2. Нагло остался при своем мнении.
3. Своевременно на нем не настоял.
4. Оказался прав.»
:)

Ну, если так подходить к вопросу…
https://habrastorage.org/files/c0e/ea6/930/c0eea693023a40be86b79f1a44c51026.jpg
Развёрнутее бывают случаи. Техподдержка тут порадовала:
https://habrastorage.org/files/002/a29/bbb/002a29bbb5a140ec8eec8eda2b3c5c9c.jpg

И подобная статья была уже (перевод):
Реальная оценка или почему наступают дедлайны?
https://habrahabr.ru/company/ruswizards/blog/151029/
Это все фигня, мне вон задание трех-дневное дают и говорят — «Ой мы тыт вспомнили, что у нас презентация, там работы на два часа, время пошло». Долбаная Худик.
НЛО прилетело и опубликовало эту надпись здесь
А вы руководили программистами? Нанимали ли для вас HR талантливых студентов-гениев? Вы просто не понимаете, что когда вам приносят код и говорят «зуб даю — все сделано и проверено», а он даже не компилируется, или компилируется, но при попытке хоть что-либо сделать выдает деление на ноль, или в поля на формах забыли прописать обработчики событий..., то «Давайте писать код без ошибок» — это единственные звуки, которые можно услышать после запикивания всех матов.
НЛО прилетело и опубликовало эту надпись здесь
Мы говорим на разных языках. Это Ваша работа «щелкать хлыстом и выслушивать клятвенные заверения», а так же применять «TDD и ревью кода». Я обычный программист и моя работа — писать качественный код. Иногда у меня на все не хватает времени и мне берут помощников. Так вот качество работ обычно ниже плинтуса. И не важно кого мне набирают 1С программистов для бизнес-решений или интерфейсной части, С++ программистов для написания утилит, JS-программистов и дизайнеров для создания веб-решений — единицы что-то пытаются делать качественно и проверяют свой код, но все остальные даже минимальные тесты не делают. Мне нужно пересматривать работы за всеми и десятки раз отдавать на переделки.

Никто не требует от них интегрального тестирования (его делал я, а еще у нас были бетта-тестеры). Есть ТЗ — написать функцию, которая принимает четко описанные типы параметров и выдает четко описанный результат. Почему нельзя прочитать и сделать дословно? Почему не хватает параметров? Почему результат неправильного типа? Почему нельзя сделать элементарные проверки на ноль при делении или хотя бы набросать try/catch?

Боже, про какое TDD (разработку через тестирование) вы говорите, если люди элементарно пушат коммиты с неработающим кодом (опечатки в вызовах функций, потерянные кавычки и так далее), который вообще не компилится и в IDE светит красным??? Но при этом их в выполненной работе ничего не смущает.
Однажды когда со стороны заказчика в ответ на эстимейты прозвучало «как неделя? да я сам это за полдня сделаю», ответили «ок, давай, делай». Через неделю прозвучало «ладно, берите, делайте» :)
Странная статья, где сталкивают лбом бизнес и программирование. Для решения этой ситуации нужен отдельный человек, разбирающийся в обеих сферах. Жизнь проста, если не усложнять…
Еще бесит, например, когда программиста принимают за электрика. У нас в организации все считают, что программисты знают на сколько выключили свет, что программисты должны чинить чайники и кофеварки. Я уже не говорю про работу грузчиками (выжемужчины, значит обязаны).
Последнее относится скорее к полу, нежели профессии. И потом, что мешает вам вежливо послать подобного коллегу? Или вы в Корпорации Зла работаете?
В филиале корпорации зла на земле :) Конечно вежливо объясняю, что это не входит в мои обязанности, но каждый раз все повторяется снова и снова. И дело тут не в способности послать или нет, а отношении и как это бесит.
Относитесь как к безплатному фитнесу или отвечайте, что 1-го человека мало. Доказательства:

«1) Сколько программистов баз данных требуется, чтобы заменить перегоревшую E27 лампочку?

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

2) — Сколько нужно сотрудников службы поддержки компании MicroSoft, чтобы заменить лампочку?

— Четыре.
Первый — чтобы узнать регистрационный номер лампочки.
Второй — чтобы спросить: «А вы перезагрузиться пробовали?» (Выключатель включить/выключить.) Третий — чтобы спросить: «А вы пробовали ее переустановить?»
И четвертый, чтобы сказать: «Это у вас что-то с «железом». У нас в офисе лампочка работает отлично!»
по 1)… потому что по факту — эти трое решали задачу создания системы замены лампочек во всем городе
по 2) пока — да. смешно. а в будущем?
когда по регистрационному номеру можно провести удаленную диагностику лампочки с поддержкой IoT (или просто проверить что на конкретной серии лампочек — уязвимая прошивка и возможно стоит обновить прошивку)(статья про PoC вируса для реальных лампочек на ГТ была — https://geektimes.ru/post/282250/ )…
Для IoT и вообще технич. прогресса есть и физические ограничения:
1) электромагнитный смог как взаимоглушение связи между «умными» устройствами: https://geektimes.ru/company/asus/blog/265998/
2) окончание промышленных и редкоземельных металлов вместе с дешёвой энергией.
«Кожаные биороботы» при этом выиграют у неорганических.
3) «бесконтрольный рост энергопотребления для любой цивилизации означает самоубийство. Очевидно, что энергия и информация — не все, в чем нуждается цивилизация для успешного продвижения по шкале прогресса. Нужна новая шкала, которая принимала бы во внимание эффективность, паразитное тепло и загрязнение окружающей среды. Такая шкала разработана, и основывается она на концепции энтропии.»

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

Источник: https://horseman5th.wordpress.com/2014/02/17/%d1%8d%d0%bd%d1%82%d1%80%d0%be%d0%bf%d0%b8%d1%8f-%d0%b8-%d1%82%d0%b5%d0%bf%d0%bb%d0%be%d0%b2%d0%b0%d1%8f-%d1%81%d0%bc%d0%b5%d1%80%d1%82%d1%8c/#more-1908
Решаю проблемы взаимодействия заказчика и программистов, дорого.
Хоть раздел «ты должен мыслить как клиент» и проиллюстрирован забавным роликом, мысль на самом деле очень дельная и полезная. Программистам неплохо бы иногда задумываться, что программы пишутся для конечного пользователя. А то иногда выходит, что в ответ на замечание о баге слышишь подробную инструкцию, что пользователь должен проделать, чтобы обойти баг. Вот это неправильно.
«Правильный» менеджер… неужели в IT менеджеры настолько далеки от IT, что не могут оценить сложность задачи ?!
Статья привлекла двусмысленным заголовком. Разочарован, что это случайность.
«Как вывести из себя программиста» вызывает аллюзии к чеховскому
… напишите, как этот молодой человек выдавливает из себя по каплям программиста раба и как он, проснувшись в одно прекрасное утро, чувствует, что в его жилах течёт уже не рабская кровь, а настоящая человеческая.


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