O que fazer quando você realmente estragou o design de um sistema distribuído?

Pergunta relacionada: Qual é a maneira mais eficiente de quebrar um banco de dados centralizado?

Vou tentar fazer essa pergunta bastante geral, de modo a beneficiar outras pessoas.

Há cerca de três anos, implementei um site e CRM integrados. Como queria impressionar o cliente, implementei a arquitetura mais barata em que pude pensar, que era hospedar o banco de dados e o site central no servidor da web. Criei um aplicativo de desktop que se comunica com o servidor da web por meio de um serviço da web (esse aplicativo é executado no escritório principal).

Em retrospectiva, isso foi bastante tolo, pois agora que a empresa cresceu, sua conexão à Internet se torna cada vez mais lenta a cada mês. Agora, devido aos problemas de velocidade, o software de desktopo tempo acabou regularmente, o cliente fica com 3 opções:

Compre uma conexão à Internet mais rápida.Mova o banco de dados (e o site) para um servidor interno.Redesenhe a arquitetura para que os bancos de dados da Web e do CRM sejam separados.

A primeira opção é a "mais fácil", mas certamente não a mais barata a longo prazo. Segunda opçao; se mudarmos o site para hospedagem interna, o cliente terá que combater problemas como conexão com a Internet sobrecarregada / ruim / offline, perda de energia, etc. E a opção final; o cliente é odiado por pagar uma quantia inteira de dinheiro para eu re-projetar e re-codificar a arquitetura, e não posso me dar ao luxo de fazer isso de graça (preciso comer).

Existe alguma maneira de recuperar quando você estragou tanto o design de um sistema distribuído que nenhuma das opções funciona? Ou é um caso de reduzir suas perdas e apenas aprender com o erro? Sinto-me péssimo por não haver uma solução rápida para esse problema.

questionAnswers(6)

yourAnswerToTheQuestion