Fondo
El año pasado, me pidieron que creara una herramienta para la planificación de negocios para unos 10 usuarios. Esto se hizo en nombre de otro equipo de TI que me "subcontrató" el trabajo, y debido a que los plazos del proyecto no estaban planeados, tuve que implementarlo con un poco de prisa.
En ese momento, decidimos que la forma más rápida sería crear un libro de Excel con VBA y luego hacer que los usuarios descarguen este libro mejorado de VBA desde una Intranet para usar en sus PC. Excel fue una restricción en este caso porque el sistema de planificación (es decir, la base de datos) que usamos solo puede interactuar a través de un complemento de Excel que debe cargarse al mismo tiempo que el libro de planificación está abierto. Sin embargo, VBA no era una restricción en ese momento.
El libro de trabajo que creé alrededor de 4,000 líneas de código VBA y aunque intenté separar las capas de datos y de presentación, no pude en todos los casos debido a los plazos del proyecto. Para ser honesto, aunque estoy orgulloso de crear este libro de trabajo, al mismo tiempo estoy un poco decepcionado porque podría haberse hecho mejor, tanto en términos de codificación como de implementación para los usuarios.
Hoy
Volviendo a hoy, el equipo de TI volvió a pedirme un libro de trabajo similar (para poder reutilizar partes del otro libro de trabajo anterior), pero esta vez es mucho más complicado y será utilizado por un mayor número de usuarios ( alrededor de 200).
Sin embargo, esta vez, está un poco mejor planificado y puedo ver que tenemos un poco más de tiempo para planificar las cosas. En base a esto, pensé en la solución y la infraestructura, ya que la programación para 100 usuarios tiene más impacto que para 10 usuarios. Por lo tanto, le sugerí al equipo que quizás deberíamos considerar migrar el código existente a una solución C # para poder administrar el código de una manera más refinada. Todavía lo estoy considerando como un complemento escrito usando VSTO / Excel-DNA que luego se puede implementar en los usuarios.
Discutí esto con el equipo de TI hace dos semanas y todo parecía estar bien, hasta ayer recibí un correo electrónico de uno de los miembros del equipo (que no conoce VBA o C #) preguntando por qué deberíamos comenzar este nuevo proyecto en C # en lugar de usar el mismo enfoque que antes. Algunas de sus preocupaciones fueron:
- Es un proyecto bastante importante, por lo que debe funcionar: una solución C # no sería tan estable o funcionaría tan bien como la solución basada en VBA existente.
- Tendríamos que tirar lo que habíamos hecho en la solución VBA y recrearlo desde cero en C #.
- Alguien tendrá que admitir dos soluciones separadas, una en VBA y otra en C #. [en realidad, actualmente no tienen a nadie que los apoye, por lo general intervengo].
Ahora, puedo entender algunas de sus preocupaciones hasta cierto punto, pero necesito tomar una decisión sobre los próximos pasos y con qué volver a ellos. Personalmente, me gustaría implementar en C # porque siento que sería mejor para construir una solución "Enterprise" como esta. Además, me gustaría aprovechar esta oportunidad para repasar mis habilidades en C # ya que actualmente no soy tan competente en C # como lo soy VBA y me gustaría que un proyecto como este me lleve al "siguiente nivel".
Preparé una lista de puntos que podría usar para tratar de convencerlos de que una solución C # sería mejor para este proyecto, esto es lo que tengo hasta ahora:
- Examen de la unidad.
- Fuente de control.
- Documentación de código: para la transferencia de conocimiento a otras personas de apoyo.
- Mejores convenciones de codificación: puede usar cosas como ReSharper para exigir una mejor denominación y estructura.
- Mejor IDE: menos errores debido al resaltado de errores.
- Más modularidad a través de ensamblajes: puede promover la reutilización en herramientas futuras.
- Implementación administrada: puede controlar quién utiliza esta herramienta.
Pregunta: ¿Qué otros puntos podría agregar para convencerlos? ¿O estoy tratando de morder más de lo que puedo masticar con este proyecto? ¿Debo callarme y hacerlo en VBA de todos modos?
Soy consciente de que el simple hecho de mudarse a un nuevo idioma porque es "más nuevo" o visto como "más fresco" no debería ser una base para una decisión y, como tal, me he resistido a incluirlo como un punto de decisión: se trata de hechos.
Además, no estoy pidiendo una comparación literal entre C # y VBA como lenguajes, ya que hay muchas comparaciones en SO.