Как стать автором
Обновить
Сначала показывать

Data Quality в банке — знаем цену каждой ошибки

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров2.3K

Финансовый сектор уже давно одна большая "дата", когда банк принимает решение о том, выдать ли человеку или компании кредит, он анализирует сотни метрик. Я руковожу стримом Data Quality в Газпромбанке и расскажу о том, как мы решаем проблемы при интеграции с внешними источниками информации, какие оценочные метрики используем и как экспериментируем с моделями, прогоняя неверные данные.

Откуда берутся ошибки и чем внешние источники данных отличаются от внутренних

Чем больше данных, тем больше проблем, связанных с их качеством, причем к ошибкам может привести огромное количество причин.  Некоторые — банальные. Например, оператор при вводе персональных данных неправильно перепечатал ФИО из паспорта. Есть ошибки в проектировании систем. Скажем, разработчики проигнорировали требование к длине поля ввода данных. Например, поле «Паспорт выдан» ограничили 35 символами. Понятно, что нужно больше, но в системе сохраняются только первые 35 введенных символов: «ФМС Тверского района по городу Моск». Бывает, не учли, что какие-то данные вообще надо сохранять, а они потом потребовались. Например, пол клиента. Могут возникнуть сложности, связанные с потерей части данных при передаче информации из системы в систему в ходе ETL/ELT-процессов. При этом стоит разделять проблемы с качеством внутренних данных, которые находятся во внутрикорпоративных системах, и внешних, поступающих из сторонних источников. У нас в банке отлажены процессы по улучшению качества данных (КД), поэтому оно постоянно растет и стабильно выше, чем КД из внешних источников.

еще про данные
Всего голосов 4: ↑2 и ↓20
Комментарии1

Худшие практики разработки и архитектуры

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров21K
image

Я собрал худшее из худшего! Оказалось, что хороших практик — море, и разбираться в них долго, а вот плохих, реально плохих, — считаные единицы.

Понятно, что плохие практики не отвечают на вопрос: «А как делать-то?» — но они помогают быстро разобраться в том, как не делать.

Мы часто спорим про архитектуру и хотим друг от друга знания разных правильных практик проектирования, лучшего мирового опыта и вот этого всего. Понятно, что в реальном мире это совсем-совсем не так. И худших практик часто достаточно, чтобы начать договариваться, как не надо.

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

Это если команда одна. А если разработчики на пятом проекте новые, то начинается самое весёлое — этот сталактит надо ещё прочитать.

Очень часто я вижу лава-код в проектах аутсорсинговых компаний, потому что они используют свою кодовую базу по разным заказчикам как такой своеобразный иннерсорс. А «междисциплинарный» код как раз хорошо обрастает отключаемыми участками и переопределяемыми функциями.
Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии28

Меч из озера: итоги сезона больших данных

Время на прочтение9 мин
Количество просмотров12K

…Из Data Lake вынырнула прекрасная дева и протянула Артуру меч, и на том мече рунической вязью было начертано «Big Data». «Пусть он служит тебе верой и правдой, пронзая тьму незнания и проливая свет на самые неочевидные закономерности», — торжественно произнесла Владычица Озера. Король Артур преклонил колени и принял меч из рук девы. Затем оседлал коня и направился в сторону ближайшего дата-центра.

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

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии1

API-First: как мы внедряем привычный OpenAPI и «слегка подозрительный» AsyncAPI

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров7.2K
image
Нейроны — природный пример API-centric дизайна

У нас тут была целая драма: мы решили полноценно перейти от бумажно-табличных стандартов описания API к нормальным человеческим OpenAPI и AsyncAPI. Если уже хорошо известный стандарт OpenAPI вызывал минимум вопросов и уже использовался некоторыми командами, то аналогичный стандарт для асинхронных взаимодействий стал основой этой самой драмы.

