Часть вторая из двух

Часть первая определила проблему немасштабируемой разработки программного обеспечения и поделилась взглядом на то, как ее решить. Вторая часть предлагает решение, основанное на этом понимании:

Мир, знакомься с Lingo, знакомься с Lingo, мир: www.lingo.reviews. Этот пост запускает открытый исходный код Lingo.

Lingo — это эвристический инструмент для масштабирования разработки. Lingo обеспечивает соответствие кода лучшим практикам, обучая участников и синхронизируя карту и территорию продукта. То есть Lingo управляет качеством продукта по мере масштабирования проекта.

Карта и территория

Lingo генерирует соответствующую часть карты для контекста, в котором работает инженер:

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

Если бы Джуджу использовал Lingo, ни один работник, использующий state.State, не смог бы приземлиться. Непрекращающаяся борьба за ручное согласование карты каждого продукта и территории кода была бы не нужна.

Принцип

В приведенном выше примере каждое руководство и соответствующий комментарий к обзору создаются на основе принципа. Каждый принцип отражает передовую практику конкретного продукта.

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

Полнофункциональный принцип может быть написан до 40 строк кода. Lingo использует GRPC, чтобы говорить о принципах. API-интерфейсы RPC могут быть созданы для всех языков, поддерживаемых GRPC. Lingo в настоящее время имеет наилучшую поддержку Go, поскольку Canonical тестирует Lingo для Juju, написанного на Go. Растущее сообщество Lingo уже начало вносить поддержку Python.

С Lingo принцип умножает силу. В зависимости от распространенности и последствий проблемы, на которую он нацелен, этот принцип представляет собой экспоненциальные инвестиции в повышение скорости и качества. Чем крупнее проект, тем больше окупаемость. Каждый принцип может быть опубликован и использован любым пользователем Lingo. Таким образом, более мелкие проекты с меньшими ресурсами могут получить выгоду от инвестиций в более крупные проекты. Если повезет, сообщество Lingo будет расти, а вместе с ним и количество опубликованных принципов: лучшие практики можно будет затем импортировать и распространять в отрасли.

Применимость принципов

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

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

Цель Lingo не в том, чтобы автоматизировать обзоры с целью выявления проблем. У Lingo есть более высокая цель, чем эта. Обзор - это место встречи карт на территории:

  • карта рецензента, выраженная в комментариях
  • карта инженера, выраженная в новом коде и
  • историческая карта, выраженная в существующем коде.

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

Линго как наставник

Обзоры направлены на обучение участников и делают это таким образом, чтобы отражать человеческий обзор. С этой целью автор принципа может определять контекстные комментарии. Например, при первом обнаружении проблемы комментарий подробно объясняет проблему. Второй комментарий объясняет это с меньшими подробностями по-другому, а третий просто относится к проблеме, которая уже была объяснена и определена. В приведенном выше примере, даже если есть сто файлов без правильного авторского права, Lingo оставит только три комментария.

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

Если мы думаем о программной инженерии как о системе, то это паника системы. Неважно, сколько «о» вы поставили на «неееет!!» комментарий (да, это реальный комментарий, который я получил в обзоре) возможность того, что та же самая проблема появится в следующем PR, все еще не обрабатывается (это также не делает ничего для привлечения и удержания внешних участников).

С Lingo мы упреждаем и обрабатываем ошибку. Мы не паникуем постфактум. Сколько бы раз я ни совершал одну и ту же ошибку, Lingo вежливо и терпеливо укажет мне на нее. При этом Lingo заставит меня рассмотреть контекст, в котором я работаю, и использовать шаблоны и утилиты в этом контексте, что приведет к более продуманному решению.

Излишне говорить, что это значительно облегчает работу ведущих инженеров. К тому времени, как PR доберется до них, Lingo уберет мусор, что позволит им сосредоточиться на более тонких проблемах.

Эго и инженерия

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

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

Lingo заставляет команду заранее согласовать и определить основные принципы команды, продукта и компонентов. Когда код выходит из синхронизации, на другом конце обзора нет эго, с которым нужно бороться, равно как и нет суждения, за которое нужно стыдиться или защищаться.

С Lingo напряжение между путем человека и «правильным путем» никогда не растет: оно пресекается в зародыше. Контекст буквально кричит инженеру: «Эй, ты должен/не должен этого делать». Это заставит инженера искать решение с контекстом.

Видение

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

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

Спасибо

Всем, кто мотивировал меня и делился со мной своим временем и мудростью, чтобы добраться до этой точки, СПАСИБО:

Подключи и работай: Майкл Хох, Циррус Шакери, Рон Джентиле, Радж Сингх и Боу Роджерс.

Вы нашли время, чтобы узнать о Lingo, увидели его ценность и помогли мне уточнить его ценностное предложение. Спасибо.

Мудрецы Сан-Франциско: Бурчу Доган (Google), Соломан Хайкс (Докер), Джеймс Бернс (Твиллио) и Майкл Гринич (Нилас).

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

Все Juju Core, но особенно: Алексис Брюммер и Марк Рэмм, Уильям Рид, Тим (и Рэйчел) Пенхи, Дэвид Чейни, Менно Смиты, Кэтрин Кокс-Будей и Нейт Финч.

Каждый из вас сыграл ключевые роли, без которых Lingo не был бы тем, чем он является сегодня, или вообще здесь. Спасибо.

Потрясающие личности: Мэттью Кук, Уэйн Витцель, Ник Вакелин, Умайр Акил и Лэнс Виггс.

Спасибо за вашу поддержку и за то, что вы такие классные :)

Моя семья: я не говорю это достаточно часто, но ты моя опора. Спасибо.