Для меня это доля стабильности (как в цементированном бетоне, глине, запеченной в духовке, в камне, написанной перманентными чернилами). Чем более нестабилен ваш код, так как чем выше вероятность того, что вам понадобится изменить его в будущем, тем легче стать гибким, как влажная глина, чтобы оставаться продуктивным. Я также подчеркиваю податливость, а не читабельность. Для меня простота изменения кода важнее, чем простота его чтения. Код может быть легко читаемым и кошмарным для изменения, и какая польза от способности читать и легко понимать детали реализации, если они являются кошмаром для изменения? Если это не просто академическое упражнение, обычно смысл в том, чтобы легко понять код в производственной кодовой базе, состоит в том, чтобы облегчить его изменение по мере необходимости. Если это трудно изменить, тогда много преимуществ читабельности выходят в окно. Читабельность обычно полезна только в контексте гибкости, а гибкость полезна только в контексте нестабильности.
Естественно, что даже самый трудный для поддержки код, который можно себе представить, независимо от того, насколько легко или сложно его читать, не представляет проблемы, если нет причин для его изменения, просто используйте его. И можно добиться такого качества, особенно для низкоуровневого системного кода, где производительность часто имеет наибольшее значение. У меня есть C-код, который я до сих пор регулярно использую, который не менялся с конца 80-х годов. Это не нужно было менять с тех пор. Код бесполезен, написан в битые дни, и я его почти не понимаю. Тем не менее, это все еще применимо сегодня, и мне не нужно понимать его реализацию, чтобы извлечь из него много пользы.
Тщательное написание тестов - один из способов улучшить стабильность. Еще одна развязка. Если ваш код не зависит ни от чего другого, единственная причина, по которой он должен измениться, - это необходимость его изменения. Иногда незначительное количество дублирующегося кода может служить механизмом развязки для существенного улучшения стабильности, что делает его достойным компромиссом, если взамен вы получите код, который теперь полностью независим от всего остального. Теперь этот код неуязвим для изменений во внешнем мире. Между тем код, который зависит от 10 различных внешних библиотек, имеет в 10 раз больше причин для его изменения в будущем.
Еще одна полезная вещь на практике - это отделить вашу библиотеку от нестабильных частей вашей кодовой базы, возможно, даже создавая ее отдельно, как вы могли бы сделать для сторонних библиотек (которые также предназначены для использования, а не изменения, по крайней мере, вашим команда). Именно такая организация может помешать людям вмешиваться в нее.
Еще один минимализм. Чем меньше ваш код пытается сделать, тем более вероятно, что он может делать то, что он делает хорошо. Монолитные конструкции почти постоянно нестабильны, поскольку чем больше и больше функциональных возможностей добавляется к ним, тем более неполными они кажутся.
Стабильность должна быть вашей главной целью всякий раз, когда вы стремитесь написать код, который неизбежно будет трудно изменить, например, распараллеленный код SIMD, который был микротонизирован до смерти. Вы противодействуете сложности обслуживания кода, максимально увеличивая вероятность того, что вам не придется менять код, и, следовательно, вам не придется поддерживать его в будущем. Это сводит затраты на обслуживание к нулю независимо от того, насколько сложен в обслуживании код.