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

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

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

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

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


Почему методы обмена знаниями не работают

Методы обмена знаниями не работают по двум фундаментальным причинам: знания разбросаны, а документация устарела.


Знания разбросаны

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

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

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


Документация устарела

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

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


Разработчики больше не доверяют документации

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

Так зачем вам, как разработчику, читать документацию? И, конечно же, если чтение документации бесполезно, понятно, почему разработчики не оправдывают или не расставляют приоритеты в написании документации в первую очередь.

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

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


Знания нужно находить и использовать в нужное время

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


Решение Swimm для управления знаниями

С помощью Swimm информация находится и потребляется в двух формах.

  • Разработчики получают общий обзор проекта, в который они входят, при входе, используя наш Плейлисты для плавания.

  • Используя подключаемые модули IDE Swimm, разработчики находят нужную информацию как раз вовремя, когда она им нужна, при попытке понять часть кода, для которой есть соответствующая документация, или при написании кода, где может помочь существующая документация.

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


Обмен знаниями меняет команды

Обмен знаниями трансформирует команды разработчиков благодаря использованию документации, связанной с кодом. Узнать больше о Swimm’s платформа документации по управлению знаниями а также попробуйте Swimm для себя.