это ж бред. каким бы понятным код не был, лажа будет где-то в данных, в фреймворках и библиотеках
можно конечно дебажить код пристальным всматриванием, но это ничем не отличается от того что вы будете писать код в блокноте вместо шторма
Чтобы не было лажи в данных, их тоже надо проектировать как можно проще.
Для независимости от фреймворка я ограничиваю и держу под контролем точки взаимодействия с ним, изолирую свой код. В результате зависимостей от фреймворка почти нет.
С подключаемыми библиотеками дело обычно обстоит так, что из кода библиотеки в проекте используется от силы 5%. Поэтому быстро накидываю легковесную обëртку и завязываюсь на неë, а не на библиотеку. Изоляция от библиотеки, возможность простого тестирования и переезд на новую версию без переписывания остального кода.