fundo
No ano passado, fui convidado a criar uma ferramenta para ser usada no planejamento de negócios para cerca de 10 usuários. Isso foi feito em nome de outra equipe de TI que "subcontratou" o trabalho para mim e, como os prazos do projeto eram um pouco imprevisíveis, tive que implementá-lo rapidamente.
Na época, decidimos que a maneira mais rápida seria criar uma pasta de trabalho do Excel com o VBA e solicitar aos usuários que baixassem essa pasta de trabalho aprimorada pelo VBA de uma Intranet para usar em seus PCs. O Excel era uma restrição nesse caso, porque o sistema de planejamento (ou seja, banco de dados) que usamos só pode interagir por meio de um suplemento do Excel que deve ser carregado ao mesmo tempo em que a pasta de trabalho de planejamento está aberta. No entanto, o VBA não era uma restrição naquele momento.
A pasta de trabalho que criei em torno de 4.000 linhas de código VBA e enquanto tentava separar as camadas de dados e apresentação, não conseguia em todos os casos devido aos prazos do projeto. Para ser sincero, embora tenha orgulho de criar esta pasta de trabalho, estou ao mesmo tempo um pouco decepcionado por ter sido melhor, tanto em termos de codificação quanto de implantação para os usuários.
Hoje
Hoje em dia, a equipe de TI voltou a solicitar uma pasta de trabalho semelhante (para que eu pudesse reutilizar partes da outra pasta de trabalho acima), mas desta vez é muito mais complicado e será usado por um número maior de usuários ( cerca de 200).
No entanto, desta vez, é um pouco melhor planejado e posso ver que temos um pouco mais de tempo para planejar as coisas. Com base nisso, pensei na solução e na infraestrutura, pois a programação para 100 usuários tem mais impacto do que para 10 usuários. Portanto, sugeri à equipe que talvez devêssemos considerar a migração do código existente para uma solução C # para podermos gerenciar o código de uma maneira mais refinada. Ainda estou considerando isso como um suplemento escrito usando o VSTO / Excel-DNA, que pode ser implantado nos usuários.
Eu discuti isso com a equipe de TI há duas semanas e tudo parecia estar bem, até ontem recebi um email de uma equipe (que não conhece VBA ou C #) questionando por que deveríamos iniciar esse novo projeto em C # versus usar o mesma abordagem de antes. Algumas de suas preocupações eram:
- É um projeto bastante importante, portanto, ele tem que funcionar - uma solução C # não seria tão estável ou funcionaria tão bem quanto a solução existente baseada em VBA.
- Teríamos que jogar fora o que fizemos na solução VBA e recriá-la do zero em C #.
- Alguém precisará oferecer suporte a duas soluções separadas, uma em VBA e outra em C #. [atualmente, eles atualmente não têm ninguém para apoio, geralmente eu passo].
Agora, posso entender algumas de suas preocupações até certo ponto, mas preciso tomar uma decisão sobre os próximos passos e com o que voltar a eles. Pessoalmente, eu gostaria de implementar em C # porque acho que seria melhor criar uma solução "Enterprise" como essa. Além disso, gostaria de aproveitar esta oportunidade para aprimorar minhas habilidades em C #, pois atualmente não sou tão competente em C # quanto sou VBA e gostaria de um projeto como esse para me levar ao "próximo nível".
Eu preparei uma lista de pontos que eu poderia usar para tentar convencê-los de que uma solução C # seria melhor para este projeto, é o que tenho até agora:
- Teste de unidade.
- Fonte de controle.
- Documentação do código - para transferência de conhecimento para outras pessoas de suporte.
- Melhores convenções de codificação - pode usar coisas como ReSharper para impor uma melhor nomeação e estrutura.
- Melhor IDE - menos erros devido ao realce do erro.
- Mais modularidade através de montagens - pode promover a reutilização em ferramentas futuras.
- Implantação gerenciada - pode controlar por quem essa ferramenta é usada.
Pergunta: Que outros pontos eu poderia acrescentar para convencê-los? Ou estou tentando morder mais do que posso mastigar com este projeto? Devo ficar quieto e fazê-lo no VBA de qualquer maneira?
Estou ciente de que apenas mudar para um novo idioma porque seu "mais novo" ou visto como "mais frio" não deve ser a base de uma decisão e, como tal, resisti a incluí-lo como um ponto de decisão - trata-se de fatos.
Além disso, não estou pedindo uma comparação literal entre C # e VBA como idiomas, pois há muitas comparações no SO.