Development

Делайте невидимое видимым

(В оригинале – Make the Invisible More Visible)

Многие аспекты невидимости очень точно отражают принципы программирования. В терминологии разработки полно соответствующих метафор, например, «механизм прозрачности», «сокрытие информации». Как ПО, так и процесс разработки может быть практически невидимым:

  • Исходный код не имеет физической сущности, поведения и не подчиняется законам физики. Он становится видимым, будучи загруженным в текстовый редактор, но стоит редактор закрыть, как он вновь исчезнет. Если задуматься об этом достаточно долго, то вы начнете сомневаться в том, существует ли он на самом деле, как падающее дерево, которое никто не слышит.
  • Запущенное приложение существует и имеет свое поведение, но оно практически никак не основано на исходном коде, его создавшем. Главная страница Гугла очень минималистична, главное же происходит «за кулисами».
  • Если вы завершили разработку на 90% и при этом застряли на отладке последних 10%, то на самом деле вы вовсе не сделали 90%, ведь так?
  • Исправление ошибок – это не движение вперед. Вам не платят за отладку. Отладка – это потери времени. Поэтому хорошо бы сделать эти потери более заметными, чтобы вы видели, куда тратятся ресурсы и планировали, как этого избежать.
  • Если ваш проект все время шел по расписанию, а через одну неделю вдруг оказалось, что вы отстаете на 6 месяцев, у вас проблемы.
  • И проблема не в том, что вы опаздываете на 6 месяцев, а в том, причина этой задержки была для вас невидимой! Если вы не видите продвижения, то скорее всего вы и не продвигаетесь.

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

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

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

Автор оригинала – Jon Jagger