❓А зачем нам вообще ретраи?
Не так давно я попытался провести воркшоп по ретраям на основе репозитория и своих теоретических изысканий. Получилось говнястенько, но получилось!💩
🆙 В конце этого воркшопа мне один очень крутой коллега (а мы других не держим) задал вполне легитимный вопрос: "Зачем нам вообще все это считать? Вот у меня задача есть, я везде могу сделать 5 ретраев и экспоненциальное увеличение таймаутов. И этого вполне хватает. Если за 5 раз сервис не ответил, значит, что он конкретно недоступен и смысла ретраить больше нет."
Тут я понял, что проебал мотивационную часть и в своем воркшопе и в цикле постов. 😅 Кек)
И это правильный комментарий, но мы тут собрались не для того, чтобы ретраями чинить упавшие сервисы.
🅰️ Все дело в облаке.
Если помните, мы все с вами хостимся в облаке. Почти все. А в облаке, база – не база, а абстрактный набор железок, которые где-то перезапускаются, выгорают и что-то делают помимо основной работы.
В облаке у вас нет гарантии, что два соседних запроса выполнятся на одной и той же машине. И вот именно тут вам помогут ретраи и то, что мы с вами разбирали. Вся эта тема была про то, как из ненадежных элементов построить что-то чуть более надежное.
🙅 То есть, вы пульнули запрос, а он по раунд-робину попал на какой-то залупный сервер у параши. А вы вместо того, чтобы ждать, пока он очнется, берете и пуляете новый запрос, который попадает на королевский сервер. По итогу, именно это и улучшает показатели вашего конечного сервиса.(Да , вы так же делаете , когда ждете своей очереди в Overwatch 2! Вы тоже ретраите, когда перезаходите в лобби!)
Для улучшения показателей мы и делаем ретраи и именно это мне хотелось показать в цикле. А еще убрать у вас(и у себя, конечно) инфантильное желание въебать 5 ретраев по экспоненте и оставить осознанный мотив втрепать всего два линейных, но по делу. Немного пошевелить мозгами. 🧠
P.S. В общем, всем спасибо, кто дочитал и полайкал эту душнятину!🙏 🙏 🙏 Буду и дальше работать над такими штуками и бороться за вторые места!
#ресайленс
Не так давно я попытался провести воркшоп по ретраям на основе репозитория и своих теоретических изысканий. Получилось говнястенько, но получилось!
🆙 В конце этого воркшопа мне один очень крутой коллега (а мы других не держим) задал вполне легитимный вопрос: "Зачем нам вообще все это считать? Вот у меня задача есть, я везде могу сделать 5 ретраев и экспоненциальное увеличение таймаутов. И этого вполне хватает. Если за 5 раз сервис не ответил, значит, что он конкретно недоступен и смысла ретраить больше нет."
И это правильный комментарий, но мы тут собрались не для того, чтобы ретраями чинить упавшие сервисы.
🅰️ Все дело в облаке.
Если помните, мы все с вами хостимся в облаке. Почти все. А в облаке, база – не база, а абстрактный набор железок, которые где-то перезапускаются, выгорают и что-то делают помимо основной работы.
В облаке у вас нет гарантии, что два соседних запроса выполнятся на одной и той же машине. И вот именно тут вам помогут ретраи и то, что мы с вами разбирали. Вся эта тема была про то, как из ненадежных элементов построить что-то чуть более надежное.
🙅 То есть, вы пульнули запрос, а он по раунд-робину попал на какой-то залупный сервер у параши. А вы вместо того, чтобы ждать, пока он очнется, берете и пуляете новый запрос, который попадает на королевский сервер. По итогу, именно это и улучшает показатели вашего конечного сервиса.
Для улучшения показателей мы и делаем ретраи и именно это мне хотелось показать в цикле. А еще убрать у вас
P.S. В общем, всем спасибо, кто дочитал и полайкал эту душнятину!
#ресайленс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Пятница етить её налево! Самое время прочитать все посты, что вышли за эту неделю. А вот и компильдотик для привлечения внимания. Но предупрежу, он жесткий. Возможно противный. Категория В не ниже. Оправдывает плашку 🔞 в названии канала. Читать, ну очень осторожно.
– Билли, да когда ты уже закончишь?
– Думаю, что через час.
Ебля продолжается час, потом еще час, еще час. Один снова не выдерживает:
– Билли, до коле, блядь?!
Второй останавливается и говорит:
– Да я думал, что за час управлюсь. Но, знаешь, Боб, тут
#компильдот
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2💩2🌭1
Не отпускают меня ретраи. Извините.
🅰️Но, короче, я задумался, что вообще Service Mesh и ретраи это топ сборка!
У вас есть инфраструктура, у которой известны SLA (базы, шины и прочее). Вы можете один раз посчитать по ним, сколько ретраев нужно при обращении к ним и на всю архитектуру раскатить общие настройки через Service Mesh. И у вас все сервисы разом оптимальнее работают с базами, шинами и прочим!
Понятно, что это все чревато, что можно переборщить, но надо пробовать на практике, на то и нагрузочные тесты!
💡Это просто как идея. Не претендую на охуительность (хотя ладно претендую).
#ресайленс #servicemesh
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🍟 McDonald’s Journey to Event-Driven Architecture.
Было как. Ложусь я уже спать, как вдруг ютуб подсовывает мне видос с одного из лучших каналов по разработке CodeOpinion. И в названии, ну прям кликбейтное McDonald’s Journey to Event-Driven Architecture.
"Ну нихрена себе" – подумал я и, конечно, кликнул! Вы там сами посмотрите это видео и решите, что интересно вам. А вот что я для себя узнал:
1️⃣ Schema Registry. К своему стыду, никогда не слышал про такое. У макдака – это AWS Elastic Container Service. Ее используют для валидации сообщений, приходящих от продьюсера. При отправке сообщения продюсер идет в Schema Registry, спрашивает, норм ли все с сообщением, не пропущено ли каких строк, могу ли я его десеарилизовать итп.
Если все ок, то сообщение отправляется в брокера (у макдака это AWS Managed Streaming for Kafka Service). Если же с сообщеним непорядок, то оно попадает в чистилище Dead Letter Queue (DLQ)
Ну и консьюмер тоже все это проверяет, как я понимаю.
2️⃣ У МакДональдса есть техноблог! Кто бы мог подумать! Вы подумали? Я вот не подумал. Короче, надо читать. Сто процентов.
Все остальное – Standby Event Store, которая доступна на случай, если брокер откажет. Event Gateway, который позволяет сторонним партнерам через API генерировать события для интеграции. В общем, все это в той или иной степени было известно. Но все равно прикольно было почитать, что у Макдака все также как и у нас.
P.S.: А еще ведущий на канале CodeOpinion похож на Роршарха из Хранителей и это по-своему доставляет. Будто он в конце скажет "Это не меня заперли здесь! Это вас заперли со мной!"
#codeopinion #mcdonalds #eventdriven
Было как. Ложусь я уже спать, как вдруг ютуб подсовывает мне видос с одного из лучших каналов по разработке CodeOpinion. И в названии, ну прям кликбейтное McDonald’s Journey to Event-Driven Architecture.
"Ну нихрена себе" – подумал я и, конечно, кликнул! Вы там сами посмотрите это видео и решите, что интересно вам. А вот что я для себя узнал:
1️⃣ Schema Registry. К своему стыду, никогда не слышал про такое. У макдака – это AWS Elastic Container Service. Ее используют для валидации сообщений, приходящих от продьюсера. При отправке сообщения продюсер идет в Schema Registry, спрашивает, норм ли все с сообщением, не пропущено ли каких строк, могу ли я его десеарилизовать итп.
Если все ок, то сообщение отправляется в брокера (у макдака это AWS Managed Streaming for Kafka Service). Если же с сообщеним непорядок, то оно попадает в чистилище Dead Letter Queue (DLQ)
Ну и консьюмер тоже все это проверяет, как я понимаю.
2️⃣ У МакДональдса есть техноблог! Кто бы мог подумать! Вы подумали? Я вот не подумал. Короче, надо читать. Сто процентов.
Все остальное – Standby Event Store, которая доступна на случай, если брокер откажет. Event Gateway, который позволяет сторонним партнерам через API генерировать события для интеграции. В общем, все это в той или иной степени было известно. Но все равно прикольно было почитать, что у Макдака все также как и у нас.
P.S.: А еще ведущий на канале CodeOpinion похож на Роршарха из Хранителей и это по-своему доставляет. Будто он в конце скажет "Это не меня заперли здесь! Это вас заперли со мной!"
#codeopinion #mcdonalds #eventdriven
❤🔥1
Пятница, туда её в душу! Значит время компильдота у нас. Прошлый компильдот про
Программист обращается к компьютерному мастеру:
- Мне нужна ваша помощь.
- Ваша профессия?
- Я программист.
- Так почему же вы сами все не сделаете?
- Я беру слишком дорого...
Понравился компильдот? Ну так давай, не робей – поставь лайк! Ну а ежели анек не зашел, ты тоже в сторонке-то не стой – говняшка Скрэппи к твоим услугам! Всё строго анонимно!
#компильдот
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1🍌1
Как я раньше и говорил, по производственной необходимости нужно изучать Кафку (
🍆 Сегодня просто посмотрим на пояснительный дикпик
Cluster – ну тут все просто – это набор кафок. То есть, если вы хотите масштабироваться горизонтально, то кластер – это то, что вы будете расширять добавляя туда побольше кафок.
Broker – это собственно инстанс кафки, который занимается полезной работой. Их может быть много, и они в себе содержат топики.
Topic – это собственно то, что хранит в себе пересылаемые данные. То есть, когда сообщение попадет к брокеру, то он положит его в нужный топик.
Producer – это тот кто пишет в топики.
Consumer Group – это группа консьюмеров которые читают из топика. Тут есть нюанс, что каждый консьюмер в группе будет читать из своей партиции, но об этом позже. И это, кстати, тоже охренеть какое отличие! (Спасибо Юре Пастушенко
🐇 Так как я много работал с RabbitMQ, не могу не отметить, что верхнеуровнево все выглядит один к одному! Но есть значительные различия в том, как кафка работает с топиками. Это довольно сильно отличается от кролика и вот чем:
1️⃣В кафкианском мире консьюмер поллит брокера, чтобы забрать данные из топика. В отличие от кролика, где брокер пушит сообщения сам. Конечно в кролике тоже можно было перевести консьюмера в режим поллинга, но это не православный подход считается.
2️⃣Сама работа топиков сильно отличается от очередей (
Такие вот верхнеуровненвые кафкианские пироги. Stay Tuned, как говорится.
#kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Всегда на интервью спрашиваю у ребят и девчат, приходилось ли им выбирать между struct или class на практике. И в каком случае стоит применять одно, а в каком другое.
Это тот самый случай, когда ты теорию знаешь, но на практике вообще не ясно, как эту теорию применить. Вот сегодня, кажется, что я сформулировал довольно крепкий кейс, в котором нужно как минимум задуматься, отдать предпочтение структуре или классу.
❓Так вот, представим себе вот такой объект. Ему нужно быть структурой или классом?
public ???? TimeInterval
{
public TimeSpan From { get; set; }
public TimeSpan To { get; set; }
}
📖 Я считаю, что эта штука может стать структурой и для этого есть вполне практичный аргумент. Безо всяких там
[Test]
public void StructRef()
{
var from = new TimeSpan();
var to = new TimeSpan().Add(30.Minutes());
var interval1 = new TimeInterval()
{
From=from,
To=to
};
var interval2 = new TimeInterval()
{
From=from,
To=to
};
Assert.True(interval1.Equals(interval2));
}Если мы сделали TimeInterval структурой, то он пройдет. Что и не удивительно, так как метод Equals проверит наши данные по значению.
Но если мы сделаем TimeInterval классом, то этот тест так просто уже не прокатит. Придется учинить оверрайдинг метода Equals для этого класса, а где оверрайдинг Equals, там и оверрайдинг GetHashCode.
🅰️ Теперь я приведу практический вывод, который вы можете использовать в повседневной разработке: Если вам в каком-то классе понадобилось переопределять Equals, то прежде чем это делать, задумайтесь, а не стоит ли вашему классу стать структурой?
Ну и еще нужно воспользоваться памяткой от Microsoft разумеется.
P.S.: Конечно тут можно использовать record struct а не просто struct. Надеюсь это очевидно)
#struct #class
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔2
Опятьница (опять пятница)! Ну ежкин дрын. Сегодня будет чуть больше жести, но без сношений сами знаете куда. Итак, встречаем:
Летят как-то в самолете тестировщик, проджект-менеджер и программист.
Самолет начинает падать, пилоты выпадают, программист садится за штурвал, а тестировщик и проджект становятся рядом.
Вдруг самолет резко шатнуло, и проджект начинает выпадать. Тестировщик хватает его за детородный орган и держит. Но в итоге хер отрывается и остается в руках у тестировщика. Тот подходит к программисту и говорит:
– Слушай, программист, тут наш проджект выпал.
– Выпал? Да и хуй с ним!
– Да вот хуй-то не с ним, хуй с нами.
Понравился компильдот? – Ну и куда ты пошёл? А кто лайк будет ставить? Пушкин?
Не понравился? – И что, вот так и оставишь этот компильдо безнаказанным? Вырази свое мнение там где тебя услышат – здесь! А говняшка Скрэппи всегда поможет в этом.
#компильдот
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🍌1
Сегодня поговорим про топики. Когда я читал про них, у меня все больше и больше мыслей возникало, что они похожи на таблицы в базе данных, только с более строгими правилами записи. Вот ключевые фичи топика:
✴️ Топик – это контейнер для одного типа событий. (по сути, как таблица в базе данных, пояснительный дикпик выше
✴️ Данные между топиками могут дублироваться.
✴️ Топик – append-only штука (то есть удалять оттуда нельзя)
✴️ В топике есть offset, по которому мы можем искать нужные события. Это по сути смещение от начала сегмента (про сегменты чуть позже, пока можете считать, что от начала файла с событиями)
✴️ События редактировать нельзя.
✴️ Схема данных событий в топике не проверяется.
✴️ Топик делится на партиции. (про это в следующем посте)
✴️ Из одного и того же топика могут читать разные консьюмеры, но читать они будут информацию из разных партиций.
Верхнеуровненво это все еще чем-то напоминает очереди, но из-за своей имутабельной структуры у топиков иной подход к параллелизщации нагрузки – партиции. Про него я расскажу в следующем посте.
🅰️Практический вывод:
1) Когда в своей практике вы создадите топик в Кафке? Когда ваше приложение будет кидать определенный ивент, к примеру о том, что оплата прошла. Вы создадите топик с назанием PaymentAccepted и будете слать в него события.
2) О чем нужно помнить? Что если послали, то удалить посланное из истории будет невозможно.
P.S.: Если что, у этой информации есть оригинал, он тоже коротенький, так что можете ознакомиться.
#kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
Confluent
What is a Kafka Topic?
A Kafka topic is a basic unit of event organization. Learn how topics work, what they're used for, and how.
🤔1
Ок, топик мы создали, начали писать туда сообщение и вдруг поняли, что тачка не вывозит. Что делать? На помощь приходят партиции. Топик состоит из партиций (пояснительный дикпик 1).
Как данные пишутся в партиции?
Сдуру можно подумать, что когда сообщение приходит в топик, оно будет класться в обе партиции, и типа это поможет. Но не надо так думать, потому что если так сделать, то это будет бессмысленно. Давайте пару минут подумаем, почему... Раз... Два... Ладно, дело в том, что если вы будете копировать все сообщения, то нагрузка будет одинаковой на обе партиции, и если одна в огне, то и вторая в оггне.
Соотвественно сообщения по партициям не копируются, а распределяются!
Когда продьюсер шлет сообщение в топик, продьюсер должен указать ключ (номер) партиции, в которую он собирается писать сообщение. Ключи для партиций должны генерироваться продьюсером так, чтобы данные по одной сущности лежали в одной партиции. К примеру по id сущности.
Partition0: 1️⃣1️⃣1️⃣1️⃣1️⃣
Partition1: 2️⃣2️⃣2️⃣2️⃣2️⃣2️⃣
Каждая партиция может храниться на разных брокерах (пояснительный дикпик 2). А значит ваши сообщения могут принимать не одна, а две машины. Вот вам и параллелизация.
Как данные читаются из партиции?
Хорошо, мы научились писать в партиции, а как же из них читать? Это не так просто, ибо партиция, это по сути отдельно живущая штука. Что-то типа сетевой папки.
Из одного топика могут читать сколько угодно консьюмер-групп (пояснительный дикпик). Но вот из одной партиции может читать только один консьюмер! Один, в рамках одной консьюмер-группы, разумеется 🖼, как меня правильно поправили в комментариях. (пояснительный дикпик 3).
Из этого пункта следует два вывода:
❗️Сколько партиций, столько и консьюмеров в группе – ни больше ни меньше. Потому что, если сделаете меньше, то часть событий просто пролетит мимо вас. А если сделаете больше, то лишний консьюмер будет стоять и передергивать в сторонке. (на третьем дикпике мы как раз аидим таког третьего лишнего)
❗️Если продьюсер не указал ключ партиции, то сообщение распределится между партициями по RoundRobin'у. То есть вот так:
Partition0: 1️⃣1️⃣2️⃣1️⃣2️⃣
Partition1: 2️⃣1️⃣2️⃣2️⃣1️⃣2️⃣
И вам потом придется бегать по партициям и собирать все во что-то более менее приемлемое. Так что будьте с этим аккуратнее.
🅰️Практические выводы:
1. Когда делаете новый топик, то сразу думаете про количество партиций. Думаю, что стоит считать предполагаемую нагрузку по сообщениям. Так как добавление партиций – это нетривиальная операция. Короче, это число с бухты-барахты не выбирают.
2. Продьюсер должен задавать ключ партиции. Иначе в партициях будет хаос из данных по разным сущностям.
Дисклеймер: Вся информация здесь, это моя личная вольная интерпретация прочитанной доки по кафке, просмотренных видосов и разговоров с коллежанами. Если у вас есть возражения, то приносите их в комменты. Я очень благодарен всем, кто комментирует, лайкает и вообще проявляет активность в канале и в личке. Это супер-помогает мне не терять мотивацию!
#kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Возьму небольшой перерыв в кафкианской саге и расскажу тут про одну мегаполезную штуку, которая вот уже год служит нашей команде верой и правдой и помогает делать встречи короче и продуктивнее.
Заебывало знаете ли, что, бывает, сидишь на встречах, слушаешь по 30 минут, как люди спорят, куда надо подвинуть кнопку, а в итоге выясняют, что они вообще говорят о разных кнопках. И потом еще 30 минут слушаешь, как люди пытаются выяснить, кто из них бОльший долбоеб.
🅰️ Освоил простую, но эффективную технику и спустя год работы с ней, могу порекомендовать её однозначно. Она простая до того, что стыдно писать про неё пост (но я все же напишу). Называется техника "Дано, Когда, Тогда".
Суть простая. Когда кто-то из бизнеса описывает функционал, то проговаривает каждую фичу в формате:
"Дано: Кто-то хочет что-то"
"Когда: Этот кто-то делает действие"
"Тогда: Видит результат в таком-то формате"
К примеру, одна из наших фич с сумрачным названием:
Скопировать поп-ап управления отложек МенСмены в МенОфиса/ День
Что должно быть в результате? Хер знает. Вызываем технику Дано Когда Тогда:
Дано: Я как региональный управляющий могу зайти в Менеджер Офиса.
Когда: Я в интерфейсе МО на главной странице в разделе Трекинг — Отложено нажимаю мышкой на отложенные заказы
Тогда: Появляется такой же интерфейс как в Менеджере Смены при нажатии на кнопку Отложенных заказов - 0 в разделе Кухня на вкладке Главная.
В первой формулировке не понятно даже то, откуда в менеджере смены надо брать этот
Такое описание привело к тому, что мы начали рассматривать различные корнер-кейсы и выяснили, что к примеру не все детали интерфейса нужно будет переносить в окончательном решении:
Дано: Я как Менеджер Офиса выбираю пиццерию Сыктывкар-1. Я открываю Отложенные заказы на главной и вижу отложенные заказы из Сыктывкара-1.
Когда: Я смотрю на место, где в Менеджере Смены есть иконка принтера
Тогда: Вижу, что в Менеджере офиса ее там нет.
Конкретно этот критейрий снял головную боль по переносу функционала печати, который намертво вбит в Менеджера Смены.
⁉️ Тут же возникнет вопрос. Но, Дмитрий, пардон, есть же User Story Mapping, есть же доски в Miro, макеты, разве этого добра не хвататет?
Хватает, но User Story Mapping – формат тяжелый, как хрюкающие подсвинки сатаны. А функционал бывает не визуальным, к примеру в итоге действия должен проигрываться звук, так что фигмы никакой не будет. И еще плюсом этого формата является то, что он позволяет покрыть, как маленькие задачи, так и довольно большие.
User Story Mapping все еще отличный инструмент, но подходит он скорее для очень больших задач. Которых у нас не так много.
Как начать использовать Дано, Когда, Тогда? Да супер-изи!
Повторяйте до тех пор, пока не покроете все крайние случаи. Будет сложно, но через несколько PBRов навык отточится, и вы поймете насколько глубоко нужно детализировать каждый пункт и сколько таких пунктов нужно.
Еще можно позвать инженера по тестированию, чтобы он помог вам не сдаться на пути в бездну и помочь МАКСИМАЛЬНО детализировать крайние случаи.
#процессы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤩1🙏1
Хорошо, мы создали топик, разделили его на партиции. Но вдруг партиция раздулась так сильно, что ему пришла финита! А увеличивать место больше некуда по финансовым соображениям. А вы до этого читали, что из Кафки ничего не удалить! ЧТО ДЕЛОТЬ⁉️
Главное – не переживать! Дело в том, что кафка все пишет в файлы. Но делает это хитро. Когда размер файла достигает 1 Гб или возраст файла достигает недели (что быстрее наступит), брокер создает новый файл и начинает писать в него. С новым файлом произойдет то же самое, когда он увеличится до 1 Гб или проживет неделю.
Такие файлы называются сегМЕНТАМИ. (пояснительный дикпик выше
❓И как все это самоочищается?
Вы можете настроить всё так, чтобы эти сегменты понемногу чистились автоматически. Либо, когда место на диске начинает заканчиваться, либо когда возраст сегмента достигает определенного значения. Активный сегмент хрен удалишь, по понятным причинам.
Разме сегмента можно настроить, как на уровне настроек брокера, так и на уровне настроек топика. Кто кого переопределяет, тут я ХЗ. Выглядят эти настройки вот так:
log.segment. bytes
log.segment. ms
🅰️ Практические выводы:
1. Кафка все таки что-то удаляет, но удаляет сегментами. То есть откусывает кусочки партиции.
2. Настраивать сегменты имеет смысл, если вы понимаете, что у вас в брокере мало памяти, или же, если вы знаете, что данные в топике не нужно хранить дольше определенного срока.
В следующем посте буду разбираться с индексами и тем, как консьюмер ищет сообщения по партициям и их сегментам.
#kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1👏1
Самые внимательные заметили, что в прошлую пятницу обошлось без компильдота. А все почему? Потому что я отдыхаю. Отдыхать – важно, посему компильдот про отдых сегодня, товарищи!
Беседуют программист и тестировщик. Программист ноет:
- Начальство совсем оскотинилось, сколько времени можно работать без отпуска!
Тестировщик ему отвечает:
- У меня есть идея, как заработать хотя бы пару дней отдыха.
Вдруг он зацепляется ногой за трубу на потолке и висит вниз головой. Входит продакт. Хочет уже всех посадить за работу, как вдруг замечает тестировщика на потолке:
- Что это тут происходит? Что вы о себе думаете? Почему висите на потолке?
Тестировщик отвечает:
- Ничего особенного - я лампочка, освещаю комнату, почему бы мне и не висеть?
Продак в шоке:
- Знаете, что, мне кажется, вы немного переутомились, идите домой, и, чтобы на этой неделе я вас тут больше не видел!
Тестировщик собирается и уходит. Программист тоже начинает собирать вещи.
- А вы куда? - спрашивает начальник.
- Ну, я же не могу работать без света!
Так-с компильдот запостил, пора бы и ещё отдохнуть. Ставь лайк 👍, если готов лезть на потолок ради пары дополнительных дней отпуска и говняшку Скрэппи 💩, если в этот ноябрь всё еще пашешь, как трактор! 🚜
#компильдот
Please open Telegram to view this post
VIEW IN TELEGRAM
💩3🌚1
😰Постмортем на задачку.
В сентябре мы взялись за задачу, которая изначально показалась сложной, но выполнимой в предсказуемые сроки.
Для меня сроки – это супер-важная штука. Потому что сроки – это про доверие, а доверие, ну сами понимаете. Лучше его беречь в общем.
С момента образования команды в марте, мы соблюдали все поставленные сроки. В крайнем случае укладывались в интервалы погрешности.
Это получалось по нескольким причинам – все задачи были новым функционалом в отдельных компонентах и их удавалось легко декомпозировать без встревания в легаси. А еще мы неплохо научились составлять приемочные критерии к задачам, которые давали довольно четкое понимание того, как будет выглядеть готовая задача, но при этом оставляли достаточно свободы для оптимальной технической реализации.
В чем ситуация?
😞 В сентябре мы взялись за задачу, которую пообещали сделать за две недели. И вот в ноябре мне стыдно, что задача все еще в разработке. Почему стыдно? Ну потому что выполнение этой задачи в срок позволило бы ребятам в пиццериях проще пройти пики в ноябрьские праздники. Время пиздецовое, хотелось успеть функционал, который немного бы помог не сгорать на работе.
В общем, тут моя рефлексия на то, что пошло не так, и как бы могло пойти, если бы все было так.
❌ Какие были проблемы:
🔘 Один раз код пришлось полностью выкинуть. Из-за того, что логика легаси оказалась несовместима с изначально планируемым дизайном фичи.
🔘Потратили много времени на обсуждение двух вариантов решения, оба из которых через две недели разработки оказались неверными.
🔘Много неуверенности в работе под нагрузкой. Просто не знаем, как поведет себя одна из нагруженных таблиц, которая задействована в функционале.
🔘При планировании сроков не совсем глубоко исследовали старый функционал. В итоге не знали, как он будет работать в интеграци.
🔘Мне показалось, что я уже крутой опытный синьор и легаси мне ни по чём. Поэтому мы положили хуй на фактор легаси и фактор того, что мы мало работали в той области.
✅ Что мы сделали хорошо:
🔘Изначально ограничили количество пиццерий, на которых будем тестировать фичу
🔘Изначально постарались упростить первый вариант задачи по функционалу
🔘Взяли три дня на исследование легаси
🔘Сформулировали приемочные критерии
🤟Что бы помогло в следующий раз снизить боль от работы.
🔘Возможно документация по этому легаси нам помогла бы хоть немного. Хотя бы понять, что мы встрянем в это дерьмо надолго. Хотя бы задуматься об этом.
Сейчас доделаем наконец этот функционал. Надеюсь, что на проде все будет хорошо. Пишем сценарии для тестов и покрываем ими вот это все. Дальше ждет прод и проверка фичи на одной пиццерии на проде. А потом улучшение этой фичи для раскатки на большее количество пиццерий.
⏳ Что делаем перед следующим этапом задачи:
🔘Позвали одного из самых охуенных наших инженеров по тестированию, чтобы он помог нам составить и требования к следующей задаче и тест-кейсы и проследил, чтобы мы не филонили в покрытии тестами.
🔘Напишем доку по тому что сделали и тому, что раскопали.
🔘Измерим нагрузку, которую создает наш функционал на нагруженную таблицу и если нужно оптимизируем запрос и работу с базой.
🤬А еще будем учитывать фактор осени в следующем году. Ибо осенью мозг работает в пол силы. Нужно брать что-то менее амбициозное.(Кстати, ставь лайкосик, если тоже к осени опадаешь, как кленовый лист! 🍁)
#опыт #процессы #постмортем
В сентябре мы взялись за задачу, которая изначально показалась сложной, но выполнимой в предсказуемые сроки.
Для меня сроки – это супер-важная штука. Потому что сроки – это про доверие, а доверие, ну сами понимаете. Лучше его беречь в общем.
С момента образования команды в марте, мы соблюдали все поставленные сроки. В крайнем случае укладывались в интервалы погрешности.
Это получалось по нескольким причинам – все задачи были новым функционалом в отдельных компонентах и их удавалось легко декомпозировать без встревания в легаси. А еще мы неплохо научились составлять приемочные критерии к задачам, которые давали довольно четкое понимание того, как будет выглядеть готовая задача, но при этом оставляли достаточно свободы для оптимальной технической реализации.
В чем ситуация?
😞 В сентябре мы взялись за задачу, которую пообещали сделать за две недели. И вот в ноябре мне стыдно, что задача все еще в разработке. Почему стыдно? Ну потому что выполнение этой задачи в срок позволило бы ребятам в пиццериях проще пройти пики в ноябрьские праздники. Время пиздецовое, хотелось успеть функционал, который немного бы помог не сгорать на работе.
В общем, тут моя рефлексия на то, что пошло не так, и как бы могло пойти, если бы все было так.
❌ Какие были проблемы:
🔘 Один раз код пришлось полностью выкинуть. Из-за того, что логика легаси оказалась несовместима с изначально планируемым дизайном фичи.
🔘Потратили много времени на обсуждение двух вариантов решения, оба из которых через две недели разработки оказались неверными.
🔘Много неуверенности в работе под нагрузкой. Просто не знаем, как поведет себя одна из нагруженных таблиц, которая задействована в функционале.
🔘При планировании сроков не совсем глубоко исследовали старый функционал. В итоге не знали, как он будет работать в интеграци.
🔘Мне показалось, что я уже крутой опытный синьор и легаси мне ни по чём. Поэтому мы положили хуй на фактор легаси и фактор того, что мы мало работали в той области.
✅ Что мы сделали хорошо:
🔘Изначально ограничили количество пиццерий, на которых будем тестировать фичу
🔘Изначально постарались упростить первый вариант задачи по функционалу
🔘Взяли три дня на исследование легаси
🔘Сформулировали приемочные критерии
🤟Что бы помогло в следующий раз снизить боль от работы.
🔘Возможно документация по этому легаси нам помогла бы хоть немного. Хотя бы понять, что мы встрянем в это дерьмо надолго. Хотя бы задуматься об этом.
Сейчас доделаем наконец этот функционал. Надеюсь, что на проде все будет хорошо. Пишем сценарии для тестов и покрываем ими вот это все. Дальше ждет прод и проверка фичи на одной пиццерии на проде. А потом улучшение этой фичи для раскатки на большее количество пиццерий.
⏳ Что делаем перед следующим этапом задачи:
🔘Позвали одного из самых охуенных наших инженеров по тестированию, чтобы он помог нам составить и требования к следующей задаче и тест-кейсы и проследил, чтобы мы не филонили в покрытии тестами.
🔘Напишем доку по тому что сделали и тому, что раскопали.
🔘Измерим нагрузку, которую создает наш функционал на нагруженную таблицу и если нужно оптимизируем запрос и работу с базой.
🤬А еще будем учитывать фактор осени в следующем году. Ибо осенью мозг работает в пол силы. Нужно брать что-то менее амбициозное.
#опыт #процессы #постмортем
❤3
🅰️ TLDR:
Как обычно в ноябре - декабре это бывает, меня поприжало. Собственно, почему и не было постов. Туман в голове, рассеянность, общая слабость, невозможность войти в поток (
Справиться с этим состоянием не получалось. Ничего не помогало – ни витамины, ни походы к психологам. Сначала я старался все же делать посты через силу, но в итоге решил не давить из себя раба по капле, и просто забил, сконцентрировавшись на более достижимых аспектах моей жизни – прохождении Red Dead Redemption 2.
🧈 Но вмешался случай и случайным образом я случайно нашел решение проблемы (абсолютно СЛУЧАЙНО). Делюсь с вами.
Короче, я начал вставать с рассветом в 8:30, начинать работу в 9:00 и заканчивать в 16:00. По МСК это период с 8:00 до 15:00. Важно еще то, что после окончания работы у меня остается полтора часа светового дня на свои дела. То есть я не работаю от рассвета до заката прям, а немного гуляю при свете дня.
И, о чудо – продуктивность не то что выросла, а вернулась к дозимним показателям!
Тут возможно меня покритикуют, что я получается меньше работаю: типа 7 часов + перерыв на обед и турнички, итого всего 6 часов. Но йопт, лучше наверное 6 часов продуктивной работы в удовольствие, чем 8 часов недовольного топтания говна в ступе?
🅰️ Итого: Если чувтсвуете, что зимой началась хандра – попробуйте работать только при дневном свете (даже если его прям мало-мало) и заканчивать работу до заката. Возможно вы как и я заметите эффект с первого дня.
П.С.: И да, напишите в комментах или мне в личку, есть ли у вас что-то похожее зимой, и как вы с этим справляетесь? Мне было бы супер-интересно узнать.
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1🤓1