[feedback] Minha evolução como profissional e talvez para você que está perdido um ponto de começo.

Atualmente venho estudando muito sobre arquitetura de software que é uma das matérias abordadas dentro da Engenharia, minha trajetória até esse momento está em uma curva crescente contínua e me sinto realizado com isso.

Durante minha graduação em ciências da computação eu não ligava muito para a matéria de Engenharia de software, mas hoje percebo que ela provavelmente é mais importante do que codificar algo (posso estar muito errado nisso). Ela nos mostra um lado que muitos dos desenvolvedores ignoram, o lado "maçante" do corporativo, fornecendo uma perspectiva que muda totalmente como nós escrevemos um software. Não é simplesmente cuspir código e fazer com que funcione, cada linha, cada lógica pensada de forma proposital tem um peso na solução final.

O processo de arquitetar uma solução requer um certo domínio do negócio, o arquiteto como profissional responsável por este processo tem o papel fundamental de analisar o negócio como um todo de forma externa, ou seja, entender o domínio em que o negócio atua bem como o mercado concorrente, mas, também deve analisar o contexto interno da empresa.

Todo o ecossistema corporativo é composto por uma sociedade multicultural com visões diferentes sobre um mesmo termo, por exemplo, um cliente da empresa, que para o setor financeiro é visto como entrada de caixa e recursos, para o setor de marketing pode ser visto como meio de comunicação e propaganda externa, e a partir destas duas perspectivas podemos ter processos totalmente distintos para tratamento de uma mesma entidade (o cliente), e a solução proposta deve levar ambas as visões em consideração, um exemplo claro dessa “ilógica de negócios” pode ser descrito com um pequeno trecho do livro escrito por Martin Fowler - “Padrões de Arquitetura de Aplicações Corporativas, Pg. 27”

"A seguir, temos a questão do que está por trás do termo “lógica de negócio.” Acho este um termo curioso porque existem poucas coisas que são menos lógicas do que a lógica de negócio. Quando você cria um sistema operacional, esforça-se para manter toda a coisa lógica. No entanto, as regras de negócio são simplesmente impostas a você e, sem um grande esforço político, não há nada que você possa fazer para alterá-las. Você tem que lidar com um conjunto aleatório de condições estranhas que muitas vezes interagem umas com as outras de formas surpreendentes. É claro que elas são assim por alguma razão: algum vendedor negociou receber uma prestação anual dois dias mais tarde do que o usual porque isso se ajustava ao fluxo de caixa do cliente e, assim, ele conseguiu ganhar alguns milhões de dólares no negócio. Alguns poucos milhares desses casos especiais é o que leva à complexa “ilógica” de negócio, que torna tão difícil o software de negócios. Nesta situação você tem que organizar a lógica de negócio tão eficazmente quanto puder, porque a única coisa certa é que ela mudará com o decorrer do tempo."

Utilizar de múltiplas perspectivas e entender como elas se complementam é algo fundamental para o arquiteto de software, pois isso unifica as diversas linguagens dentro do ecossistema empresarial, dando assim aos envolvidos uma abstração completa sobre como a solução atuará dentro dos diversos setores, e como ela irá complementar o fluxo de trabalho dos mesmos.

Se você leu até aqui, gostaria de saber sobre sua opinião, vivência, e sobre suas conclusões a respeito do tema. Além disso deixe um feedback construtivo, o conhecimento é algo que fundamenta nossa sociedade, e nos aprimora continuamente.

Essa minha conclusão foi feita com base no curso "MBA - Arquitetura Full Cycle", juntamente com a leitura dos livros "Padrões de Arquitetura de Aplicações Corporativas, Martin Fowler", "Fundamentos da Arquitetura de Software: Uma Abordagem de Engenharia, Neal Ford e Mark Richards".

