Vamos lá, meu povo! Princípios que uma pessoa arquiteta leva em consideração para arquitetar uma solução. Então, eu tenho que arquitetar uma solução, eu tenho que seguir um caminho. E baseado nisso, eu tenho que ter alguns princípios. Quais são? Primeira coisa, a gente tem que estar totalmente alinhado aos objetivos de negócio. Tem uma talk bem interessante do steve jobs logo quando ele voltou pra apple e ele saiu desmembrando ou extinguindo diversos a projetos que estavam rodando na apple projetos absurdamente fantásticos tá com pessoas que pessoas muito inteligentes estavam trabalhando por tempo e ele foi confrontado tá com por um desenvolvedor da apple falando o que ele pretendia fazer com aquele projeto quais tecnologias que os aí começou a falar um monte de coisa técnica no final das contas e o steve Jobs, ele falou, para ser bem curto aqui, o seguinte, que ele acreditava que todas as pessoas que estavam ali na Apple eram pessoas extremamente inteligentes, extremamente criativas e que estavam desenvolvendo projetos fantásticos. projetos fantásticos, mas aqueles projetos, eles não estavam alinhados ao usuário final, ao cliente da Apple, ou seja, a pessoa não olhava a empresa e entendia a estratégia geral de como que a empresa funcionava. E o Steve Jobs naquele dia ele falou o seguinte ele virou e falou o seguinte não adianta a gente sair criando a tecnologia para daí simplesmente sair oferecendo diversos diversas tecnologias diversas funcionalidades para o usuário final é o contrário você tem que entender o usuário final, saber o que ele quer, para ter uma visão geral daquilo, e daí sim você faz uma engenharia reversa do que ele quer, para você criar naquela solução. E não ao contrário, não adianta criar algo que você não sabe como vai ser usado e se vai estar alinhado com o que a empresa está fazendo. Nós desenvolvedores, a gente tem uma boa, uma bela mania de fazer isso. A gente adora sair criando um monte de coisa técnica, fazendo um monte de coisa, mas pensa bem com você, eu não sei quantos anos você tem de carreira, mas quantos projetos que você já não começou a fazer e nunca foram para o ar? Ou foram para o ar e saiu do ar rapidinho porque falhou, teve um fracasso, não falando de forma pejorativa. Isso acontece por quê? Porque muitas vezes aquilo que estava sendo desenvolvido estava sendo feito da tecnologia pela tecnologia e não pens pensar no usuário final então está alinhado com os objetivos de negócio é um dos pontos principais aqui pra você criar o que vai funcionar por muito tempo que vai gerar valor para todo mundo legal flexibilidade galera não adianta você ser tá aquela pessoa mais torrada do mundo que tem que ser somente de um lado você vai ter que engolar um gulissá você vai ter que ser uma pessoa que no final do dia vai ter que tomar uma decisão que não é a melhor mas você tem que ser flexível para que você consiga no final das contas colocar as coisas para funcionar tá não existe extremismo você tem que ser uma pessoa resiliente, mas ao mesmo tempo você tem que saber adaptar ao ambiente que você está. Reusabilidade. Galera, tudo que você vai desenvolver, você tem que pensar o que já existe e como eu aproveito isso. tá? e como que eu aproveito isso? nós adoramos pegar um papel em branco e criar um software do zero não existe nada melhor nessa vida do que isso né? usar o melhor framework, a melhor tecnologia as melhores opções mas muitas vezes 70% do trabalho já está feito num sistema que foi desenvolvido 10 anos atrás e você tem que saber reutilizar essas coisas Você tem que saber reutilizar o que já foi feito por outras pessoas Ou coisas que você mesmo já tinha criado no passado E você tem que segurar aquele comichão tecnológico E saber que o mais importante é entregar para o negócio, e não simplesmente sair e satisfazer o nosso ego tecnológico. Legal? Outra coisa importante é interoperabilidade. Por mais que você esteja desenvolvendo um sistema hoje, que aparentemente ele funciona sozinho, ou ele está resolvendo um problema específico de negócio, você tem que saber que esse sistema em algum momento ele vai precisar se comunicar com outros sistemas tá então toda vez que você vai desenvolver vai projetar uma solução você já tem que pensar é como outros sistemas vão se comunicar com esse sistema ou como esse sistema vai com vão vai conseguir se comunicar com outros sistemas isso só é possível se você tiver uma arquitetura muito decente tá Ou como esse sistema vai conseguir se comunicar com outros sistemas. Isso só é possível se você tiver uma arquitetura muito decente. E aí a gente vai inclusive até descer no nível. Por isso que conseguir desenvolver aplicações bem feitas vão sempre te ajudar a chegar em coisas desse tipo. Existem diversas formas, desde arquitetura hexagonal, ports and adapters, como que eu consigo criar portas na minha aplicação que eu vou conseguir acessar outras pessoas e outras pessoas vão conseguir me acessar. Então, a gente tem que pensar em tudo isso de forma geral. Legal? Mantendo a habilidade. Não preciso nem chover no molhado aqui. Tem que ser fácil de dar manutenção. E quando eu estou falando fácil de dar manutenção, não é só corrigir um bug. É desde corrigir um simples bug até conseguir fazer um deploy rápido, eficiente para conseguir resolver o problema no ar. Ou até mesmo, quando o sistema caiu do ar, como que eu vou conseguir já ter um plano B para eu conseguir subir isso o mais rapidamente possível. E daí a gente está falando desde técnicas de desenvolvimento até técnicas que a gente vai estar ligando muito mais para a área de DevOps, para a parte de SRE. Então, por isso que um arquiteto de solução tem que ter uma visão 360 da solução, desde que está sendo criada até depois que ela foi feita o deploy. Beleza? E outro ponto aqui que não dá pra gente escapar né e é um assim são coisas que você tem que a seguir regras regulatórias e acabou na europa funciona de um jeito no brasil do outro estados unidos do outro e sistemas enterprise normalmente acontecem com isso então tem muita gente que fica dando ponto é porrada e mude como quer dando um soco em ponta de faca para conseguir fazer alguma coisa funcionar mas não adianta tá você tem que seguir normas isso faz parte do dia a dia legal e portabilidade o que é portabilidade galera O que é portabilidade, galera? Muitas vezes um sistema ou uma solução que você vai estar fazendo, ela vai ser absorvida por outro sistema. Ou o sistema que você fez vai absorver esse outro sistema. As informações, elas têm que estar disponíveis facilmente. Então essa parte de portabilidade é muito importante tá por isso que conseguir aos poucos isolar o seu domínio de toda a sua aplicação é importante nem sempre a gente vai conseguir mas quanto mais a gente conseguir mais facilmente a gente vai conseguir fazer uma portabilidade da sua aplicação para um framework diferente, uma solução diferente, um ambiente diferente. Tudo isso depende muito de como que a solução vai ser desenvolvida. Beleza? Então, no próximo vídeo, a gente continua aí com mais características, com mais pontos aqui que a gente tem que falar sobre arquitetura de solução.