Метод, который я использую и который очень хорошо работает, состоит в том, чтобы попытаться взять на себя другие роли в вашем приложении, а затем программировать так, как если бы вы были в этой роли. Например, когда вы работаете с базой данных, даже не думайте о графическом интерфейсе. Вместо этого подумайте о предоставлении классов и методов, которые просто работают с данными. Если вы создадите свой собственный SDK, который позже будете использовать, вы обнаружите, что его обслуживание будет намного проще.
Разработка на основе тестов - ваш друг. Познакомьтесь с DUnit и создайте небольшие лаконичные тесты для выполнения любого нетривиального кода. Документируйте интерфейсы и все, что не видно, глядя на экран, полный кода.