Suggerisco di mantenere un buon livello di desgin dei domini e dei pacchetti e la loro connessione reciproca.
Per quanto riguarda la documentazione e gli strumenti specifici della classe, non penso che siano necessariamente requisiti importanti, specialmente se lo si fa in un piccolo team o da soli. L'aspetto più importante è scrivere un codice pulito, astratto. Se passi metà del tuo tempo a preoccuparti della documentazione esterna, passerai metà del tempo a non pensare al codice.
Nel dire questo, ritengo che rivalutare concetti di design di alto livello possa aiutarti a mantenere un livello elevato nella scrittura del codice. Ad alto livello intendo solo non scrivere giù ogni classe, o ogni metodo. Considererei invece il modo in cui i gruppi di classi o componenti interagiscono, quale livello concettuale hai e le interfacce tra questi livelli / componenti.
Quindi, in sintesi per tenere traccia del codice e aiutare a mantenere l'astrazione, vorrei seguire questi passaggi:
1) Revisione e progettazione continua di concetti di alto livello utilizzando un approccio UML o anche solo scatole e linee.
2) Utilizzo di TDD su ciascun pacchetto per aiutare ciascun pacchetto a mantenere il codice di accoppiamento libero estensibile.
3) Qualche documentazione del codice su cui è necessario, ma non per essere eccessivamente fissata su questo, poiché è più importante cercare di ottenere il tuo codice da solo.
4) Refactoring costante del tuo codice se noti "durante la scrittura" che esiste una dipendenza elevata da altre modalità. Cerca di non lasciare il codice in uno stato TODO se puoi aiutarlo solo perché sei sotto pressione per farlo. Questo può spesso portare all'inizio del codice disordinato.