Arquitetura pra que te quero!
Sempre que esbarro com uma startup de tecnologia vejo os fundadores procurando por developers para criar a versão inicial de um produto qualquer. Criado o produto, o time de desenvolvimento aumenta e são adicionados mais developers. E aí me pergunto: quem fez a arquitetura do software?
A grande maioria dos developers que conheço não tem experiência ou conhecimento suficientes para arquitetar um software. São poucos, na verdade, que dominam a arte de arquitetar um software de forma a permitir fácil manutenção e crescimento da plataforma que estão criando. O desenvolvimento de software é, na verdade, uma tarefa para uma equipe multidisciplinar e não a tarefa de um único skill. O developer é apenas uma das variáveis da equação.
Uma equipe eficaz de desenvolvimento de software precisa ter um analista de sistemas, para que o problema a ser automatizado seja devidamente modelado, um arquiteto de sistemas, para que seja criada a arquitetura correta de software e hardware para a implementação do sistema dentro dos parâmetros exigidos pelo cliente, e o developer, que é quem efetivamente vai escrever o código.
Outras especialidades também são necessárias: DBA para auxiliar na modelagem ótima do banco de dados, um designer com experiência em UI/UX para resolver as questões de usabilidade e beleza da interface com o usuário, um sysadmin, cuja função será manter toda a infra coesa e em funcionamento, não somente a infra do sistema, mas também a infra necessária para o funcionamento da startup.
Muitos dos problemas dos softwares modernos resumem-se a arquitetura mal-feita. O resultado é consumo excessivo de recursos, alto acoplamento entre camadas de software e uma péssima manutenabilidade. Isso faz com que o custo de desenvolvimento de novas features aumente, bem como o bug fixing.
Normalmente, sistemas com arquitetura comprometida sofrem demais com manutenção predatória, ou seja, a famosa gambiarra. Os puxadinhos começam proliferar-se devido às limitações arquitetônicas.
O Developer Pode?
O ideal é que o developer aprenda a fazer arquitetura de software. Ele pode? Com certeza! Ao trabalhar sozinho, poderá arquitetar suas soluções e ao trabalhar com uma equipe multi-disciplinar, poderá contribuir ativamente para que o software tenha uma boa arquitetura e, consequentemente, boa qualidade.
O developer acaba tendo contato com todas as áreas que envolvem o desenvolvimento de software e conhecer arquitetura e negócios somam skills ao mesmo, permitindo-lhe validar modelos, consistir implementações e otimizar seu próprio código.
O software é vivo
Eu costumo dizer que o software se assemelha a um ser vivo pois está sempre em mutação. Da mesma forma, a arquitetura do software precisa ser sempre adequada a novos parâmetros, novas exigências ambientais, novas regras de negócio.
A arquitetura precisa evoluir juntamente com o software. Ou seja, é um dos itens que estarão sempre em mutação durante o ciclo de vida de uma solução. A arquitetura inicial parte de um conjunto de suposições que pode não ser mais verdadeira depois de algum tempo. Assim, é preciso rever estas hipóteses, revalidá-las e aplicá-las à arquitetura, gerando novas versões melhor adaptadas do seu software.