- Простота - это необходимое условие для надежности
- Противопоставление конструкта и артефакта
- Ценность модульного дизайна с точки зрения внесения изменений
- Энтропия системы применительно к программным продуктам. Нельзя игнорировать накопление сложности, т.к. это приведет к падению скорости разработки в долгосрочной перспективе.
Наши ограничения:
- Мы можем надеяться, что сможем сделать надежными только те вещи, которые мы в состоянии понять.
- Мы можем одновременно рассматривать (фокусироваться) только несколько вещей.
- Взаимодействующие вещи должны рассматриваться вместе.
- Сложность (переплетенность вещей) мешает пониманию.
Способность рассуждать о поведении программы критична для дебага и для определения точек внесения изменений. Любой баг, обнаруженный на проде, прошел все проверки типов и все тесты. Более того, никакой набор тестов и никакие инструменты рефакторинга не позволят вносить изменения в “грязный” запутанный код быстрее, чем в простой и чистый.
Состояние никогда не бывает простым, потому что оно переплетает значение и время. В то же время состояние - это очень легкая для восприятия концепция. При этом состояние вплетает в себя все вещи, которые с ним взаимодействуют, прямо или косвенно.