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

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

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

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

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

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

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

Автор оригинала - [Jon Jagger](http://programmer.97things.oreilly.com/wiki/index.php/Jon_Jagger)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/ru/thing_09.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