Итак, раньше в основном мы по старинке проектировали программный интерфейс и передавали разработчикам таблицы с описанием интеграционного взаимодействия. Т. е. два аналитика договаривались по некоему API на стыке их систем или сервисов, а затем каждый из них шёл в свою команду рассказывать и показывать, как он это понял. Заканчивалось всё тем, что иногда по нескольку недель и даже больше мы правили всякие весёлые баги, связанные с наименованием атрибутов и не только. Где uppercase, у кого lowercase, что с типами данных, в каком блоке должен быть атрибут, почему столько атрибутов с похожими названиями — всё это приводило к бесконечным циклам звонков, разглядывания спецификаций и реализаций. До драки не доходило, но пара случаев запомнилась.

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

Разработчики поначалу очень не доверяли AsyncAPI на фоне OpenAPI (и для этого была очень конкретная причина), и именно в этом смысле началась ключевая часть драмы с новыми инженерными стандартами.
Читать дальше →
Всего голосов 11: ↑9 и ↓2+9
Комментарии8

Как SQL-скриптом сократить время ручного тестирования в 3 раза и облегчить жизнь коллегам

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров6.9K

Если ваша система использует БД и время от времени нужны тестовые записи, или если вы делаете insert-ы с несколькими наборами значений values, то изложенное ниже может пригодиться.

Искать или создавать тестовые записи?

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

Как же их получить? Первая мысль - найти среди уже имеющихся. Но, чем больше условий, тем больше проблем при поиске.

Допустим, нашли. Разработчику и тестировщику нужно много вариантов набора данных. Можно взять несколько записей и их update-ить, но не помешает ли это кому-то ещё? Не грохнется ли часть данных по какой-нибудь причине? А что будет с этими записями через несколько месяцев, когда понадобится что-то перепроверить? На практике не раз сталкивался с худшими ответами на подобные вопросы. Как же этого избежать?

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии9

Зачем рассказывать про контейнеризацию в 2023 году

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров23K
image
Техножрец DevOps бережно описывает документацию по проекту

Опытные специалисты с характерным оттенком глаз могут справедливо возмутиться, что это всё уже давным-давно разжёвано и вообще RTFM. И будут отчасти правы. Тем не менее приходят новые специалисты, которые не застали бесплатную рассылку дисков с Ubuntu и вдумчивую компиляцию ОС с нуля.

Каждая новая технология поначалу держится на энтузиастах, которые её полностью понимают. Например, первые пользователи радио знали почти всё про радиосвязь, могли на коленке собрать детекторный приёмник и ловить радио «Маяк» на металлическую вешалку и моток проводов. Первые пользователи GNU/Linux знали всё про ядро и ключевые принципы работы. По крайней мере, вариант «поправил и скомпилировал драйвера для модема, чтобы настроить сеть» был не самым редким. Текущие пользователи обычно не сталкивались с основами, так как начали щупать технологию уже после снижения порога входа.

Те же процессы идут не только в среде потребителей технологий, но и среди инженеров. С одной стороны, узкая специализация совершенно нормальна, с другой — мы рискуем получить аналог культа Галактического Духа на Анакреоне из цикла романов «Основание» Азимова. Техножрецы выполняют сложные ритуалы, ядерные реакторы пайплайны работают. Ровно до тех пор, пока всё не сломается к чертям на низком уровне, а чинить будет некому.

Так происходит и с контейнеризацией. Я всё чаще встречаю на собеседованиях devops-инженеров, которые знают, как пользоваться Docker и Podman, пишут Dockerfile, но теряются, когда спрашиваешь про namespaces, и начинают плавать при вопросе: «А зачем, чем RPM хуже?» Все собирают контейнеры, и я собираю. Таков Путь. Не всегда, кстати, оптимальный.
Читать дальше →
Всего голосов 59: ↑59 и ↓0+59
Комментарии13

Не стреляйте в техподдержку: она играет всё лучше и лучше

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров3K

