Sou desenvolvedor júnior (aproximadamente 3 anos de exp.) E, no meu trabalho, estamos no processo de arquitetar um novo sistema. Meu desenvolvedor principal será o arquiteto principal, mas ele me desafiou a tentar arquitetar o sistema sozinho (em paralelo).
Ao longo de algumas iterações de brainstorming de idéias e proposição do que eu vi como sugestões de arquitetura, minha liderança me deu o feedback de que a maior parte do que venho fazendo foi "projetar" e não "arquitetar".
Ele descreveu a diferença como a arquitetura sendo independente de implementação, enquanto um design é a descrição de uma implementação. Ele disse que preciso tirar meu chapéu de designer e colocar meu chapéu de arquiteto. Ele me deu alguns conselhos sobre como fazer isso, mas eu gostaria de lhe perguntar também:
Como saio do modo de designer de software e começo a pensar mais como um arquiteto?
Aqui estão alguns exemplos de "designs" que eu criei que não eram considerados relevantes para a arquitetura pelo meu lead:
- Eu vim com um algoritmo para carregar e descarregar recursos do nosso sistema e meu líder disse que algoritmos não são categoricamente arquitetura.
- Eu vim com um conjunto de eventos que o sistema deveria estar levantando e em que ordem deveria aumentá-los, mas isso também não pareceu cortá-lo como arquitetura.
Parece que estou sendo pego nos detalhes e não recuando o suficiente. Descobri que, mesmo quando me deparo com algo que está no nível da arquitetura, muitas vezes cheguei lá testando várias implementações e analisando os detalhes, generalizando e abstraindo. Quando descrevi isso para minha liderança, ele disse que eu estava adotando a abordagem errada: eu precisava estar pensando "de cima para baixo" e não "de baixo para cima".
Aqui estão alguns detalhes mais específicos sobre o projeto :
- O projeto que estamos arquitetando é um aplicativo da web.
- Estou estimando entre 10 e 100 mil linhas de código.
- Nós somos uma startup. Nossa equipe de engenharia é de cerca de 3-5 pessoas.
- A coisa mais próxima com a qual eu poderia comparar nosso aplicativo é um CMS leve. Possui complexidade semelhante e lida principalmente com os módulos de carregamento e descarregamento de componentes, gerenciamento de layout e estilo plug-in.
- O aplicativo é ajax-y. O usuário baixa o cliente uma vez e depois solicita os dados conforme necessário do servidor.
- Nós estaremos usando o padrão MVC.
- O aplicativo terá autenticação.
- Não estamos muito preocupados com o suporte a navegadores antigos (ufa!), Portanto, estamos procurando aproveitar o melhor e o mais recente que está por aí e será lançado. (HTML5, CSS3, WebGL ?, Extensões de fonte de mídia e muito mais!)
Aqui estão alguns objetivos do projeto :
- O aplicativo precisa ser dimensionado. No curto prazo, nossos usuários estarão na ordem de centenas a milhares, mas estamos planejando dezenas de milhares a milhões e além.
- Esperamos que o aplicativo esteja disponível para sempre. Esta não é uma solução temporária. (Na verdade, já temos uma solução temporária, e o que estamos arquitetando é a substituição a longo prazo do que temos).
- O aplicativo deve ser seguro, pois pode ter contato com informações pessoais sensíveis.
- O aplicativo precisa ser estável. (Idealmente, seria estável em torno do nível do gmail, mas não precisa estar no extremo de um rover de Marte.)