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

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

Для проницательных вы можете заметить, что добавленная строка кода выглядит несколько не так. Некоторым это может показаться чем-то, что мы могли бы спокойно проигнорировать и одобрить PR. Эта строка кода является симптомом более серьезной проблемы. Небольшая предыстория:

Разработчик добавил эту конечную точку, чтобы иметь возможность возвращать все роли в приложении в виде пар ключ-значение. В соответствии со стандартными рекомендациями по архитектуре REST и как подчеркивается в Модели зрелости Ричардсона — Уровень 2, конечная точка/roles должна быть в состоянии сделать это. Так почему же разработчик не использовал конечную точку /roles и не использовал параметр для указания формата, в котором должны быть возвращены данные, например

/roles?format=object

Краткий ответ: индексный метод был плохо разработан. Это оставляет нам два варианта:

  1. Просто проигнорируйте и одобрите PR
  2. Поступайте правильно — перепишите метод index, чтобы он работал должным образом, и измените зависящий от него код (проект еще не запущен)

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

Выдержки из книги The Pragmatic Programmer резюмируют эту концепцию:

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

Разбитое окно

Одно разбитое окно, оставленное без ремонта в течение достаточно долгого времени, вселяет в обитателей здания чувство заброшенности — ощущение, что власть имущие не заботятся о здании. Итак, еще одно окно разбивается…

Итак, что вы будете делать в следующий раз, когда увидите, казалось бы, безобидную строчку кода или плохой дизайн:

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