Troque o conector instalado por wizard por um pacote NuGet com versão travada, registre o provider no código e documente servidor e conector para qualquer máquina conectar.
Tire a troca de banco da mão do usuário final: ambiente define a conexão, administrador escolhe de uma lista, o builder monta a string e tudo fica auditado.
Upload de centenas de fotos no Android que para no meio? Guarde o estado no Room, use id idempotente e WorkManager com dataSync, e teste Doze pelo adb.
Glide preso no placeholder? Faça o Glide mostrar o erro, veja o que o servidor devolve com um script curl e confira cleartext, URL nula e cache da foto.
Valide o XML da nota contra o XSD da versão declarada, assine sem tocar depois, confira a assinatura localmente e só considere pronta a nota com protocolo.
Separe o que a biblioteca fiscal faz do que é decisão profissional: monte com o contador uma matriz fiscal no banco e deixe o código só aplicar a regra aprovada.
Antes de trocar o e-mail pela matrícula no login, garanta unicidade no banco, um canal de recuperação verificado e um fluxo de redefinição testado de ponta a ponta.
Descubra por que o nome do produto aparece com &, pare de gravar texto escapado no banco, escape no template conforme o contexto e limpe os dados antigos com segurança.
Transforme uma pirâmide de if e else em uma função plana: trate os casos inválidos primeiro, dê nome às condições e deixe o caminho feliz legível no fim.