Inizierò con uno, che tuttavia non ha funzionato come volevo.
Valutazione del fornitore:
All'inizio del progetto, abbiamo dedicato del tempo a fare un sondaggio di librerie open-source esistenti che possono essere utilizzate come blocchi di costruzione per una biblioteca più grande. Nonostante i nostri sforzi, c'erano un certo numero di biblioteche che non abbiamo incontrato fino a diversi mesi nel progetto. Se avessimo scoperto quelle librerie mancanti prima, avremmo potuto prendere le nostre decisioni di progettazione in modo diverso.
Compatibilità dell'architettura:
È stato capito fin dall'inizio che nessuna singola libreria poteva soddisfare tutti i requisiti, quindi sono necessarie diverse librerie esistenti e alcune implementazioni personalizzate per colmare le lacune. Queste librerie dovrebbero essere racchiuse in un'unica architettura in modo che gli utenti non abbiano bisogno di conoscere la costruzione interna della libreria. L'efficienza (in molteplici aspetti, che può essere riassunta come "nessun tempo di CPU, RAM o spazio su disco può essere sprecato") è stata la principale forza trainante nella progettazione architettonica; quindi i wrapper devono essere ugualmente efficienti. All'inizio non sapevamo quale libreria open-source sarebbe compatibile con il design (nel senso che il wrapper non introduce alcuna inefficienza propria), in quanto ciò avrebbe richiesto un lavoro pionieristico per scoprirlo.
Qualità del codice:
Una delle librerie open-source aveva circa 20 anni. Un'altra biblioteca aveva circa 10 anni. Nel pensiero prevalente della libreria open-source, la vecchia libreria dovrebbe essere più stabile e avere meno bug. Alla fine abbiamo scoperto che era vero il contrario, e alla fine abbiamo dovuto risolvere un certo numero di bug nella vecchia libreria.
La mia ipotesi originale è che "ci vuole molta intelligenza per non soccombere a esso? Ci vuole molta esperienza?" ma dopo aver esaminato il progetto, sono arrivato alla conclusione che il riutilizzo del software è come il matchmaking - qualsiasi nozione di "opportunità mancata" si verifica naturalmente a causa del caso, e nessuna quantità di sforzo intenzionale ridurrà le opportunità mancate.
Che cosa serve per non soccombere alla sindrome di Non inventato qui, al fine di ottenere il più alto grado di riutilizzo del software e allo stesso tempo soddisfare perfettamente i requisiti del software?
Aggiunto (2010/12/18)
Uno dei motivi per cui abbiamo perso una buona libreria di candidati è che è stato escluso molto presto. Quando ci sono più di 10 biblioteche nella lista iniziale, c'è una certa pressione per trovare regole che possano eliminare rapidamente alcuni dei candidati, perché altrimenti avremmo speso troppo tempo ad analizzare (paralisi dell'analisi). Tuttavia, questa eliminazione rapida ha causato l'indesiderabile effetto di rifiutare una buona libreria. (proprio come l'assunzione?)