Uma arquitetura bem escolhida é ótimo para um projeto, pois ela q faz a diferença entre softwares bons vs softwares eficientes. E isso não se trata apenas na hora de codificar, mas principalmente no desempenho ideal para o projeto. Então saber escolher tecnologias apropriadas, saber como desenhar o fluxo dos dados, como separar cada coisa no seu devido contexto, tudo isso faz parte do conhecimento sobre arquitetura.

Não vou lembrar mto sobre o assunto, pois faz um bom tempo q li sobre. Mas pra quem tiver interesse, dá uma olhada no blog do netflix e vejam como são feitos as decisões deles para aguentar milhares ou até milhões de acessos ao mesmo tempo, de uma maneira constante (afinal é vídeo sendo transmitido), sem deixar o usuário na mão por um longo período de tempo. Saber arquitetar esse tipo de sistema não é pra qqr um e bem provável q não é feito só por uma pessoa. Ai tem aquele ponto, até onde essa arquitetura ela é boa para meu projeto. Pensando no exemplo da netflix, se alguém tentar replicar ela num projeto de 10, 100 usuários, bem provável q será um tiro no pé, pois é bem ineficiente matar uma formiga com um canhão.

Então saber escolher arquitetura apropriada e saber como desenhá-los é uma skill mto poderosa para um dev e vale a pena ser estudada, principalmente se já tem um nível pleno/sênior, pois é nesse momento em q já tem conhecimento suficiente para entender algo mais complexo como um todo.

Vlws pelo post.

Meus 2 cents: So um detalhe: A NETFLIX tem uma solucao propria chamada "Open Connect" - basicamente um servidor de CDN que ela coloca FISICAMENTE em um provedor (ISP) (e de gratis !). Isso reduz absurdamente o tempo de resposta e permite economizar trafego para todos os envolvidos (inclusive o ISP - que poupa um bocado de banda assim). https://openconnect.netflix.com/pt_br/ PDF em pt-br explicando como o CDN da NETFLIX funciona: https://regional.forum.ix.br/files/apresentacao/arquivo/1444/Netflix_IX%20Forum%20Regional%20Pernambuco%20%28July,%202022%29.pdf Outro item eh ter peering direto no PTT/IX.br - o que tambem acelera um bocado o tempo de resposta. https://openconnect.netflix.com/pt_br/peering/#locations Sobre o appliance em si (roda FreeBSD): https://openconnect.netflix.com/pt_br/appliances/#the-hardware Exemplo de um: https://arstechnica.com/information-technology/2022/10/redditor-acquires-decommissioned-netflix-cache-server-with-262tb-of-storage/ https://talentstreasure.com/netflixdatarouting.html

Meus 2 cents,

Houve um tempo, quando trabalha em uma fabrica de software, onde as tarefas eram bem divididas: quem falava com o cliente e fazia o levantamento de requisito (os analistas de negocio e analistas de sistema) e quem codava. O DEV ja recebia um briefing pronto com os requisitos mastigados - era uma questao de ver se o sistema ja tinha todos os dados necessarios no banco, e caso negativo, chamar o DBA e conversar com ele sobre o assunto. Ele verificava os requisitos, e se necessario conversava com o team leader sobre as alteracoes necessarias (o sistema tinha versoes para DB2, Oracle e outros bancos - cheio de triggers e stored procedures, dai a necessidade do DBA analisar antes). Isso nos anos 90.

Era bom ? Funcionava, mas era uma estrutura grande. Na epoca usar PMBOOK/PMI, ITIL, COBIT, CMMI - tudo parecia fazer sentido.

Tinha o lado positivo que alguem ja negociava as regras de negocio - o DEV nao precisava ficar quebrando a cabeca com isso, exceto codar o necessario para fazer a ideia funcionar.

Ja nos anos 2000, participei de equipes com scrumm/agile - mas confesso que a ideia de microgerenciamento que alguns leaders fazem a cada sprint tornam o processo meio estressante.

Mas sim - engenharia de software eh uma materia as vezes negligenciada que vale a pena acompanhar com mais cuidado.