¿Cuáles son los beneficios o las desventajas de cambiar la base de código de una aplicación web de 10 años de ColdFusion a un lenguaje más popular como PHP, Ruby o Python?

Lea la versión de Joel Spolsky sobre la reescritura desde cero, así como otro artículo de ejemplo (puede encontrar muchas historias similares):

  • Cosas que nunca debes hacer, Parte I.
  • Por qué debería (casi) nunca reescribir su software.

Reescribir una aplicación que funcione sin ganancia funcional suele ser muy costoso y arriesgado. La mayor parte del desarrollo de software cuesta millones, y la mayor parte de ese costo es por adelantado. Durante la vida útil del proyecto después del desarrollo inicial, tienen que recuperar los costos de desarrollo y también pagar la operación y el mantenimiento continuos.

Si reescribe la aplicación, es como desarrollarla dos veces, y eso significa que el costo se duplica. Probablemente no podrá recuperar el doble de costo de desarrollo. No le crea a nadie que afirme que el nuevo lenguaje cuesta menos desarrollarlo.

Si su aplicación tiene éxito y su equipo tiene las habilidades para mantenerla, y ColdFusion admite las funciones que necesita que haga la aplicación, no la reescriba.

Piense en esta analogía: si construye un rascacielos, cuesta mucho por adelantado y un poco para el mantenimiento continuo. Esperas alquilar un espacio de oficina para ganar dinero y, finalmente, obtener ganancias. Pero un día ves que los rascacielos más modernos están utilizando nuevos materiales y técnicas de arquitectura. ¿Deberías reconstruir tu rascacielos existente solo para aprovechar la nueva tecnología y luego poner exactamente a los mismos ocupantes? ¿O debería dejar el viejo rascacielos para ganar dinero gradualmente tal como está y usar las ganancias para construir un edificio más nuevo que atienda a un conjunto diferente de clientes?

Aquí hay ejemplos de buenas razones para hacer una reescritura desde cero:

  • Debe agregar funcionalidad a la aplicación, que la tecnología anterior no admite (o si lo hace, es muy ineficiente o costosa).
  • Confía en el soporte del proveedor, pero el proveedor está descontinuando el soporte. Adobe actualmente posee ColdFusion, y parece que lo están apoyando.
  • Tus desarrolladores que conocen la tecnología anterior se van, y no puedes encontrar nuevas personas que conozcan la tecnología anterior. Incluso entonces, considere si es más barato reescribir la aplicación u obtener trabajadores que puedan recibir capacitación en la tecnología anterior.
  • La tecnología anterior tiene grandes tarifas de licencia, y cambiar a otra pila de tecnología podría eliminar estas tarifas de licencia y ahorrar suficiente dinero a medio plazo para justificar el costo de la reescritura.

Malas razones para hacer una reescritura desde cero:

  • Todos los demás parecen estar usando tecnología más nueva. No quiero parecer anticuado. A los usuarios no les importa en qué tecnología se implementa su aplicación, les importa si la aplicación funciona.
  • El código de la aplicación existente se ha desorganizado. Es mejor refactorizar el código. Puede hacerlo de forma incremental sin alterar demasiado el funcionamiento de la aplicación. Requiere menos cambios de lo que piensas, y mucho menos que reescribir todo.

Como todos decían, realmente debería haber una buena razón para reescribir. Lo que se han perdido de decir es que “popular” no siempre es mejor. Coldfusion es un lenguaje sólido que tiene una gran funcionalidad que aún no se encuentra en otros idiomas. Puedo escribir una rutina ColdFusion en menos líneas la mayor parte del tiempo y no tener que preocuparme por encontrar todos los complementos de terceros para manejar archivos PDF, bases de datos o lo que sea que esté integrado en ColdFusion. Luego está la curva de aprendizaje. Puedo escribir una rutina ColdFusion MEJOR que otros idiomas porque conozco ColdFusion … pero estoy aprendiendo algunos otros.

