Дайджест "Как работать со сложными системами"

Dmytro Rodenko, founder of SAS Founders, explains how complex systems in IT and machine learning differ from merely complicated tasks. He covers strategies for managing unpredictability, the role of creativity and teamwork, and practical approaches to client acquisition and system management.
Здравствуйте! Меня зовут Дмитрий Роденко. Я основатель сообщества SAS Founders. Помогаю фаундерам IT-компаний находить новых крупных клиентов с помощью лида генерации в LinkedIn. Как работать со сложными системами? В мире существует множество сложных проектов. От систем подбора водителей для пассажиров до крупных корпоративных платформ. Но некоторые системы показывают, что такое настоящая сложность. Особенно это касается систем машинного обучения в крупных компаниях, где приходится решать задачи совершенно другого уровня. И здесь важно понимать, чем отличаются просто запутанные задачи от по-настоящему сложных и как с ними работать. Важно понимать, что подходы в данном случае будут кардинально разными. Запутанные задачи сложные, но у них есть готовые решения. Например, заполнить налоговую декларацию задача запутанная, но каждый год миллионы компаний, миллионы людей делают все то же самое по одной и той же инструкции. А сложные задачи уникальны и для них нет готовых рецептов. Это глобальное потепление. Старые методы не работают, нужно придумывать что-то принципиально новое. Поиск ближайшего водителя для пассажира в приложении такси задача непростая, но она не является сложной. Есть много готовых алгоритмов, можно выбрать подходящий и внедрить. А вот система машинного обучения в крупных компаниях требует создания новых подходов с нуля, особенно при огромных масштабах работы. И если попробовать решить сложную задачу стандартными способами, ничего хорошего здесь не выйдет. У сложных систем есть особенности, которые важно уметь замечать. Первое. Система ведет себя непредсказуемо. Даже если ты понимаешь, как работает каждая часть системы по отдельности, предсказать поведение всей системы невозможно. Например, AI-системы иногда выдают странные результаты, и это нельзя предвидеть, изучая их компоненты. базу на которой они обучаются и алгоритм их обработки. В сложных системах проблемы проявляются не сразу. Может что-то поменять, а ошибка всплывет только через неделю. Это очень усложняет поиск причин. И нельзя думать, что если сейчас все работает, то будет так работать и дальше. В обычных системах, если улучшить одну часть, то вся система работает лучше. Повысить производительность одной части, это позитивно сказывается на работе всей системы. В сложных системах все наоборот. Можешь оптимизировать один кусок, а вся система начинает работать хуже. Части бывают взаимодействуют между собой самыми неожиданными способами. Более того, сложные системы помнят прошлое. Это как пробка на дороге. Даже когда аварию убрали, машины еще долго стоят, пока до них дойдет очередь преодолеть место, собственно, пробки. Также и в компьютерных системах. Устранил проблему, а система еще долго восстанавливается из-за кишей, очередей и зависимости. Можно внести крошечные изменения, а последствия будут огромными. Как в очереди, если людей стало чуть больше, время ожидания может вырасти в разы. У сложных систем есть переломные моменты, где поведение резко меняется, и прошлый опыт не поможет предсказать, что будет дальше. Есть проверенные способы эффективно работать в сложной среде. Первое – это делать изменения, которые можно отменить. Это называется использовать двухсторонние двери. В крупных компаниях подобные подходы различаются на односторонние и двухсторонние. Односторонние – это решение, которое нельзя отменить, Их нужно очень тщательно обдумывать. Двухсторонние можно легко изменить, поэтому с ними можно быстро экспериментировать. И в сложных системах лучше выбирать двухсторонние двери. То есть также обязательно следить за тем, не только за участком, который вы меняете, а за поведением всей системы. Иначе можно не заметить, как твое улучшение где-то что-то поломало в неожиданном месте. Сложные задачи требуют творчества подхода. И часто такие задачи кажутся нереальными для решения. Многие думают, это невозможно решить. Но правильный подход – сначала проверить, сначала поверить, что задача решаема, потом разбить ее на части и попробовать разные варианты. Когда внедряешь изменения, надо использовать безопасные методы, то есть кнопки быстрого отключения новых функций, тестирование на небольшой группе пользователей, постепенное внедрение по региону. Помните старую историю про то, как молодой студент-физик, будущий Нобелевский лауреат, опоздал на лекцию и решил уравнение, которое было записано профессором на доске, как пример нерешаемой задачи. Он в конце лекции подошел и показал решение. Следующее. Нужно понимать, что происходит в системе в любой момент времени, даже в самых необычных ситуациях. Для этого собираете подробную информацию о работе всех компонентов. Без этого система становится хрупкой, найти проблемы сложно, а внедрять новое страшно, поскольку вы не знаете, как оно повлияет на работу системы в целом. Также полезно заранее проверять изменения, прогонять их на записанных ранее данных или создавать искусственные тесты для разных сценариев. В сложных системах невозможно прописать правила на все случаи жизни, поскольку слишком много вариантов возникает. Помогает машинное обучение, то есть алгоритмы сами учатся на данных, находят закономерности и адаптируются к изменениям. Ну и, безусловно, критически важна работа в команде. Когда коллеги понимают, почему задача сложная, с ними можно обсудить разные варианты решений и плюсы и минусы каждого из этих вариантов. И в сложных системах редко есть один правильный ответ. Поэтому команда, которая хорошо работает вместе, принимает решения намного более качественные. Замечу, что наша с вами жизнь, из-за того, что она состоит из большого количества запутанных систем, обладает характеристиками сложной системы. То есть, по сути, мы живем жизнь без инструкции. Да, у нас есть инструкции от родителей, института, коллег, как решать какие-то конкретные задачи. Но глобально общей инструкции нет, поэтому эти принципы справедливы не только для разработки программного обеспечения и продуктов, но и в принципе для жизни в том числе. Итого, запутанные задачи решаются по готовым рецептам, а сложные требуют гибкости и творческого мышления. Очень важно научиться их различать, потому что от этого зависит какой подход выбрать. В реальности большинство систем содержат и простые, и сложные части. Главное понимать, где нужно действовать по инструкции, а где проявлять креативность и адаптироваться на ходу. В вопросах привлечения новых крупных клиентов ситуация аналогичная. Какие-то элементы этого процесса простые, то есть, выполняя их по инструкции, вы можете получить определенный результат. Какие-то элементы требуют креативности. четкой обратной связи и такого стратегического надзора и контроля за выполнением процесса и за его эффективностью. Если вам нужны новые крупные клиенты, внизу в описании ссылка. Напишите, выберите время, поговорите с нашей командой LinkedIn Advisor. Ребята подскажут, что можно сделать в вашем конкретном случае. Дальше вы либо внедрите это решение самостоятельно, либо мы поможем вам это сделать с финансовой гарантией результата. До скорой встречи. Желаю всем новых крутых контрактов.
More from Dmytro

Лайфхак "Какие ошибки в лидгене убивают ваши шансы на сделку по IT разработке"









