Dipende molto dalla metodologia di progetto che stai utilizzando (ad esempio Rational Unified Process versus Scrum) e quanto apprezzi la documentazione di processo rispetto al codice.
In alcuni contesti è importante che tutti i requisiti e le decisioni di progettazione siano tracciabili: perché abbiamo scelto questa alternativa, chi l'ha decisa, dove è stata implementata? Di solito, questo significa che una funzionalità è progettata separatamente prima di essere implementata, e il design è catturato con descrizioni testuali, diagrammi, ecc. Questi documenti sono deliverable di una fase di progettazione. Se hai questi requisiti, ovviamente i diagrammi dovrebbero essere creati prima di scrivere le tue lezioni.
D'altra parte, la maggior parte dei progetti non ha bisogno di documentare ogni fase del loro processo. In effetti, il movimento Agile favorisce esplicitamente "software funzionante su una documentazione completa". Il codice contiene già il design, quindi non è necessario creare diagrammi aggiuntivi. Ogni volta che vengono apportate modifiche al codice (nuove funzionalità aggiunte, bug corretti), il design cambia e i vecchi schemi non sono aggiornati. L'aggiornamento di tutti i documenti per riflettere le modifiche richiede un notevole sforzo che potrebbe essere altrimenti speso per aggiungere valore. Rallenta lo sviluppo.
C'è probabilmente una via di mezzo tra questi due estremi che è giusto per le tue circostanze. Per esempio, trovo che uno schizzo di un diagramma può essere un modo molto efficace per comunicare un'idea di design ad altre persone, e che diagrammi e panoramiche sono inestimabili per introdurre nuove persone in un sistema su cui dovrebbero lavorare. Il codice stesso contiene troppi dettagli di implementazione che riducono il design complessivo, quindi "leggere il codice" non è una buona risposta a "hai qualche diagramma che descrive la tua architettura?". Questo non significa che devo creare diagrammi dettagliati per ogni classe.