Нет, хомячок не подходит: хоть он у вас и красивый, но нужна мышь. Нет, щёлкнуть — это нажать кнопку на ней. Левую, пожалуйста. Нет, не самую левую маленькую, а ту, которая сверху слева и большая.

Итак, у нас на входе — поток запросов типа «сделайте так, чтобы это работало, я не знаю, что у меня сломалось, просто почините это прямо сейчас». А мы не ругаемся и помогаем. Прямо ангелы!

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

Я отвечаю за первую линию технической поддержки Газпромбанка. Это первый уровень — решение типовых технических проблем, которые возникают у сотрудников банка. Ежедневно нам поступает в среднем 1 400 запросов, а в пиковые дни их может быть больше 3 500. И этот объём постоянно растёт. А работают у нас сейчас 36 операторов, и они держат на себе весь этот поток круглый год 24 х 7.

Газпромбанк — это банк с большой сетью региональных филиалов. До середины 2018 года в каждом из них были отдельные люди, которые занимались технической поддержкой первой линии. При этом делали они это, как правило, параллельно с другими обязанностями. На часть звонков они просто не успевали отвечать, запросы повисали в воздухе, и некоторые проблемы сотрудников банка подолгу не решались.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии8

Достучаться до ИИ: сезон больших данных на Хабре

Время на прочтение15 мин
Количество просмотров27K

Ладно, не заливай! Ни разу не был на берегах Data Lake?! Пойми, в IT только и говорят, что о Data Lake! Как оно бесконечно прекрасно. О бигдате и графах, которые они видели. О том, как дата-сайентист, погружаясь в море данных, преисполнился знания. Мы не хотим, чтобы Хабр там наверху окрестили как-нибудь не так, а потому ещё с начала года мощно прокачиваем ИИ-ландшафт самыми хардкорными и глубокими текстами: уже отгремел сезон ML, закончилась неделя нейроарта, а теперь совместно с Газпромбанком стартует сезон Big Data. 

Читать далее
Всего голосов 20: ↑17 и ↓3+25
Комментарии2

Зачем нужны feature-окружения и как с ними работать

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров3.1K

Паттерн feature-окружений называют по-разному: ondemand, review- или preview-окружения. Он нужен, чтобы приблизить среду разработки к продакшену, и позволяет разом избавиться от множества проблем, связанных с организацией разработки и переносом кода.
Но для создания feature-окружений и работы с ними ваш технологический стек должен быть достаточно мощным, чтобы обеспечить необходимую гибкость и динамичность. В этой статье я расскажу, как реализовать некоторые механизмы, необходимые для эксплуатации feature-окружений.


Читать дальше →
Всего голосов 3: ↑2 и ↓1+2
Комментарии0

Кого из двоих сделать тимлидом

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров7.9K


Очень конкретная задача: мне нужно найти руководителя на важное направление.

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

Было сложно сравнить их между собой. Один был хорош в чём-то одном, другой — в чём-то другом.

Пришлось поступать как с инструментами или фреймворками: выписать требования, оценивать важность каждого и сделать взвешенную итоговую оценку.

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

Далеко не факт, что мой подход правильный или точный, но я бы хотел рассказать, что я понял в таких ситуациях.
Читать дальше →
Всего голосов 34: ↑31 и ↓3+38
Комментарии14

Менеджмент зависимостей в Javascript

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров18K

Для многих разработчиков процесс установки зависимостей представляет собой некую "магию", которая происходит при выполнении npm install. Понимание принципов работы этой "магии" может сильно помочь при возникновении ошибки во время установки очередной библиотеки. Нынешний NPM — результат многих лет проб и ошибок, поэтому для его детального понимания я предлагаю начать с самого начала.

Читать далее
Всего голосов 27: ↑26 и ↓1+30
Комментарии5

Отстаньте от разработчиков: не надо делать их руководителями просто ради грейда

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров25K


Бич профессии — превращать самого опытного разработчика в плохого менеджера. Я видел ситуации, когда синьор перерастает команду и ему предлагают должность руководителя. Многие соглашались и становились несчастными. И ладно бы только они: страдает-то в итоге команда и компания.

