Breve resumen como introducción:
Somos un pequeño equipo de desarrollo web de Java, que crea aplicaciones utilizando diversos marcos y bibliotecas como JSF, Hibernate, Seam, todos juntos implementados en JBoss AS.
Inicialmente, la aplicación se creó y se agregaron algunas características para formar un escaparate para mostrar a los clientes potenciales. Se realizó un pulido, se lanzó la aplicación, se aceptó y funcionó y, con el paso del tiempo, se agregaron características adicionales, se solucionaron errores, se produjeron nuevos errores, como siempre sucede.
Debido a los altos factores del bus y las carreras de inicio, el desarrollo se salió de control: se agregaron más y más características, sin haber entendido completamente la arquitectura central del sistema. Todavía funciona, pero siempre hay dificultades porque el sistema evolucionó de donde se originó a otra cosa y al principio, se tomaron varios atajos para acelerar el desarrollo; ahora todo esto regresa y el desarrollo se ralentiza, porque se usan soluciones alternativas y es Es bastante difícil introducir nuevos desarrolladores en el proyecto.
Ahora, estoy en el proceso de limpiar y organizar cosas: instalar un sistema de seguimiento de errores, desarrollar una cultura de prueba / calidad, pensar en cómo hacer pruebas automatizadas, revisiones de código (todas esas cosas profesionales sofisticadas que nos faltaban en el principio) y haciendo refactorización general como organizar jerarquías de clase y funciones para que sea más fácil usar cosas. Eso hace que todo sea un poco mejor, pero aún queda mucho por hacer. Como no soy la persona que inicialmente creó el sistema (el ex programador principal se fue) y no tengo tanta experiencia (desarrollo durante 2.5 años ahora, pero esa es mi única experiencia de 'mundo abierto' hasta ahora), no siempre estoy seguro de qué hacer. hacer.
Aquí está mi problema:
Refactorizar siempre es algo bueno y lo hago constantemente para facilitar las cosas, pero lo que me intriga es cuándo, cómo y por qué debo actualizar la arquitectura básica (es decir, bibliotecas en las que se basa el sistema, servidor de aplicaciones, base de datos, etc.)
Ejemplos:
Actualmente estamos usando JBoss 4.2.2. Ya leí en algún lugar de JBoss 7.1, ¿debería ir por eso? ¿Cómo se puede evaluar esto?
Usamos Seam 2.2 lo que parece ser un gran bloqueador (no funciona en versiones superiores de JBoss, no es compatible con JSF2). Además, veo fuentes que me dicen que use funciones JEE en lugar de Seam.
Básicamente, estoy interesado en cualquier enfoque genérico para estos problemas, no solo los que mencioné en los ejemplos anteriores, ya que puedo tropezar con estos problemas para otra biblioteca en otro sistema en otro momento (o alguien más puede enfrentar problemas similares) .
¿Entonces cuál es el punto? ¿Debo estar al día y usar solo bibliotecas de vanguardia o debo quedarme con lo que tengo? ¿Cómo reconozco que la tecnología que estoy usando es literalmente un caballo muerto y saltar? ¿Con qué frecuencia deberían aparecer tales actualizaciones tecnológicas?
Y, otra pregunta al lado de las cosas generales 'cómo hacer actualizaciones'. ¿Cómo reconozco que mi software podría llamarse uno 'creado por profesionales'? ¿Existe una prueba de Joel para el software bien hecho además del sentido común de los programadores?