В ходе опроса мы выяснили, что для большинства людей самым трудным является выбор достойной компании, чтобы не оказаться снова в неприятной ситуации.
Мы обещали помочь, и вот наше предложение!
Дать универсальный совет, какой компании отдать предпочтение, невозможно. Например, кому-то сейчас может быть полезно поработать в стартапе, где он освоит новые фреймворки и технологии. Однако тот же человек через три года может выгореть от постоянной неопределенности и переработок в этом стартапе.
На наш взгляд, важно ориентироваться на долгосрочные карьерные цели. Только вы сами можете понять, чего хотите от жизни и карьеры. Здесь потребуется серьезная работа над собой и глубокое размышление. За вас мы этого сделать не сможем.
Но мы готовы предложить бесплатную карьерную консультацию для 10 человек.
Как это будет происходить:
1. Вам нужно будет подумать о том, где бы вы хотели оказаться через 5 лет, и оценить свое текущее положение.
2. Далее мы созвонимся, вместе проанализируем ваши цели, выберем подходящую компанию для следующего карьерного шага и составим дорожную карту, которая поможет вам достичь этой цели.
Что нужно сделать:
0. Важно: Участвовать могут только те, кто сейчас ищет работу или планирует сменить ее в ближайшие 2 месяца.
1. Оставить комментарий «Хочу карьерную консультацию».
2. Мы свяжемся с вами и отправим небольшую анкету.
3. По результатам анкетирования выберем 10 человек и назначим встречу.
Если вы из корчмы (это закрытый чат для выпускников курса разработка без боли и сожалений) то можете не утруждаться записью, с вами устроим отдельный созвон и все вместе детально разберем кейсы.
Мы обещали помочь, и вот наше предложение!
Дать универсальный совет, какой компании отдать предпочтение, невозможно. Например, кому-то сейчас может быть полезно поработать в стартапе, где он освоит новые фреймворки и технологии. Однако тот же человек через три года может выгореть от постоянной неопределенности и переработок в этом стартапе.
На наш взгляд, важно ориентироваться на долгосрочные карьерные цели. Только вы сами можете понять, чего хотите от жизни и карьеры. Здесь потребуется серьезная работа над собой и глубокое размышление. За вас мы этого сделать не сможем.
Но мы готовы предложить бесплатную карьерную консультацию для 10 человек.
Как это будет происходить:
1. Вам нужно будет подумать о том, где бы вы хотели оказаться через 5 лет, и оценить свое текущее положение.
2. Далее мы созвонимся, вместе проанализируем ваши цели, выберем подходящую компанию для следующего карьерного шага и составим дорожную карту, которая поможет вам достичь этой цели.
Что нужно сделать:
0. Важно: Участвовать могут только те, кто сейчас ищет работу или планирует сменить ее в ближайшие 2 месяца.
1. Оставить комментарий «Хочу карьерную консультацию».
2. Мы свяжемся с вами и отправим небольшую анкету.
3. По результатам анкетирования выберем 10 человек и назначим встречу.
Если вы из корчмы (это закрытый чат для выпускников курса разработка без боли и сожалений) то можете не утруждаться записью, с вами устроим отдельный созвон и все вместе детально разберем кейсы.
Telegram
StringConcat - разработка без боли и сожалений
Я ходил на собеседование в очень странный стартап. Как вы помните, я ищу работу, чтобы меня не попёрли из Сингапура, а потому хожу на всякие собеседования. Сегодня расскажу о беседе с Head of Product, который раньше работал в Гугле.
Перед собеседованием…
Перед собеседованием…
🔥6😁3🥴3
Forwarded from kyrillic
Про доходы разработчиков в "технологических хабах". На реддите кто-то собрал с levels.fyi данные по з/п software engineer в городах, которые любят называть tech hubs. Посчитал после налогов, добавил арендой скромного жилья в этих локациях с numbeo, учел cost of living и rent index.
Можно оценить, как получится копить разработчику в разных городах!
К точности данных могут быть вопросы, многим указанное на levels кажется завышенным. Может и так, но нам важна разница между городами. Выводы актуальны для любых айтишников, просто разработчики - самые горячие пирожки.
Данные хорошо иллюстрируют многие мои тезисы:
1️⃣ В 🇺🇸 США з/п несравнимо выше, чем почти везде. В Европе очень мало городов, где есть что-то близкое. Ну да, 🇨🇭 Швейцария, 🇬🇧 Лондон и 🇮🇪 дублинский фаанг.
2️⃣ Самым амбициозным молодым инженерам нет смысла ехать в 🇪🇺 ЕС: на горизонте 5-10 лет менее талантливые знакомые, уехавшие в США, станут и богаче, и востребованнее (пост про талантов 22-25 лет).
3️⃣ Качество жизни в Западной Европе безусловно выше, чем в США. Но это справедливее для тех, кто зарабатывает немного. А сеньор разработчики могут позволить себе околоевропейский уровень в США. И все равно останется больше денег от зарплаты!
4️⃣ "Europe is the new India for US companies" - отметили на реддите. Я этот тренд тоже вижу: европейский аутсорс становится популярнее. Выводы можете сделать сами 🥲
С венчуром в ЕС становится все грустнее (пост) --> отрыв US-зарплат будет еще больше --> еще больше аутсорса на США из Европы --> повышение конкуренции для ru-аутсорса --> из Сербии и Грузии фрилансить будет сложнее! (пост про локацию в профиле)
5️⃣ 🇦🇪 Дубай для разработчиков, в контексте накопления капитала, - это "США курильщика". Не сомневаюсь, что почти каждый разработчик в офисах Дубая согласится на оффер из Нью Йорка. И тут важное: окружение в Дубае не очень помогает погрузиться в нюансы западной корп. культуры. А значит условная Канада, Германия, Финляндия с более низкой з/п - стратегически разумнее.
6️⃣ Из всего списка только один европейский город с хорошим климатом. Сами знаете, какой!
7️⃣ Вот прикольный сайт, где можно сравнить, сколько может накопить разработчик в разных городах мира: codecapitals.com. Поплачьте, неразработчики 🥲
8️⃣ Мой любый коммент:
В общем безрадостно для многих. Euro-poors! 🥲
@kyrillic
Можно оценить, как получится копить разработчику в разных городах!
К точности данных могут быть вопросы, многим указанное на levels кажется завышенным. Может и так, но нам важна разница между городами. Выводы актуальны для любых айтишников, просто разработчики - самые горячие пирожки.
Данные хорошо иллюстрируют многие мои тезисы:
1️⃣ В 🇺🇸 США з/п несравнимо выше, чем почти везде. В Европе очень мало городов, где есть что-то близкое. Ну да, 🇨🇭 Швейцария, 🇬🇧 Лондон и 🇮🇪 дублинский фаанг.
2️⃣ Самым амбициозным молодым инженерам нет смысла ехать в 🇪🇺 ЕС: на горизонте 5-10 лет менее талантливые знакомые, уехавшие в США, станут и богаче, и востребованнее (пост про талантов 22-25 лет).
3️⃣ Качество жизни в Западной Европе безусловно выше, чем в США. Но это справедливее для тех, кто зарабатывает немного. А сеньор разработчики могут позволить себе околоевропейский уровень в США. И все равно останется больше денег от зарплаты!
4️⃣ "Europe is the new India for US companies" - отметили на реддите. Я этот тренд тоже вижу: европейский аутсорс становится популярнее. Выводы можете сделать сами 🥲
С венчуром в ЕС становится все грустнее (пост) --> отрыв US-зарплат будет еще больше --> еще больше аутсорса на США из Европы --> повышение конкуренции для ru-аутсорса --> из Сербии и Грузии фрилансить будет сложнее! (пост про локацию в профиле)
5️⃣ 🇦🇪 Дубай для разработчиков, в контексте накопления капитала, - это "США курильщика". Не сомневаюсь, что почти каждый разработчик в офисах Дубая согласится на оффер из Нью Йорка. И тут важное: окружение в Дубае не очень помогает погрузиться в нюансы западной корп. культуры. А значит условная Канада, Германия, Финляндия с более низкой з/п - стратегически разумнее.
6️⃣ Из всего списка только один европейский город с хорошим климатом. Сами знаете, какой!
7️⃣ Вот прикольный сайт, где можно сравнить, сколько может накопить разработчик в разных городах мира: codecapitals.com. Поплачьте, неразработчики 🥲
8️⃣ Мой любый коммент:
Can confirm. Moved from EU to USA. Quadrupled my salary. All the issues Europeans think Americans have do not apply to high earners like engineers. Healthcare? My hospital stay cost me $250. Safety? My building has its own 24/7 security. Schools? Who cares— by the time my kids will be ready for college I’ll be sitting on at least $5M conservatively, $8M realistically. And they still have the option of dual citizenship and studying in Europe as a backup plan.
Yes EU>USA for anyone in lower to upper middle class but holy crap if you’re an engineer and you have the option MOVE. Quality of life is great for engineers here: shit delivered to your doorstep at all hours; private pools; private gyms; giant SUV; freaking boat; it’s just such a practical country to live in.
В общем безрадостно для многих. Euro-poors! 🥲
@kyrillic
👍6❤3🔥2😭1
Полюби легаси, %username%
Намедни листал вакансии (нет, меня пока ещё не попёрли), наткнулся на формулировку типа «проект не легаси» и задумался. В айтишной среде под легаси всегда понимают что-то плохое, древнее и такое тоскливо-мерзкое, что не хочется и палкой трогать.
Но на деле старое — не всегда плохое. Мне попадались штуки, написанные в седом мезозое на реликтовых технологиях, которые было легче поддерживать и дорабатывать, чем многие современные поделия. В этих легасных штуках был чётких и понятный замысел, а часть решений опередили время.
Был бы я тогда поумнее, не стал бы лишний раз возмущаться отсутствию моднейших фреймворков, а повнимательнее разобрал принципы, которые были заложены в системе. До меня тогда не дошло, что эта штука проработала десятки лет и никого не достала настолько, чтобы всё сжечь и написать заново на котлине.
Попадались ли вам такие артефакты? Верите ли вы в них? Становится ли мир лучше или будущее человечества мрачно и безысходно? Нам важно это знать
Намедни листал вакансии (нет, меня пока ещё не попёрли), наткнулся на формулировку типа «проект не легаси» и задумался. В айтишной среде под легаси всегда понимают что-то плохое, древнее и такое тоскливо-мерзкое, что не хочется и палкой трогать.
Но на деле старое — не всегда плохое. Мне попадались штуки, написанные в седом мезозое на реликтовых технологиях, которые было легче поддерживать и дорабатывать, чем многие современные поделия. В этих легасных штуках был чётких и понятный замысел, а часть решений опередили время.
Был бы я тогда поумнее, не стал бы лишний раз возмущаться отсутствию моднейших фреймворков, а повнимательнее разобрал принципы, которые были заложены в системе. До меня тогда не дошло, что эта штука проработала десятки лет и никого не достала настолько, чтобы всё сжечь и написать заново на котлине.
Попадались ли вам такие артефакты? Верите ли вы в них? Становится ли мир лучше или будущее человечества мрачно и безысходно? Нам важно это знать
👍37⚡4🤔2
ВНЕЗАПНО, немного про метрики. Обычно для отслеживания работы приложений мы используем несколько приёмов:
1. Тащим все количественные штуки, которые можем найти в приложении
Количество свободных подключений в пуле БД или чём-то подобном, процент попадания в кеш, количество запросов и прочее.
Во многих случаях «ручки» для мониторинга предусмотрены заранее или даже вытащены производителями фреймворков наружу. Например, в Spring Boot можно получить инфу о состоянии пула БД.
2. Тащим временные метрики
С ними чуть сложнее. Нужно обмазывать метриками вручную каждый функциональный уровень (слой, если хотите) условной аннотацией @Timed:
— Контроллер (обычно в том же спринге метрики выведены)
— Сервисы уровня приложений
— Все внешние адаптеры, не важно, куда мы ходим, в БД или внешнюю систему
3. Тащим количество событий предметной области по каждому из типов
Служит косвенным признаком, что с системой всё хорошо. Технически всё может быть исправно, но по какой-то причине пользователи перестали жмакать кнопки, по количеству событий можем заметить, что что-то не так.
Итого, это необходимый минимум метрик для наблюдений за приложением (ну, помимо стандартных CPU и прочего). Можно раньше пользователей увидеть, что что-то идёт не так. Также можно профилировать, гонять нагрузочные тесты и хотя бы примерно понимать, где тормозит.
Есть и более хардкорный вариант — непрерывное профилирование, когда профайлинг идёт в реальном времени и можно увидеть, где, что и сколько выполнялось, примерно как в обычной IDE. Если у вас нагруженное приложение, можно попробовать эту практику, вместо того чтобы спрашивать у админов «а чо как мне тут агента подсунуть, профайлить хотим».
1. Тащим все количественные штуки, которые можем найти в приложении
Количество свободных подключений в пуле БД или чём-то подобном, процент попадания в кеш, количество запросов и прочее.
Во многих случаях «ручки» для мониторинга предусмотрены заранее или даже вытащены производителями фреймворков наружу. Например, в Spring Boot можно получить инфу о состоянии пула БД.
2. Тащим временные метрики
С ними чуть сложнее. Нужно обмазывать метриками вручную каждый функциональный уровень (слой, если хотите) условной аннотацией @Timed:
— Контроллер (обычно в том же спринге метрики выведены)
— Сервисы уровня приложений
— Все внешние адаптеры, не важно, куда мы ходим, в БД или внешнюю систему
3. Тащим количество событий предметной области по каждому из типов
Служит косвенным признаком, что с системой всё хорошо. Технически всё может быть исправно, но по какой-то причине пользователи перестали жмакать кнопки, по количеству событий можем заметить, что что-то не так.
Итого, это необходимый минимум метрик для наблюдений за приложением (ну, помимо стандартных CPU и прочего). Можно раньше пользователей увидеть, что что-то идёт не так. Также можно профилировать, гонять нагрузочные тесты и хотя бы примерно понимать, где тормозит.
Есть и более хардкорный вариант — непрерывное профилирование, когда профайлинг идёт в реальном времени и можно увидеть, где, что и сколько выполнялось, примерно как в обычной IDE. Если у вас нагруженное приложение, можно попробовать эту практику, вместо того чтобы спрашивать у админов «а чо как мне тут агента подсунуть, профайлить хотим».
Telegram
Microservices | Вопросы с Собеседований
⚡Continuous profiling
Continuous profiling - техника постоянного сбора данных о ресурсах, затрачиваемых приложением
Обычно профилирование применяется как ситуативная мера, чтобы здесь и сейчас подебагать перфоманс приложения. Но это не позволяет анализировать…
Continuous profiling - техника постоянного сбора данных о ресурсах, затрачиваемых приложением
Обычно профилирование применяется как ситуативная мера, чтобы здесь и сейчас подебагать перфоманс приложения. Но это не позволяет анализировать…
👍12🔥4
Как получить +6000 $ к офферу в год
Моя эпопея с поиском работы закончилась. Я подписал оффер с банком в Сингапуре, да ещё умудрился поторговаться в патовой ситуации. Выбор-то был между «найти хоть что-то за деньги и остаться» или «потерять депозит за квартиру и уезжать». Расскажу, как всё было.
Мне позвонили из банка и назвали сумму выше моей зарплаты в Thoughtworks, но всего на 5%. У меня было несколько секунд, чтобы прощупать, готовы ли они подвинуться. Но оффер ни в коем случае нельзя было отклонять и не переводить переговоры в почту, что всё сильно бы затянуло. Подбирать слова времени не было, так что я выдал следующее:
— Большое спасибо за предложение, я очень ценю его и то, сколько сил мы сообща к нему приложили. Но я хотел бы спросить, подлежит ли сумма обсуждению?
И мне ответили: — Да, сумма обсуждаемая. Я спрошу руководство и вернусь.
На следующий день из банка прислали письмо с заголовком “final offer” и плюс 500 $ к зарплате в месяц. А 500 в месяц это уже 6000 в год, так что переговоры удались.
А всё благодаря Оле — нашему соавтору курса «Фундаментальный подход к построению карьеры в IT». Оля написала раздел про торговлю за оффер, который отложился в моей памяти и всплыл в нужный момент.
Фраза для торгов за оффер на английском:
Моя эпопея с поиском работы закончилась. Я подписал оффер с банком в Сингапуре, да ещё умудрился поторговаться в патовой ситуации. Выбор-то был между «найти хоть что-то за деньги и остаться» или «потерять депозит за квартиру и уезжать». Расскажу, как всё было.
Мне позвонили из банка и назвали сумму выше моей зарплаты в Thoughtworks, но всего на 5%. У меня было несколько секунд, чтобы прощупать, готовы ли они подвинуться. Но оффер ни в коем случае нельзя было отклонять и не переводить переговоры в почту, что всё сильно бы затянуло. Подбирать слова времени не было, так что я выдал следующее:
— Большое спасибо за предложение, я очень ценю его и то, сколько сил мы сообща к нему приложили. Но я хотел бы спросить, подлежит ли сумма обсуждению?
И мне ответили: — Да, сумма обсуждаемая. Я спрошу руководство и вернусь.
На следующий день из банка прислали письмо с заголовком “final offer” и плюс 500 $ к зарплате в месяц. А 500 в месяц это уже 6000 в год, так что переговоры удались.
А всё благодаря Оле — нашему соавтору курса «Фундаментальный подход к построению карьеры в IT». Оля написала раздел про торговлю за оффер, который отложился в моей памяти и всплыл в нужный момент.
Фраза для торгов за оффер на английском:
— Thank you for your generous offer. I value the effort we put in to make this happen. However, I would like to check if the offer is negotiable.
🔥58👍29
Как я получал оффер от банка
В Thoughtworks меня только-только сократили, я написал в LinkedIn, что я бедный и несчастный, ищу работу, и лёг спать.
В 11:00 следующего дня в телеграме мне пишет неизвестный: «я не знаю кто ты, ноя тебя найду уже 3 человека сказали, что я обязан с тобой поговорить. Если нужна работа, приезжай в офис».
Первым рекомендателем оказался мой бывший коллега, Thoughtworker старой закалки. Он перешёл в этот банк несколько лет назад. Увидел мой пост и с утра пошёл к СТО сказать, что есть я, которого ещё вчера Thoughtworks предлагал им взять в аренду в 2 раза дороже, чем я сегодня стою.
Второй — мой знакомый, с которым мы жарили шашлыки и пили пиво. Тоже увидел мой пост и за утренним кофе тому же СТО сказал, что было бы неплохо меня нанять.
Но их всех опередил мой бывший проджект-менеджер, который решил позвонить этому СТО ещё вечером накануне.
В итоге я пришёл на собеседование, где мне час рассказывали, как в банке что устроено, какие есть проблемы и как они видят будущее. Я сидел и думал, когда же начать рассказ о себе. Но хвататься расхотелось, когда СТО пожаловался, что обо мне ему уже все рассказали, и не один раз. Но бедный СТО не знал, что на следующий день его ждёт встреча с Омаром — директором финсектора Thoughtworks. Драматизм ситуации в том, что это человек, который может продать что угодно кому угодно. И именно у Омара я научился отвечать на вопросы клиента, когда напрямую ответить нельзя, и заражать клиента своими идеями. Омар встретился с СТО по другому вопросу, но тоже между делом искренне меня рекомендовал, так что у банка шансов не оставалось.
Вывод: личные контакты решают. Если у вас проблема — расскажите о ней, и помощь может прийти оттуда, откуда не ждали.
В Thoughtworks меня только-только сократили, я написал в LinkedIn, что я бедный и несчастный, ищу работу, и лёг спать.
В 11:00 следующего дня в телеграме мне пишет неизвестный: «я не знаю кто ты, но
Первым рекомендателем оказался мой бывший коллега, Thoughtworker старой закалки. Он перешёл в этот банк несколько лет назад. Увидел мой пост и с утра пошёл к СТО сказать, что есть я, которого ещё вчера Thoughtworks предлагал им взять в аренду в 2 раза дороже, чем я сегодня стою.
Второй — мой знакомый, с которым мы жарили шашлыки и пили пиво. Тоже увидел мой пост и за утренним кофе тому же СТО сказал, что было бы неплохо меня нанять.
Но их всех опередил мой бывший проджект-менеджер, который решил позвонить этому СТО ещё вечером накануне.
В итоге я пришёл на собеседование, где мне час рассказывали, как в банке что устроено, какие есть проблемы и как они видят будущее. Я сидел и думал, когда же начать рассказ о себе. Но хвататься расхотелось, когда СТО пожаловался, что обо мне ему уже все рассказали, и не один раз. Но бедный СТО не знал, что на следующий день его ждёт встреча с Омаром — директором финсектора Thoughtworks. Драматизм ситуации в том, что это человек, который может продать что угодно кому угодно. И именно у Омара я научился отвечать на вопросы клиента, когда напрямую ответить нельзя, и заражать клиента своими идеями. Омар встретился с СТО по другому вопросу, но тоже между делом искренне меня рекомендовал, так что у банка шансов не оставалось.
Вывод: личные контакты решают. Если у вас проблема — расскажите о ней, и помощь может прийти оттуда, откуда не ждали.
👍46😁8🔥6👎2
StringConcat - разработка без боли и сожалений
Как я получал оффер от банка В Thoughtworks меня только-только сократили, я написал в LinkedIn, что я бедный и несчастный, ищу работу, и лёг спать. В 11:00 следующего дня в телеграме мне пишет неизвестный: «я не знаю кто ты, но я тебя найду уже 3 человека…
Пока Сережа наслаждается успехом, мы снова возвращаемся к духоте.
Коллеги скинули всё ещё актуальную заметку про предварительный анализ. Не обращайте внимания на название, суть там в другом — перед тем как что-то реализовывать, это стоит описать в доке.
Например:
— какие изменения нужно внести
— какие будут контракты
— как лучше тестировать
— etc
Я сам исповедую примерно такой подход уже в нескольких конторах. Кажется, что это бюрократия и трата времени, но в итоге у всех участников выравнивается понимание конечного результата. Особенно когда такая дока пишется сообща. Тестеры понимают, как тестить, разрабы понимают, как ревьювить и т.д. Метод сильно отличается от классического «вот вам задача в жыре, сами понимайте, что я тут имел ввиду, вы ж умные»
В итоге количество непоняток и переделок снижается в разы, легко организовать трассировку, а разработчики уходят с полным пониманием задачи и повышается точность прогнозирования сроков в сторипоинтах.
Что ещё можно добавить в такую доку?
— контекст: зачем мы вообще это делаем, какую задачу решаем
— модель предметной области на основе Event Storming
— use case и альтернативные сценарии
— макеты в Фигме
— какая документация должна родиться
— какие метрики нужно вывести
— какие алерты настроить
— что поменяется в инфраструктуре
— риски безопасности
— любые другие технические подробности
— ссылки на другие документы
Несколько важных наблюдений
1. Документ обычно описывает ближайшую задачу, никаких «на вырост». Версии тут как таковых нет, потому что мы очень плохо можем в дифф.
2. Документ обычно пишется на пользовательскую историю или похожий артефакт, то есть в изготовлении доки задействуются и фронтендеры и бекендеры и тестировщики, которым это потом чинить. Далее сторя разбивается на подзадачи для конкретных спецов. Фактически мы начинаем разрабатывать на бумаге, продумываем самые сложные сценарии, а кодить можно уже спинным мозгом. В этом отличие от классических требований (даже самых подробных) описываемых аналитиками.
3. Документирование может отмереть, если команда нарастит квалификацию и достаточно сработается. Это нормально, потому что цель — не бумажка, а общее понимание результата.
4. Подход слабо работает в лапшекоде уровня «после просмотра промыть глазаа хлоргексидином», ибо количество непредвиденных ситуаций ломает начальную идею полностью. Хотя полностью от них избавиться не получится даже в поддерживаемом коде
Коллеги скинули всё ещё актуальную заметку про предварительный анализ. Не обращайте внимания на название, суть там в другом — перед тем как что-то реализовывать, это стоит описать в доке.
Например:
— какие изменения нужно внести
— какие будут контракты
— как лучше тестировать
— etc
Я сам исповедую примерно такой подход уже в нескольких конторах. Кажется, что это бюрократия и трата времени, но в итоге у всех участников выравнивается понимание конечного результата. Особенно когда такая дока пишется сообща. Тестеры понимают, как тестить, разрабы понимают, как ревьювить и т.д. Метод сильно отличается от классического «вот вам задача в жыре, сами понимайте, что я тут имел ввиду, вы ж умные»
В итоге количество непоняток и переделок снижается в разы, легко организовать трассировку, а разработчики уходят с полным пониманием задачи и повышается точность прогнозирования сроков
Что ещё можно добавить в такую доку?
— контекст: зачем мы вообще это делаем, какую задачу решаем
— модель предметной области на основе Event Storming
— use case и альтернативные сценарии
— макеты в Фигме
— какая документация должна родиться
— какие метрики нужно вывести
— какие алерты настроить
— что поменяется в инфраструктуре
— риски безопасности
— любые другие технические подробности
— ссылки на другие документы
Несколько важных наблюдений
1. Документ обычно описывает ближайшую задачу, никаких «на вырост». Версии тут как таковых нет, потому что мы очень плохо можем в дифф.
2. Документ обычно пишется на пользовательскую историю или похожий артефакт, то есть в изготовлении доки задействуются и фронтендеры и бекендеры и тестировщики, которым это потом чинить. Далее сторя разбивается на подзадачи для конкретных спецов. Фактически мы начинаем разрабатывать на бумаге, продумываем самые сложные сценарии, а кодить можно уже спинным мозгом. В этом отличие от классических требований (даже самых подробных) описываемых аналитиками.
3. Документирование может отмереть, если команда нарастит квалификацию и достаточно сработается. Это нормально, потому что цель — не бумажка, а общее понимание результата.
4. Подход слабо работает в лапшекоде уровня «после просмотра промыть глазаа хлоргексидином», ибо количество непредвиденных ситуаций ломает начальную идею полностью. Хотя полностью от них избавиться не получится даже в поддерживаемом коде
Хабр
Три недели кодирования экономят два дня проектирования
Введение Об авторе Меня зовут Леонид «Лео» Царев. Я бывший программист на .Net (18+ лет опыта), последние 10 лет я тимлид/архитектор/руководитель. Сейчас я директор департамента разработки в компании...
🔥14❤4👍3💩1
Сергей на связи!
На новой работе увидел интересный приём, которым архитекторы кошмарят разработчиков. Спешу поделится.
Значит, у архитектора есть 2 большие задачи.
Задача раз: выработать нефункциональные требования, а потом на их основе нарисовать архитектуру. Задача сложная, но с ней более-менее большинство справляется.
Задача два: проследить, чтобы команда соблюдала заложенные в архитектуру принципы. С этим справляются уже не все, зачастую фантазии хватает только разносить всех на code review. Если у архитектора команда на 5-7 разработчиков, то так прожить ещё можно. А если у вас целый департамент на 50-70 программистов — ну такое.
Конечно, нужно автоматизировать битьё разработчиков по рукам. Например, автоматически проверять % покрытия тестами, или code style. Как правило, они интегрируются в систему сборки и запускаются автоматически, заваливая билд, если какая-то договорённость не соблюдена.
Но если репозиториев уже под сотню, и они плодятся каждый день? Тогда следить за соблюдением договорённостей помогает вот это:
— везде интегрирован jacoco, который проверяет покрытие тестами хотя бы 80%
— во всех репозиториях используется один code style
— все зависимости тянутся только из внутреннего репозитория
Делюсь подсмотренным приёмом: использовать стандартизированный gradle. Как правило, любая сборка состоит из интегрированных плагинов, конфигурация которых вручную копируется из одного проекта в другой. Но можно сделать собственный gradle wrapper со всеми установленными и настроенными плагинами.
Как работает
Архитектор один раз создёет репозиторий, который будет билдить
Далее архитектор создает обычный файл
Профит! Теперь в проект интегрировано всё минимально необходимое.
Фича зовётся gradle init scripts
Минусы
Если вдруг политики поменялись, скажем, мы резко захотели добавить какой-нибудь security плагин, то пока проекты не обновят версию грейдла, никакого чуда не произойдёт.
На новой работе увидел интересный приём, которым архитекторы кошмарят разработчиков. Спешу поделится.
Значит, у архитектора есть 2 большие задачи.
Задача раз: выработать нефункциональные требования, а потом на их основе нарисовать архитектуру. Задача сложная, но с ней более-менее большинство справляется.
Задача два: проследить, чтобы команда соблюдала заложенные в архитектуру принципы. С этим справляются уже не все, зачастую фантазии хватает только разносить всех на code review. Если у архитектора команда на 5-7 разработчиков, то так прожить ещё можно. А если у вас целый департамент на 50-70 программистов — ну такое.
Конечно, нужно автоматизировать битьё разработчиков по рукам. Например, автоматически проверять % покрытия тестами, или code style. Как правило, они интегрируются в систему сборки и запускаются автоматически, заваливая билд, если какая-то договорённость не соблюдена.
Но если репозиториев уже под сотню, и они плодятся каждый день? Тогда следить за соблюдением договорённостей помогает вот это:
— везде интегрирован jacoco, который проверяет покрытие тестами хотя бы 80%
— во всех репозиториях используется один code style
— все зависимости тянутся только из внутреннего репозитория
Делюсь подсмотренным приёмом: использовать стандартизированный gradle. Как правило, любая сборка состоит из интегрированных плагинов, конфигурация которых вручную копируется из одного проекта в другой. Но можно сделать собственный gradle wrapper со всеми установленными и настроенными плагинами.
Как работает
Архитектор один раз создёет репозиторий, который будет билдить
gradle wrapper. Он публикуется в артифактори и становится доступен для скачивания как обычный пакет.Далее архитектор создает обычный файл
build.gradle, добавляет зависимости по вкусу, типа спринга или junit, и настраивает плагины, к примеру, jacoco. Зовётся это init scripts. Архитектор публикует грейдл, рассылает всем разработчикам ссылку на него и идёт спокойно пить пиво. Теперь разработчики при создании проекта указывают, что wrapper надо скачивать не с gradle.org, а из вашего репозитория.gradle-wrapper.properties
distributionUrl=https://artifactory.your.org/repository/gradle-8.5.zipПрофит! Теперь в проект интегрировано всё минимально необходимое.
Фича зовётся gradle init scripts
Минусы
Если вдруг политики поменялись, скажем, мы резко захотели добавить какой-нибудь security плагин, то пока проекты не обновят версию грейдла, никакого чуда не произойдёт.
👍20🤮6🤔5🥴2💩1
Первые впечатления от работы
Ситуация. Разрабатываем anticorruption layer между бравыми цифровыми сервисами банка и глючным core. Проекту три месяца. У всех разработчиков опыта минимум 7 лет. Из репозитория машет маленький-жук навозник, почти свалявший себе шарик говна. Буду вести репортаж, как мы всё это будем пересаживать на рельсы clean architecture.
Пока план такой:
1. Понять, как должно быть, и насколько мы далеки от этого
2. Найти единомышленников или хотя бы неравнодушных
3 .Разработать план рефакторинга, включив туда как можно больше людей. Чтобы все были повязаны и не саботировали потом.
4. Запихнуть задачи на рефакторинг в ближайшие спринты. Чего ждать.
На следующей неделе расскажу, как пошло.
Нам писали, что курс «Поваренная книга дядюшки Боба» тормозит. Докладываю: курс перезалит, теперь можно смотреть без регистрации, VPN и тормозов. Даже с мобилы.
Ситуация. Разрабатываем anticorruption layer между бравыми цифровыми сервисами банка и глючным core. Проекту три месяца. У всех разработчиков опыта минимум 7 лет. Из репозитория машет маленький-жук навозник, почти свалявший себе шарик говна. Буду вести репортаж, как мы всё это будем пересаживать на рельсы clean architecture.
Пока план такой:
1. Понять, как должно быть, и насколько мы далеки от этого
2. Найти единомышленников или хотя бы неравнодушных
3 .Разработать план рефакторинга, включив туда как можно больше людей. Чтобы все были повязаны и не саботировали потом.
4. Запихнуть задачи на рефакторинг в ближайшие спринты. Чего ждать.
На следующей неделе расскажу, как пошло.
Нам писали, что курс «Поваренная книга дядюшки Боба» тормозит. Докладываю: курс перезалит, теперь можно смотреть без регистрации, VPN и тормозов. Даже с мобилы.
👍21🔥5❤3🥴2
Forwarded from DDDevotion
Почему агрегаты должны хранить свои секреты
Когда в чате обсуждают агрегаты, то в первую очередь упоминают инварианты и транзакционные границы, но есть еще один критический аспект, который нельзя игнорировать: сокрытие деталей внутренних сущностей. Агрегаты должны быть не просто контейнерами для реализации бизнес-правил - они также должны защищать свою внутреннюю структуру. Одна из важнейших функций агрегата - обеспечить, чтобы его внутренние сущности и объекты значений не использовались (и тем более не изменялись) внешним кодом. Например, агрегат
Order может содержать список элементов Product. Вместо того чтобы разрешать доступ, например order.Products.Add(product), лучше добавить метод order.AddProduct(product).Почему? Потому что таким образом агрегат контролирует все необходимые проверки и пересчеты внутри себя. Это сохраняет логику последовательной, гарантируя, что когда нам надо пересчитать что-то вроде
TotalPrice, то мы сделаем это в одном месте и сразу для всех. Внешний код не должен знать, как именно это делается. Но это не все, самое важное:Сохранение секретов == гибкость
Когда агрегаты скрывают свою внутреннюю структуру, наша система становится гораздо более гибкой. Вы можете рефакторить внутрянку, не переживая за другие части кодовой базы. Внешние компоненты взаимодействуют с агрегатами через четко определенный интерфейс (aggregate root, корень агрегата), что делает наш код более устойчивым к изменениям.
Таким образом, скрыв внутренние детали, мы можем сосредоточиться на основных обязанностях агрегатов: выполнении бизнес-правил и поддержании согласованности. В результате, мы не только снижаем сложность, но и повышаем гибкость и поддерживаемость нашей доменной модели, облегчая реализацию будущих изменений.
👍19❤4🔥2
Антипаттерн «Кадастровый инженер»
Хочет всё размежевать, чтобы не слиплось. Считает, что разделение по репозиториям и приложениям — панацея от скверны лапшекода. Мол, щас всё растащим, и никто не сможет использовать Х в У.
Такой подход работает, но, как всегда, есть нюанс: можно ошибиться с границей разрезания. Например, нарезать не там в микросервисах, и получим неподдерживаемое распределённое нечто.
Крайнее проявление — вынести в отдельный репозиторий каждый компонент единой системы: тесты, вёрстку, сервисы, скрипты миграций и т.д. Тогда вашей работой становится жонглирование ветками и толкание локтями коллег в репозиториях в попытках собрать всё воедино хотя бы на CI-сервере.
Чтобы разрез сильно не болел, нужно научиться искать логические границы и уметь пресекать нарушения. Потом дать границам устояться, и только потом отрезать. Попытка что-либо отрезать в бардаке приводит к ещё большему бардаку.
Как понять, что разделили неправильно? Когда для одной задачи вам приходится коммитить сразу в несколько репозиториев и в строгой последовательности. У репозиториев оказался слишком высокий coupling. Да, представьте coupling и cohesion применим и в рамках git-репозитория.
Хочет всё размежевать, чтобы не слиплось. Считает, что разделение по репозиториям и приложениям — панацея от скверны лапшекода. Мол, щас всё растащим, и никто не сможет использовать Х в У.
Такой подход работает, но, как всегда, есть нюанс: можно ошибиться с границей разрезания. Например, нарезать не там в микросервисах, и получим неподдерживаемое распределённое нечто.
Крайнее проявление — вынести в отдельный репозиторий каждый компонент единой системы: тесты, вёрстку, сервисы, скрипты миграций и т.д. Тогда вашей работой становится жонглирование ветками и толкание локтями коллег в репозиториях в попытках собрать всё воедино хотя бы на CI-сервере.
Чтобы разрез сильно не болел, нужно научиться искать логические границы и уметь пресекать нарушения. Потом дать границам устояться, и только потом отрезать. Попытка что-либо отрезать в бардаке приводит к ещё большему бардаку.
Как понять, что разделили неправильно? Когда для одной задачи вам приходится коммитить сразу в несколько репозиториев и в строгой последовательности. У репозиториев оказался слишком высокий coupling. Да, представьте coupling и cohesion применим и в рамках git-репозитория.
🔥13👍7👏1
Небольшая заметка о стрессоустойчивости и вреде гиблых проектов https://vk.com/@-200496256-timlid-ozverel
VK
Что делать, если тимлид озверел
Читатель спрашивает: поставили нового тимлида, который орёт на всех и прямо заявляет, что знает лучше, и все должны делать, что им говоря..
🔥29👏1
Ребята из Postgres Professional написали неплохую книгу «PostgreSQL 16 изнутри»
Какие темы охватывает книга:
— Устройство shared buffer
— Как работает WAL
— Как выполняются запросы
— Зачем нам вакуум
— Как работают индексы
— Как устроен MVCC
— etc
Всего 665 страниц годноты на русском. Кому лень читать — у ребят есть ютуп-канал, посвящённый той же теме
Просвещайтесь!
#полезнота
Какие темы охватывает книга:
— Устройство shared buffer
— Как работает WAL
— Как выполняются запросы
— Зачем нам вакуум
— Как работают индексы
— Как устроен MVCC
— etc
Всего 665 страниц годноты на русском. Кому лень читать — у ребят есть ютуп-канал, посвящённый той же теме
Просвещайтесь!
#полезнота
🔥27👍7❤1
Последние несколько месяцев слышал от разных людей (у нас и за границей) похожие истории про техдолг:
Не можем получить новую фичу вообще никак. Сроки просраны, а результат не предвидится. Заливание баблом, джунами и индусами больше не работает. Начальство в бешенстве, переписывать нет времени, что делать — не понятно.
В общем, долго клали болт на соответствие потребностей и реализации, и вот вдруг ВНЕЗАПНО что-то пошло не так.
Возможно, это явление массовое и происходит от общепринятого подхода в индустрии: да пофиг ваще, бизнес бабки колотит, остальное похер. В ключевых системах ожидаемо накопилась критическая масса, и техдолг начал стрелять у всех. Ну или это просто совпадение.
Происходит ли у вас что-то подобное? Поделитесь, нам важно это знать :3
Не можем получить новую фичу вообще никак. Сроки просраны, а результат не предвидится. Заливание баблом, джунами и индусами больше не работает. Начальство в бешенстве, переписывать нет времени, что делать — не понятно.
В общем, долго клали болт на соответствие потребностей и реализации, и вот вдруг ВНЕЗАПНО что-то пошло не так.
Возможно, это явление массовое и происходит от общепринятого подхода в индустрии: да пофиг ваще, бизнес бабки колотит, остальное похер. В ключевых системах ожидаемо накопилась критическая масса, и техдолг начал стрелять у всех. Ну или это просто совпадение.
Происходит ли у вас что-то подобное? Поделитесь, нам важно это знать :3
🔥17😨5❤2
К посту про SQL. Пока лазил на сайте Postgres Professional, наткнулся ещё на одну интересную книгу — «Путеводитель по базам данных».
Что внутри:
— Какие структуры данных используются для построения СУБД
— На каких алгоритмах построены распределённые СУБД
— Репликация и бекапы
— Журналирование
— Управление доступом
Для хардкорщиков, сохраняющих петабайты транзакций в наносек, будет не очень интересно, а вот для спецов среднего уровня и выше или для тех, кто хочет систематизировать знания и закрыть пробелы, — самое то.
#полезнота
Что внутри:
— Какие структуры данных используются для построения СУБД
— На каких алгоритмах построены распределённые СУБД
— Репликация и бекапы
— Журналирование
— Управление доступом
Для хардкорщиков, сохраняющих петабайты транзакций в наносек, будет не очень интересно, а вот для спецов среднего уровня и выше или для тех, кто хочет систематизировать знания и закрыть пробелы, — самое то.
#полезнота
🔥21👍8
На следующей неделе планируем провести стрим на тему «Внедрение DDD на практике — профиты и проблемы».
К нам в гости придет наш товарищ Константин Шибков, старший Java разработчик СДЕК, автор курсов и статей по разработке, соорганизатор митапа про бережливые бизнес процессы AgileUfa и клуба разработчиков JavaKeyFrames.
Мы обсудим как Константин внедрял архитектурные подходы и паттерны и узнаем, что из этого вышло.
Ссылку пришлем позже, приходите и задавайте вопросы 🙂
Предварительно, запланировали стрим в четверг 31 октября в 18:00 МСК
К нам в гости придет наш товарищ Константин Шибков, старший Java разработчик СДЕК, автор курсов и статей по разработке, соорганизатор митапа про бережливые бизнес процессы AgileUfa и клуба разработчиков JavaKeyFrames.
Мы обсудим как Константин внедрял архитектурные подходы и паттерны и узнаем, что из этого вышло.
Ссылку пришлем позже, приходите и задавайте вопросы 🙂
Предварительно, запланировали стрим в четверг 31 октября в 18:00 МСК
Telegram
Java KeyFrames
- Совместно смотрим tech доклады и обсуждаем
- Решаем задачи с литкода с лайфкодингом
🗓Календарь событий - https://cutt.ly/JJpel8R
По вопросам: @sendel
- Решаем задачи с литкода с лайфкодингом
🗓Календарь событий - https://cutt.ly/JJpel8R
По вопросам: @sendel
🔥37👍6👀2
StringConcat - разработка без боли и сожалений
На следующей неделе планируем провести стрим на тему «Внедрение DDD на практике — профиты и проблемы». К нам в гости придет наш товарищ Константин Шибков, старший Java разработчик СДЕК, автор курсов и статей по разработке, соорганизатор митапа про бережливые…
Напоминаем, что сегодня состоится встреча. Ссылку скинем перед началом. Не пропустите!
👍13🔥4
StringConcat - разработка без боли и сожалений
На следующей неделе планируем провести стрим на тему «Внедрение DDD на практике — профиты и проблемы». К нам в гости придет наш товарищ Константин Шибков, старший Java разработчик СДЕК, автор курсов и статей по разработке, соорганизатор митапа про бережливые…
YouTube
Внедрение DDD на практике — профиты и проблемы
Костя из СДЕК рассказывает как он внедрял Domain-Driven Design и Clean Architecture что из этого получилось
Наш тг-канал https://t.iss.one/+aU7cRIEYz0JjMDhi
Наш сайт https://howto.stringconcat.ru/
Ресурсы Кости:
Agile Ufa https://agileufa.ru/
JavaKeyFrames …
Наш тг-канал https://t.iss.one/+aU7cRIEYz0JjMDhi
Наш сайт https://howto.stringconcat.ru/
Ресурсы Кости:
Agile Ufa https://agileufa.ru/
JavaKeyFrames …
🔥7