Breve sommario come introduzione:
Siamo un piccolo team di sviluppo web Java, che crea applicazioni utilizzando vari framework e librerie come JSF, Hibernate, Seam, tutte insieme implementate in JBoss AS.
Inizialmente, l'app è stata messa insieme e alcune funzionalità aggiunte per formare una vetrina da mostrare ai potenziali clienti. Si è verificata qualche lucidatura, l'app è stata rilasciata, è stata accettata e funzionante e con il passare del tempo sono state aggiunte funzionalità aggiuntive, i bug sono stati corretti, si sono verificati nuovi bug, come sempre.
A causa degli alti fattori di bus e delle gare di avvio, lo sviluppo è diventato un po 'fuori mano - sono state aggiunte sempre più funzionalità, non avendo compreso appieno l'architettura di base del sistema. Funziona ancora, ma ci sono sempre insidie perché il sistema si è evoluto da dove è nato a qualcos'altro e all'inizio sono state prese varie scorciatoie per accelerare lo sviluppo - ora tutto torna e lo sviluppo rallenta, perché i workaround sono usati ed è abbastanza difficile da introdurre nuovi sviluppatori nel progetto.
Ora sono in procinto di ripulire e organizzare le cose - installando un sistema di tracciamento dei bug, costruendo una cultura di test / qualità, pensando a come fare test automatici, revisioni di codice (tutte quelle cose professionali di fantasia che eravamo manca all'inizio) e fare un refactoring generale come organizzare gerarchie di classi e funzioni per rendere più facile l'uso di roba. Ciò rende tutto un po 'meglio, ma c'è ancora molto da fare. Dato che non sono la persona che inizialmente ha costruito il sistema (ex programmatore principale rimasto) e non quello esperto (che si sta sviluppando da 2 anni e mezzo, ma questa è la mia unica esperienza "aperta" finora), non sono sempre sicuro su cosa fare.
Ecco il mio problema:
Il refactoring è sempre qualcosa di buono e lo faccio costantemente per semplificare le cose, ma ciò che mi imbarazza è quando, come e perché dovrei aggiornare l'architettura di base (cioè, le librerie su cui si basa il sistema, il server delle applicazioni, il database ecc.)
Esempi:
-
Attualmente utilizziamo JBoss 4.2.2 - Ho già letto da qualche parte su JBoss 7.1, dovrei farlo? Come si può valutare questo?
-
Usiamo Seam 2.2 che sembra essere un grosso blocco (non funziona su versioni di JBoss più alte, non supporta JSF2). Inoltre, vedo fonti che mi dicono di usare le funzioni JEE al posto di Seam.
Fondamentalmente, sono interessato a qualsiasi approccio generico per questi problemi, non solo quelli che ho citato negli esempi sopra - perché potrei inciampare su questi problemi per un'altra libreria su un altro sistema in un altro momento (o qualcun altro potrebbe trovarsi di fronte problemi simili).
Quindi, qual è il punto? Devo essere aggiornato e utilizzare solo le librerie all'avanguardia o dovrei stare con quello che ho? Come riconosco, la tecnologia che sto usando è letteralmente un cavallo morto e salta fuori? Con quale frequenza dovrebbero apparire questi aggiornamenti tecnologici?
E un'altra domanda accanto al generale "come fare aggiornamenti". Come riconosco che il mio software potrebbe essere definito "creato da professionisti" ?. Esiste un test di Joel per software ben fatto oltre al senso comune dei programmatori?