Зачем они соглашаются? Во-первых, потому что они росли всегда и останавливаться страшно. Во-вторых — это часто единственная возможность повышения.

Что мы поменяли у себя в разработке Газпромбанка:

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

Куда можно расти? В хеда профессии — эксперта, к которому может обратиться каждый в компании. Это как Стив Возняк в Apple.

Как это ни странно, в развитой инженерной культуре такие «эксперты выше синьора» — норма. В России я встречал мало компаний с такими фичами, поэтому хочу поделиться практическим опытом того, что это даёт.
Читать дальше →
Всего голосов 77: ↑77 и ↓0+77
Комментарии22

Как не надо объяснять людям задачи и изменения

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров11K


Мы меняем процессы разработки в компании, и поэтому я постоянно каждый день объясняю что-то разным людям. Любое изменение — даже банальная постановка задачи на стендапе — требует понимания того, как это надо и как это не надо делать. Смысл в том, что если вы хотите руководить командой, то нужно уметь убедить, договориться, отстоять свою позицию — иначе вы неизбежно будете делать то, что вам скажут. В том числе те, кто разбирается в вопросе хуже вас.

Быть руководителем в ИТ сегодня = быть переговорщиком.

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

Сейчас расскажу несколько случаев эпических провалов, когда руководитель хотел сделать что-то хорошее, а получалось только стечь под стол и облажаться.

Ещё нужно понимать, что не со всеми людьми работает логика. Есть прогрессивные разработчики, есть early adopters, есть люди-юристы, есть динозавры-кинестетики. Начну, пожалуй, как раз с последних, потому что в нашем кровавом энтерпрайзе они создают реальные проблемы.
Читать дальше →
Всего голосов 25: ↑21 и ↓4+25
Комментарии19

Как я делал внутренний cookbook по тому, как писать код (и результат можно скачать)

Уровень сложностиСложный
Время на прочтение16 мин
Количество просмотров17K

Авокадо с зубами подсказывает, что так код легче поддерживать, дописывать и рефакторить. Мы всё теперь пишем только так.

Привет, Хабр! У нас была проблема: каждый писал код как хотел. Было очень тяжело это поддерживать и ревьюить. Мы сначала думали, что достаточно написать стандарт кода. Оказалось, недостаточно, ему ещё надо обучить. Чтобы обучить, мы открыли для ревью эталоны кода, чтобы покрыть ими самую частую логику взаимодействия с компонентами. Тоже не хватило. А заодно я узнал, что мои же «золотые» образцы противоречили моему же стандарту кода (сначала было смешно, а потом пришлось переписывать).

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

Всё это было нужно для того, чтобы мы все в команде понимали, что такое наш стандарт кода, делали одинаковые вещи примерно одинаково, имели набор готовых шаблонов на системные или платформенные обращения и уменьшили объёмы как самого ревью, так и диалогов после.

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

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

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

Посвящается всем, кто коллекционирует элегантные решения без привязки к языку, фрэймворку, Фаундлингам и Software Craftsmanʼам.

Погнали.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+19
Комментарии4

Как и зачем оценивают индекс зрелости ИИ

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров3.8K

Индекс зрелости ИИ (AI maturity index) — это международный опыт систематизации практик по внедрению Data Science-подходов в бизнес-процессы. Разберём, как он устроен и как с ним работать.

Читать далее
Всего голосов 11: ↑10 и ↓1+16
Комментарии4

Что такое GitOps и почему он (почти) бесполезен. Часть 2

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров8.8K

Одной каноничной синей изоленты может не хватить

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

Первая часть статьи вызвала живое обсуждение. Мысль, что git является не единственным источником истины при наличии связанных артефактов во внешних системах (особенно если эти артефакты имеют потенциальные проблемы с повторяемостью сборок), встретила некоторые возражения. Но в этом вопросе я предлагаю следовать закону Мерфи: если неприятность может случиться, то она случается. Рано или поздно не отображаемые в git проблемы внешних зависимостей выстрелят вам в ногу. Эти риски нужно постоянно держать в голове и по возможности митигировать.