Una de las razones por las que uno podría reescribir es que el lenguaje de elección a menudo depende de los programadores de elección. No sería bueno escribir un programa en lenguajes de segunda o tercera generación hoy porque los nuevos programadores no los conocen. Lo mismo puede decirse de ColdFusion … a medida que los nuevos programadores se trasladan a otros idiomas, ColdFusion caerá en desgracia (aunque hay MUCHOS programadores de ColdFusion y el lenguaje aún no se está muriendo). Dicho esto, también puedo ENSEÑAR a un nuevo programador a leer / escribir Coldfusion mucho más rápido que otros idiomas.

Me dijeron que una de las ventajas de dejar ColdFusion es el ahorro en el costo de la licencia. Personalmente, creo que eso se compensa con el costo de algunas de las bibliotecas de terceros y / o la necesidad de desarrollar dichas bibliotecas con la garantía de la funcionalidad que existe con un sistema más antiguo como ColdFusion.

Reescribir un software siempre tiene la ventaja de moverse rápido. Pero debe tener razones sólidas para volver a escribir el software.
Antes de volver a escribir debe saber lo siguiente:

  1. ¿Qué logras reescribiendo con respecto a tu cliente? Nota: La tecnología es de la menor molestia para su cliente .
  2. ¿Qué archiva reescribiendo WRT su empresa como soporte de infraestructura reducido, habilidades fácilmente disponibles, aumento en el rendimiento del software?

Desventajas: siempre terminas subestimando la cantidad de trabajo involucrado en tal migración. Necesita mantener dos aplicaciones durante la migración. Matas lo que era bueno sobre el viejo y no te das cuenta de los beneficios del nuevo. Introduces nuevos errores. Tus clientes se van. Su equipo se estresa y el drama entra en acción. Sus mejores trabajadores se van frustrados.

Aspectos positivos: brinda la oportunidad de mejorar la aplicación existente. Podría terminar con un sistema simplificado, más eficiente, estable y ampliable. Pero necesita ser bien administrado.

¿Deberías migrar? Bien. 10 años de trabajo es mucho trabajo. Mantenlo en mente. Si la aplicación está bien definida, desacoplada, estable y modular, entonces puede hacer el cambio de una pequeña área a la vez. Pero si es un desastre y no pudo darle estructura en 10 años, entonces quizás no tenga lo que requiere una migración. Cambiar no es una forma de deshacerse de los problemas. Los elevará en superficie.

Elige un área que sea un desastre. Desacoplarlo, hacerlo bueno. En la antigua aplicación. Una vez que esté desacoplado, planifique la migración y continúe. Si nunca ingresó a la parte de migración, el riesgo es que su desorden ahora esté más limpio que antes. Y encapsulado. Si lo logra, sabe que lo logrará desde que comenzó con la parte de desorden, no la parte más fácil. Ya sabes, no quieres terminar con un sistema dividido. Y eso es lo que obtendrá si comienza con la parte más fácil. Al principio, tu equipo aún no sabe lo difícil que será realmente. Pero estarán muy motivados porque es algo nuevo. Necesitas esa motivación para las partes difíciles. Y hacia el final, esta motivación disminuirá. Por lo tanto, es una buena idea dejarlos para el final.

Si no comienza solucionando los problemas reales del software desde el principio. No se irán Así que tome la parte de que todos están de acuerdo en que no está bien y arréglelo. Eso le dará a todos un aumento de moral una vez que la cosa vieja que estaba molestando a todos ahora se arregle.

Desventaja: escribir software perfecto es difícil …

realmente depende de cuál sea su objetivo final, ¿hay algo que ColdFusion no pueda hacer?

Cada vez que decida migrar de un idioma / tecnología en particular, existen costos subyacentes, como capacitar a sus desarrolladores en un nuevo idioma.

Creo que la verdadera pregunta es ¿por qué quieres alejarte de ColdFusion?

El beneficio es que podemos producir un sitio que pueda satisfacer las necesidades actuales de los clientes, más flexible en cuanto a las características … pero la desventaja es que también podemos producir errores en el sistema estable actual que tal vez puedan distribuir el proceso comercial.

Creo que si queremos reescribir usando la última tecnología, deberíamos agregar más funcionalidades, características o incluso rediseñar el sitio.