<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Коля Митин</title><author><name>Коля Митин</name></author><id>https://teletype.in/atom/nickmitin</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/nickmitin?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@nickmitin?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nickmitin"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/nickmitin?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-17T16:21:45.186Z</updated><entry><id>nickmitin:save-you-weekend</id><link rel="alternate" type="text/html" href="https://teletype.in/@nickmitin/save-you-weekend?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nickmitin"></link><title>Включайте подготовку в задачу</title><published>2020-12-25T05:34:27.939Z</published><updated>2020-12-25T05:53:19.872Z</updated><summary type="html">Допустим есть заказчик, который обращается к вам раз в полгода. Он пришёл в очередной раз и хочет, чтобы вы сделали на его сайте корзину покупок. Вы можете приступить на следующей неделе. Так как это большая задача, вы написали план работы:</summary><content type="html">
  &lt;p&gt;Допустим есть заказчик, который обращается к вам раз в полгода. Он пришёл в очередной раз и хочет, чтобы вы сделали на его сайте корзину покупок. Вы можете приступить на следующей неделе. Так как это большая задача, вы написали &lt;strong&gt;план работы&lt;/strong&gt;:&lt;/p&gt;
  &lt;p&gt;— пн: создание моделей и контроллеров и предствалений для корзины: кнопка «добавить», список товаров, оплата, список заказов с их состояниями.&lt;/p&gt;
  &lt;p&gt;— вт-ср: написание тестов и логики работы корзины.&lt;/p&gt;
  &lt;p&gt;— чт: сборка на тестовом сервере, показ заказчику, согласование&lt;/p&gt;
  &lt;p&gt;— пт: деплой&lt;/p&gt;
  &lt;blockquote&gt;(Это, безусловно, нереальный план, но для нашего обсуждения пойдёт)&lt;/blockquote&gt;
  &lt;p&gt;Объявили о своих намерениях заказчику, он согласился. Вы продолжаете работать над текущими задачами, размышляя на фоне о корзине. Внезапно вы осознаёте, что уже не очень хорошо помните как в том проекте что устроено, полгода ведь прошло и решаете выкачать последнюю версию кода из репозитория. Выкачиваете, а там 46 изменённых файлов и 4237 новых строк кода! &lt;/p&gt;
  &lt;p&gt;Теперь придётся это всё просматривать и разбираться, кто и зачем это всё написал и как это повлияет на вашу задачу. Нужно выделять на это время, значит посиделки с друзьями сегодня вечером в пролёте.&lt;/p&gt;
  &lt;p&gt;Разбирая код, вы обнаруживаете, что кто-то как раз пытался сделать корзину. Узнаёте у заказчика, он вспоминает, что три месяца назад он попытался поработать с другим подрядчиком, но у них не сложились отношения.&lt;/p&gt;
  &lt;p&gt;Вам теперь совсем непонятно, что конкретно там было сделано, можно ли это полностью откатить или попытаться это доделать. &lt;/p&gt;
  &lt;p&gt;В этот момент вы осознаёте, что у вас нарисовались адские выходные, потому что вы уже занимаетесь задачей, а планировали с понедельника.&lt;/p&gt;
  &lt;p&gt;Давайте теперь отмотаем время на начало истории, когда вы сели писать план и перепишем его:&lt;/p&gt;
  &lt;p&gt;— пн: приём текущего состояния проекта, обновление кода, сборка, анализ изменений.&lt;/p&gt;
  &lt;p&gt;— вт: выбор оптимальной тактики: написание собственной корзины, использование сторонней библиотеки, внешнего сервиса.&lt;/p&gt;
  &lt;p&gt;— ср: согласование тактики с заказчиком, написание плана работ, согласование плана работ по реализации согласованной тактики.&lt;/p&gt;
  &lt;p&gt;Вуаля, теперь вам не нужно думать о задаче до понедельника. &lt;strong&gt;Посиделки с друзьями и выходные спасены!&lt;/strong&gt;&lt;/p&gt;

</content></entry><entry><id>nickmitin:productive-conversations</id><link rel="alternate" type="text/html" href="https://teletype.in/@nickmitin/productive-conversations?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nickmitin"></link><title>Продуктивные обсуждения</title><published>2020-12-23T03:36:45.933Z</published><updated>2020-12-23T03:50:56.558Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/f8/d8/f8d8acf6-dde5-4dfe-a8f5-94625a443f19.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/51/21/51216440-b6ee-41c8-84e3-a1a503daa9cf.png&quot;&gt;Каждый день в районе 6 утра, я завариваю кофе и сажусь проверять пул-реквесты разработчиков в Гитхабе:</summary><content type="html">
  &lt;p&gt;Каждый день в районе 6 утра, я завариваю кофе и сажусь проверять пул-реквесты разработчиков в Гитхабе:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/51/21/51216440-b6ee-41c8-84e3-a1a503daa9cf.png&quot; width=&quot;1618&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;На следующий день я вижу ответ от разработчика:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/6a/50/6a508286-a441-4a87-81f3-80e9790213a8.png&quot; width=&quot;2360&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Сначала я такой:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/c0/9e/c09eb256-2e78-42b9-97dd-c6d1f0afbc58.png&quot; width=&quot;693&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;А потом думаю: «Хм... А это тема для поста.»&lt;/p&gt;
  &lt;p&gt;Итак. Проблема ответа разработчика в том, что мне теперь непонятно, что с этим ответом делать. Во-первых, я не понимаю, что он собирается по этому поводу предпринять. Во-вторых, я не знаю, почему ему кажется, что это костыль. &lt;/p&gt;
  &lt;p&gt;Получается, я могу написать только «Почему? И что с этим тогда делать?» и отправить целый пул-реквест на полку ещё на 24 часа.&lt;/p&gt;
  &lt;p&gt;То есть бесполезный ответ на моё замечание увеличил время до релиза фичи на 24 часа.&lt;/p&gt;
  &lt;p&gt;Уберите эмоциональную окраску своих сообщений. Собеседник вложит в ваш текст эмоции на свой вкус, обидится и дальнейшая дискуссия будет идти на эмоциях. &lt;/p&gt;
  &lt;p&gt;Дополняйте оценочные суждения развёрнутыми объяснениями, примерами и ссылками на источники. Если ваш собеседник не телепат, он ничего не сможет сделать с неаргументированным мнением.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Опасно&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Это полная хуйня.&lt;/li&gt;
    &lt;li&gt;Как ты считаешь, эту поебень кто-то через год сможет понять?&lt;/li&gt;
    &lt;li&gt;Блять! Мы уже полгода говорим о том, что модели нельзя из контроллеров вызывать, хули ты так сделал?&lt;/li&gt;
    &lt;li&gt;Кажется, это костыль.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;strong&gt;Продуктивно&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Я не могу принять этот код, потому что он нарушает наши принципы: оформлен не по PSR и не покрыт тестами.&lt;/li&gt;
    &lt;li&gt;Тут восемь строчек вызовов библиотечных функций PHP. Ты работаешь со строками, массивами и файлами. Это не имеет никакого отношения к бизнес-логике приложения. Разбей код на функции и назови их согласно предметной области задачи. Ну и чтобы два раза не вставать, этот код сейчас не тестируемый.&lt;/li&gt;
    &lt;li&gt;Зачем здесь модель создаётся в контроллере?&lt;/li&gt;
    &lt;li&gt;Кажется, это костыль. Я посмотрел в документации по Ларавелю, это решается через &lt;a href=&quot;https://laravel.com/docs/8.x/eloquent#default-attribute-values&quot; target=&quot;_blank&quot;&gt;default attribute values&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry></feed>