Какие ещё потенциальные сложности могут встретить вас при следовании пути GitOps и какие могут быть альтернативы? Давайте разберёмся вместе.
Читать дальше →
Всего голосов 28: ↑26 и ↓2+34
Комментарии140

Как мы отрабатываем аварии в банке

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров3.5K


Меня зовут Павел, и я работаю в банке архитектором автоматизированных систем. В мои задачи входит поддержание работоспособности нескольких систем, связанных с корпоративным кредитованием. К счастью, здесь, если сравнивать с моим предыдущим местом работы, всё более-менее спокойно. Если какие-то поломки и происходят, то отнюдь не в результате фишинга или DDoS-атак. Хотя, конечно, такое у нас в банке тоже случается: только за три месяца 2022 года в России было зарегистрировано более семи тысяч атак на финансовые учреждения. Их предотвращением и устранением последствий у нас занимаются отдельные команды.

Моя же сфера касается в основном внутренних сервисов банка, а до них добраться на порядок сложнее, чем до внешних. И проблемы чаще появляются из-за нового релиза, а не из-за чьей-то направленной атаки. Да, так бывает, что что-то ломается после своих же апдейтов, и приходится налаживать.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии3

Что такое GitOps и почему он (почти) бесполезен

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров18K

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

Привет, меня зовут Олег! В ИТ-индустрии я работаю большую часть своей жизни. Мне очень интересно развитие инженерной мысли в области управления конфигурацией инфраструктуры, и последние шесть лет я занимаюсь тем, что называется DevOps.

Одна из свежих популярных тенденций — это концепция GitOps, которая была представлена в 2017 году на ставшем уже легендарным «Кубконе» Алексисом Ричардсоном — СЕО компании Weaveworks.

Weaveworks — это большая взрослая компания, которая в 2020 году привлекла больше 36 миллионов инвестиций под развитие своего GitOps.

Сейчас я попробую рассказать о тех неочевидных проблемах, которые могут вас ждать при принятии этой концепции. Если коротко, то GitOps не является «Серебряной пулей». Вполне вероятно, что спустя какое-то время вы закончите реорганизацию с ворохом велосипедов и костылей, которыми очень сложно управлять. Мы сами изрядно походили по этим граблям и хотим показать наиболее неприятные проблемы, которые не видны при чтении красивых статей.
Читать дальше →
Всего голосов 43: ↑35 и ↓8+35
Комментарии55

Страдающее ML: как мы автоматизировали проверку данных, чтобы не было мучительно больно

Время на прочтение6 мин
Количество просмотров6K

Работать с данными — муторно, но есть кое-что похуже — проверять их качество. Больше данных — больше изматывающих ручных проверок и меньше уверенности, что с массивом всё в порядке.

Я разрабатываю ML-модели для розничного бизнеса, провожу A/B-тесты и оцениваю бизнес-эффекты в Газпромбанке. Год назад мы разработали систему, которая показывает, где и насколько данные плохи, а инженерам остаётся только разобраться почему. Раньше они сначала вручную выясняли, что в данных пошло не так, а теперь есть система, которая даёт подсказки. Расскажу об алгоритме, лежащем в основе системы, и о том, что она сейчас собой представляет и как используется в наших бизнес-процессах.

Читать далее
Всего голосов 28: ↑28 и ↓0+28
Комментарии11

Структурное логирование в .NET на примере Serilog

Время на прочтение4 мин
Количество просмотров13K

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

Существует несколько видов логирования, а какие, чем отличаются и что такое структурное логирование - давайте разбираться!

Читать далее
Всего голосов 14: ↑10 и ↓4+8
Комментарии16

Информация

Сайт
www.gazprombank.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия