Dipende dalla tua piattaforma, ma alcune cose generali da tenere a mente
Versioning
Cosa succede se aggiorni la tua applicazione, tutti i vecchi plugin diventano obsoleti (il problema di Firefox)
isolamento
I plugin possono fare tutto ciò che vogliono? Ti fidi sempre di loro? O hai bisogno di eseguirli in una sorta di sandbox e richiedere permessi.
Aggiornamenti
Come gestisci gli aggiornamenti dei plugin?
Sicurezza
Come si garantisce l'autore di un plug-in, si impedisce lo spoofing o l'utente viene ingannato nell'installazione di codice dannoso. Solitamente risolto con una sorta di firma del codice
serializzazione
Spesso quando si utilizza l'isolamento di qualche tipo è necessario serializzare le informazioni tra diversi thread o processi. Come lo fai in modo più efficiente?
estensibilità
Quali aspetti hai bisogno di estendere? Come massimizzare il potenziale dei plugin senza che l'API diventi ingombrante.
Se scegli come target gli sviluppatori di terze parti per i plugin, direi che la cosa più importante (dalla mia esperienza) è vedere il plugin api e le classi completamente diverse dal resto dell'applicazione, e renderlo facile sviluppare il più possibile. È molto semplice per l'architettura dall'app principale "riversarsi" nei plug-in in modo che gli autori dei plugin debbano imparare molto più del necessario. Rendila semplice per loro, pensa al tipo di interfaccia e all'esperienza che vorrai come autore di plugin.
Un'altra buona mentalità non è pensare come "Il plugin farà tutte queste cose (nel codice) ma piuttosto" il plugin deve fornire queste informazioni ". In questo modo l'applicazione può consumare le informazioni necessarie e fare l'elaborazione effettiva che semplificherà il plugin.
Inoltre, in generale, ogni volta che puoi adottare un approccio descrittivo (metadati, come xml) piuttosto che codice, hai un grande vantaggio in quanto i metadati sono più facili da trasportare, versione, distribuzione, sicurezza e possono essere configurati più facilmente da terze parti