A partir de um nível de 10.000 pés, se você puder desenhar em um quadro branco e explicá-lo a um programador competente que não trabalhe em seu campo e não conheça sua linguagem de programação e os detalhes atuais da implementação, provavelmente é arquitetura. Se você pode escrever um livro sobre isso que qualquer pessoa fora de sua empresa se preocuparia, então provavelmente é arquitetura. Se você encontrar o seu próprio detalhe explicativo e não puder generalizá-lo para outras bases de código / empresas / indústrias, então provavelmente é design.
Eu concordaria que os dois exemplos que você dá são design de código e não arquitetura. O primeiro porque eu acho que quando você diz que você criou um 'algoritmo' para carregar recursos, eu acho que você quis dizer que você criou um conjunto de instruções para realizar essa tarefa, e não que você projetou um novo algoritmo que eles estarão ensinando no primeiro ano. COMSC no próximo ano. No segundo exemplo, novamente eu concordo que é design. Se você me mostrasse essas idéias, eu não conseguiria usá-las no meu projeto de software aleatório. Você tem que ir para um 'nível superior', Orientado a Objetos (OO) em Java, em vez de eu querer que a Classe do Cliente seja uma subclasse da Classe Person. Até mesmo falar sobre Exceções em geral poderia ser considerado de nível muito baixo (muito próximo da implementação).
Para tentar abordar os detalhes que você lista, acho que você deve pensar em como arquitetar um CMS baseado na web. O Wordpress tem um codex da arquitetura do site , onde eles falam muito sobre os detalhes da implementação do design, mas fica claro no post que a arquitetura principal deles Centra-se em torno de fazer Wordpress extensível com temas. Arquitetar uma interface clara para um tema de tal forma que pudesse ser escrito por alguém do lado de fora da empresa era claramente uma decisão de arquitetura que eles tomaram. Esses são os tipos de coisas que é bom colocar no papel ao arquitetar sua solução de "longo prazo" (não temporária) para que todas as decisões de design e implementação sejam feitas durante o desenvolvimento (por todos os desenvolvedores, não apenas pelo arquiteto). estão em linha com esta ideia.
Outros exemplos de arquitetura para sua situação:
- Colocando a coisa toda em máquinas virtuais, hospedadas em um provedor de nuvem ou em casa e tendo instâncias de máquina sem estado, para que qualquer falha na máquina possa ser substituída por uma nova instância de uma máquina virtual sem ter que copiar em qualquer estado ou perder qualquer informação.
- Criação de testes de falha de produção ao vivo desde o início com caos simies .
Talvez tente desenhar todo o sistema em um quadro branco. Experimente em diferentes níveis de detalhes, a primeira placa pode ser GUI > dispatcher > back-end > DB ou algo assim e, em seguida, detalhar até começar a usar os pronomes.