Indirizzamento delle domande ...
...would it be wrong to recommend a super-simple architecture, even to solve a complex problem, for an enterprise client?
Assolutamente no.
Dalla prospettiva del cliente
Come affermato sopra, dipende in gran parte dal cliente. Dipende anche dalla tua capacità di valutare accuratamente quali soluzioni sono giuste per il tuo cliente. Mentre ci sarà sempre un costo percepito per il valore desiderato, come consulente è il tuo lavoro per impostare le aspettative appropriate del cliente. In alcuni casi, dovrai soddisfare questa percezione. In altri, sarà nel tuo migliore interesse correggerli. Dopotutto, dovresti essere l'esperto per il tuo cliente. E se non lo sei, dovresti avere le conoscenze per essere in grado di diventare quell'esperto. Questo è quello per cui ti pagano.
Dalla prospettiva dello sviluppatore
La parte più difficile nella scelta dell'architettura da utilizzare è, spesso, la stima corretta della quantità di lavoro necessaria per utilizzare la tecnologia per soddisfare le esigenze specifiche. Questo può portare rapidamente a progetti che non soddisfano le aspettative dei clienti. Comprendi che alcuni progetti sono effettivamente realizzati più velocemente utilizzando questi "complessi" pezzi di codice che menzioni. Si comprende anche che alcuni non lo sono. Tu devi fornire quella misurazione, in base a ciò che tu o il tuo team conoscete.
Is it complexity that defines enterprise solutions, or is it the reliability, # concurrent users, ease-of-maintenance, or all of the above?
Sebbene le specifiche possano variare, in generale, una soluzione aziendale è una soluzione software che si applica a un vasto pubblico misto. Il numero di utenti concorrenti può essere o meno un fattore, anche se spesso lo è. Il numero totale di utenti, spesso in una varietà di ruoli aziendali, è uno dei maggiori fattori determinanti per stabilire se la soluzione è "enterprise".
Molte soluzioni aziendali sono molto complesse, ma alcune sono piuttosto semplici. Mentre l'impresa dà un'aria di affidabilità (e dovrebbe essere certamente mantenuta a un certo livello), diverse soluzioni hanno diversi livelli di affidabilità.
La facilità di manutenzione è qualcosa che penso che ogni sviluppatore (indipendente o membro del team) si impegni, non è necessariamente così facilmente raggiunto. Ciò che è importante è che esiste una procedura di manutenzione che ha linee guida ferme, piuttosto che essere "facile". Ricorda, basi di codice differenti avranno livelli sostanzialmente diversi di facilità a seconda delle filosofie, delle metodologie, dell'attività dell'ambiente (aziendale), della e complessità del codice.
Reagendo alle altre dichiarazioni ...
In all cases, there was never a need to actually make code swappable or reusable
Spesso non c'è mai un'esigenza specifica per farlo. Questo dovrebbe essere il tuo obiettivo, in ogni momento, comunque. Considera questo ... Potresti avere un cliente che richiede la possibilità di accedere o visualizzare il calendario dalla pagina web. Se rendi il tuo codice riutilizzabile, allora quando un altro cliente chiede la stessa cosa, hai già un po 'del lavoro svolto. Se non lo fai, allora devi fare tutto da capo. Ogni problema con il cliente è spesso di cui potrebbe aver bisogno un altro cliente in futuro. In altre parole, ogni cliente con cui lavori dovrebbe avere il potenziale per ridurre il costo del lavoro per i tuoi futuri clienti (non necessariamente il costo del prodotto).
and the tests were never actually maintained past the first iteration because requirements changed, it was too time-consuming,
Direi qui che la metodologia di test non era abbastanza astratta. Recentemente ho usato un pezzo di codice che ha fatto i propri test unitari direttamente all'interno di se stesso. Sono state create una funzione personalizzata assert
e expect
che ha soddisfatto le esigenze del progetto. Ogni volta che era necessario un test unitario, poteva essere applicato senza nemmeno regolare il codice. Infatti, il codice viene distribuito attivamente con gli asseriti e si aspetta ancora lì. Ha effettuato tali controlli come parte del codice di lavoro.
... deadlines, business pressure, etc etc....
Ho spesso riscontrato che la pressione extra aziendale e le scadenze che ostacolano il processo di codifica sono state imputate allo sviluppatore, non al cliente. Anche se questo non è sempre il caso, molte volte la pressione aziendale è causata dalla percezione di non riuscire a soddisfare le aspettative del cliente. Quando le scadenze impediscono il codice, è spesso perché lo sviluppatore non è riuscito a valutare con precisione la quantità di lavoro richiesto per il codice funzionale utilizzabile. In altre parole, programmali (i client se lo aspettano) , misurali (i client futuri se lo aspettano) , eseguili (gli utenti lo richiedono) , e vieni pagato per loro (il tuo contratto dovrebbe richiederlo) .