Logo Tech Writers

Tech writers

Esse é o nosso blog para apaixonados por tecnologia! Aqui, softplayers e outros especialistas compartilham conhecimentos fundamentais para o desenvolvimento dessa comunidade.

SEJA UM TECH WRITER
Otimização inteligente: como usamos IA para transformar processos em produtividade
Tech Writers Setembro 10, 2025

Otimização inteligente: como usamos IA para transformar processos em produtividade

Este artigo foi elaborado com o apoio de ferramenta de Inteligência Artificial, utilizadas para estruturar e organizar informações, com revisão e supervisão humanas em todas as etapas. No mundo corporativo, tempo é o recurso mais escasso e, muitas vezes, indiscriminadamente, o mais mal aproveitado. Milhares de horas são perdidas em tarefas repetitivas, processos manuais e demandas de baixo valor estratégico. Por que isso é importante?O impacto da ineficiência vai muito além do financeiro: compromete a produtividade, reduz o engajamento e enfraquece o alinhamento estratégico das equipes, afetando diretamente a capacidade de inovação e competitividade organizacional. É nesse contexto que a Inteligência Artificial (IA) deixa de ser “mais uma” inovação tecnológica e passa a atuar como um pilar estratégico para a transformação organizacional, impulsionando a reconfiguração de processos e a criação de novos modelos de trabalho. Não estamos falando apenas de automação, mas de mudar o próprio papel das pessoas dentro das organizações, criando espaço para que o talento humano seja investido em criatividade, estratégia e inovação. Os números Processos manuais que não exigem análise profunda ou estratégica podem ser verdadeiros sabotadores de produtividade.A automação com IA devolve horas valiosas e, mais importante, devolve foco, propósito e autonomia. Um estudo realizado pela BCG X (2024) mostrou que profissionais que adotaram IA ganharam, em média, 5 horas por semana para desempenhar ainda mais atividades de maior valor. Do ponto de vista empresarial, isso significa semanas inteiras de produtividade extra por ano. E os impactos vão além, desses entrevistados: 41% relataram mais eficiência nas entregas. 39% expandiram suas responsabilidades para novas tarefas. 38% passaram a atuar de forma mais estratégica. A OCDE (2025) reforça que empresas que aplicam IA em tarefas operacionais ganham entre 5% e 25% de produtividade. O ganho não está só na redução de tempo, mas no reposicionamento do trabalho humano. E ainda, segundo a empresa de tecnologia, HP, que conduziu pesquisa global entrevistando mais de 15 mil pessoas em 12 países, identificou que 73% dos entrevistados dizem que a IA facilita o trabalho, e 69% personalizam o uso da IA para aumentar a produtividade. Panorama geral – O mundo já mudou. E o trabalho também. Os benefícios da Inteligência Artificial, quando bem utilizada e integrada de forma estratégica à rotina de trabalho, são claros e indicam que precisaremos mudar a maneira como estamos acostumados a trabalhar. Segundo a consultoria global McKinsey, mais de 50% das ocupações têm pelo menos 30% de suas atividades automatizáveis com tecnologias já disponíveis. Até 2030, metade das atividades laborais poderão ser executada total ou parcialmente por IA. Embora o dado possa parecer preocupante, a interpretação mais produtiva é otimista: a IA não vai roubar empregos, mas sim potencializar a execução de tarefas repetitivas e rotineiras, liberando espaço para que os profissionais desenvolvam habilidades mais humanas e criativas. A questão já não é mais “se” você vai adotar IA, mas como vai usá-la de forma responsável, estratégica e mensurável. Onde a IA é forte e o humano é insubstituível Kai-Fu Lee, cientista da computação e especialista em IA, diz que a Inteligência Artificial veio para nos libertar de trabalhos rotineiros e nos lembrar do que nos torna humanos. Em seu livro Inteligência Artificial (2019), ele relata a derrota de Ke Jie, o melhor jogador humano de Go, para a AlphaGo (uma IA), como um símbolo do potencial da interação entre humanos e IA: O humano traz propósito, sentimento e criatividade para tudo que faz. A IA executa e segue comandos com precisão. Com base nisso, Lee criou uma matriz que nos ajuda a entender melhor onde a IA pode potencializar os processos e onde a presença humana continua essencial: Precisa de interação social/empatia Não de interação social ou empatia Fonte: Kai Fu Lee A matriz considera duas dimensões: Complexidade cognitiva e criatividade: tarefas que exigem julgamento, empatia, decisão estratégica ou inovação. Rotina e dados: tarefas repetitivas, previsíveis ou baseadas em análise de dados. A partir dessas dimensões, os processos podem ser classificados em três categorias: IA sozinha: atividades que são padronizadas, previsíveis ou baseadas em regras e dados. São processos que podem ser automatizados sem perda de qualidade ou risco. Humano sozinho (podendo utilizar a IA como apoio): atividades que exigem compreensão contextual, criatividade, empatia ou tomada de decisão estratégica. São processos que não podem ser delegados exclusivamente à IA sem comprometer o resultado. Humano + IA: processos onde a IA executa tarefas repetitivas ou analíticas, liberando o humano para focar no que exige julgamento, visão estratégica ou criatividade. Essa combinação gera resultados mais eficientes e permite que o humano atue em alto valor. Assim, qualquer área pode analisar seus processos pensando: o que pode ser automatizado de forma segura e o que precisa da inteligência e sensibilidade humanas. A matriz funciona como guia para priorizar onde investir IA e onde manter o humano no centro do processo. Segundo Kai-Fu Lee, são três as áreas em que a IA fica aquém da capacidade humana e é improvável que consiga fazer isso nas próximas décadas, são elas: Criatividade – A IA não cria, conceitua, ou planeja estrategicamente. Apenas otimiza objetivos definidos, sem capacidade de definir metas, aplicar conhecimento em diferentes áreas ou usar bom senso. Empatia – A IA não pode sentir ou interagir com base em emoções. Não transmite cuidado, compreensão ou motivação genuína, e dificilmente substitui o toque humano em serviços que dependem dessa conexão; Destreza física – A IA não pode realizar um trabalho físico complexo que exija destreza ou coordenação motora, ou lidar com espaços desconhecidos e não estruturados, especialmente aqueles que ela não tenha observado.  O futuro do trabalho não é sobre humanos ou máquinas, mas sobre a sinergia entre ambos, uma colaboração em que a IA potencializa o que fazemos de melhor, enquanto nós damos direção, propósito e criatividade ao que ela executa. 6. Case Starian e Softplan O time de Privacidade da Starian e Softplan identificou uma oportunidade estratégica para otimizar duas atividades essenciais, porém operacionais e de alto consumo de tempo: análise de contratos e resposta a questionários de privacidade. Contratos: precisam ser implementados e revisados para assegurar aderência às políticas internas e à legislação. Questionários de privacidade: exigem respostas fundamentadas com base em regulamentos e documentos internos, sendo extensos e determinantes para transparência e consistência. Apesar da importância, o processo era manual, seguia padrões internos e demandava muitas horas, o que aumentava o risco de erros à medida que a demanda crescia. A equipe viu na IA a chance de transformar esse cenário. Da ideia à implementação Com apoio do TI, a solução foi criada de forma estruturada e segura. Operando em um ambiente fechado, o que garante maior proteção e privacidade dos dados.O desenvolvimento seguiu cinco passos: Priorizar atividades de maior impacto e volume. Definir limites da IA, mantendo decisões críticas sob supervisão humana. Treinar o modelo com contratos, políticas internas e referências relevantes. Configurar padrões e comandos para o contexto organizacional. Integrar a entrega final com comentários e sugestões para revisão do time de privacidade. O resultado: uma ferramenta que analisa contratos e questionários, entrega o documento pronto para revisão e mantém consistência e qualidade. Impacto na produtividade Os ganhos foram tangíveis: Contratos: Considerando uma média de 70 contratos recebidos por mês, sendo que, cada um levava em média 2h para análise. Com a IA, economizamos 30 minutos por contrato, equivalente a 35h/mês ou 420h/ano. Questionários de privacidade: Houve uma redução de 50% do tempo, economizando 2h30 por questionário, equivalente a 50h/mês ou 600h/ano. Essa automação liberou a equipe para decisões estratégicas, sem comprometer a qualidade ou a confiabilidade dos processos. Aprendizados e boas práticas Ao longo da implementação, o time de Privacidade da Starian percebeu que o sucesso da IA depende do equilíbrio entre tecnologia e supervisão humana. Alguns pontos se destacaram: Personalização é chave: a IA precisa ser treinada e ajustada ao contexto específico do negócio, demandas e atividades. Cada detalhe conta. Supervisão contínua é indispensável: alucinações e erros podem ocorrer, e a intervenção humana garante precisão e adequação. Qualidade dos dados importa: quanto melhor os insumos melhores e mais confiáveis os resultados gerados. Interação constante gera melhorias: feedback real do time aprimora a ferramenta e cria evolução contínua. Decisões críticas continuam humanas: a IA é aliada, mas a análise estratégica permanece sendo condição essencialmente humana. Soluções contratadas aumentam segurança: ferramentas validadas garantem consistência e proteção. Esses aprendizados mostram que agilidade e cautela precisam andar juntas. O uso inadequado de IA pode gerar riscos sérios: prejuízos financeiros, vazamento ou retenção indevida de dados pessoais, sensíveis e confidenciais, criação de informações falsas e confiança excessiva em sistemas não seguros. Portanto, algumas práticas são essenciais: Evitar inserir dados pessoais ou documentos confidenciais, especialmente em ferramentas não contratadas. Revisar sempre o conteúdo gerado. Questionar vieses ou distorções nos resultados. Utilizar apenas soluções aprovadas e adequadas pela organização. Capacitar a equipe e registrar riscos de cada uso junto com as áreas de privacidade e segurança da informação. Na Starian, aprendemos que quando humanos e IA trabalham em sinergia, os ganhos vão muito além da produtividade: entregamos mais qualidade, segurança e tempo para focar no que realmente importa, decisões estratégicas que apenas pessoas podem tomar. A tecnologia potencializa, mas é o olhar humano que garante consistência e confiança. Conclusão A experiência da Starian e da Softplan mostra que a Inteligência Artificial, quando implementada com propósito, personalização e supervisão humana, vai muito além da automação: ela se torna um multiplicador de valor. O ganho não é apenas em horas economizadas, mas em qualidade, consistência e capacidade de dedicar energia ao que realmente impulsiona resultados, decisões estratégicas, inovação e relações de confiança. O futuro do trabalho já começou. Organizações que aprendem a combinar a precisão da IA com o olhar crítico e criativo do humano não apenas otimizam processos, mas constroem equipes mais engajadas e preparadas para os desafios de um mercado em constante mudança. Mais do que substituir tarefas, a IA nos convida a redefinir prioridades, ampliar nosso alcance e, principalmente, reforçar aquilo que nenhuma máquina pode replicar: propósito, sensibilidade e visão. Quando humanos e IA atuam juntos, produtividade e impacto deixam de ser metas isoladas e passam a ser o novo padrão de excelência.

No-code: 5 lições aprendidas em um projeto real
Tech Writers Agosto 26, 2025

No-code: 5 lições aprendidas em um projeto real

Recentemente, liderei as frentes de Produto e UX no desenvolvimento de uma solução SaaS de IA para SEO, com um foco estratégico na adoção de tecnologias que acelerassem a busca pelo Product-Market-Fit (PMF) e pelo Minimum Viable Product (MVP). A abordagem escolhida também visava otimizar fatores cruciais, como a redução dos custos de desenvolvimento e a diminuição da curva de aprendizagem, garantindo um processo mais eficiente e acessível. Por isso, decidimos utilizar a seguinte stack de soluções para o desenvolvimento do software: Figma (prototipagem); Solução no-code para front-end web; A princípio íamos utilizar backend low-code, mas pivotamos e usamos tecnologia high code. Uma das principais vantagens dessa stack é que a velocidade de desenvolvimento do front-end seria muito maior por conta dos facilitadores, mas mantivemos o core da solução no backend em tecnologia high code, permitindo escala com melhor eficiência em cloud e flexibilidade. Posso explicar melhor o racional e quais opções nós cogitamos em um próximo post, mas vamos em frente aqui (comenta aqui se você gostaria de ler sobre isso). 5 lições aprendidas com no-code: 1. Velocidade maior: É indiscutível que uma solução no-code traz mais agilidade no desenvolvimento, acredito que reduzimos o tempo de desenvolvimento do front-end na ordem de 80%. Chega a ser bonito ver a facilidade que é criar as interfaces e os workflows, ainda mais quando você pode simplesmente utilizar um plugin e importar as telas diretamente do Figma. Se você é UX ou PM, imagine validar entregas e fazer ajustes de forma ágil. Melhor ainda: você mesmo pode criar as interfaces! Eu mesmo fiz isso diversas vezes ao longo do projeto. Muitas vezes, gastamos tempo documentando pequenos ajustes de usabilidade para que os desenvolvedores os corrijam, mas, nessa abordagem, bastava selecionar a camada e ajustar diretamente, sem intermediários. Tem um ponto positivo que vale destacar: O software no-code que usamos tem uma estrutura de auto-layout bem parecida com o Figma, se você domina Figma, vai tirar de letra. 2. Existirá uma curva de aprendizagem: Existem poucos profissionais com experiência prática na utilização de tecnologia low/no-code no país. Isso significa que você provavelmente vai ter que treinar o time a lidar com essa tecnologia, e naturalmente isso vai gerar alguns erros operacionais, bugs, e vai fritar alguns neurônios. A curva de aprendizagem é bem menor que uma tecnologia high-code, mas vai levar um tempinho para você construir um time maduro. 3. Você vai ter que repensar alguns processos: Gestão de equipes, branches, merges, servidores de homologação, deploys… Você vai ter que pensar nesses processos para garantir qualidade nas entregas e mitigar erros. Imagina alguém dar um “misclick” no software no-code e subir em produção uma branch errada… 4. Problemas novos surgem: Nem tudo são flores, ao utilizar uma plataforma para desenvolver um software, você pode acabar ficando dependente da empresa que fornece a plataforma (o famoso vendor lock-in), por isso é importante escolher de forma consciente qual tecnologia você vai utilizar. No caso do software que escolhemos, é possível exportar o projeto em código, então se no futuro você quiser tirar da plataforma, é possível, apesar que nunca fiz isso, você já exportou um projeto em produção? Conta aqui como foi. Além disso, você começa a se deparar com problemas diferentes, por exemplo, tinha uma tela que possuía um comportamento que com um simples “for” resolvia no código, mas no no-code foi um desafio… Print de uma call onde estávamos tentando resolver esse problema: 5. Vai haver quebras de paradigmas: Como em qualquer mudança, algumas pessoas poderão se sentir ameaçadas, com medo, ou resistentes. Você precisa encontrar pessoas dispostas a reaprender várias coisas, e a desbravar o novo. Não tivemos pessoas resistentes nesse projeto mencionado, mas já presenciei em outros ambientes pessoas que ainda acreditam que essas soluções não escalam e que não funcionam. Conclusão O uso de ferramentas low-code/no-code, como o WeWeb, tem nos ajudado significativamente a acelerar experimentações e o desenvolvimento de software. No entanto, nem tudo são flores: ao longo do caminho, tivemos que repensar diversos processos de DevOps, à medida que surgiam nuances específicas de se manter um software low-code em produção. O verdadeiro desafio de qualquer negócio está em entender profundamente as necessidades dos clientes e encontrar maneiras eficazes de aumentar o engajamento, o valor percebido, a aquisição e a retenção. Além disso, todo produto de software carrega um custo muitas vezes negligenciado: o custo de oportunidade. Esse custo representa o tempo e os recursos que decidimos investir em uma determinada iniciativa (tempo que poderia estar sendo direcionado a outras apostas potencialmente mais valiosas). Ao acelerar o desenvolvimento com low-code/no-code, conseguimos reduzir substancialmente esse custo, permitindo que o foco da equipe esteja onde realmente importa: gerar valor para o cliente, e não apenas escrever código.

A importância de uma boa documentação de Design System
Tech Writers Agosto 11, 2025

A importância de uma boa documentação de Design System

Um design system bem construído pode acelerar produtos. Mas é a documentação que faz ele funcionar de verdade. O que é um design system Um design system não é apenas uma biblioteca de componentes, mas sim um conjunto de componentes reutilizáveis, diretrizes e boas práticas que orientam a criação de interfaces digitais de forma consistente e escalável. Ele combina design, código, padrões de interação, escrita e princípios de marca em um repositório vivo e colaborativo, geralmente mantido por times de design, desenvolvimento e produto. A documentação deve explicar o "porquê", o "quando" e o "como" de cada elemento. Sem ela, o design system vira apenas uma biblioteca técnica, difícil de adotar, manter e escalar. O papel da documentação A documentação é a fundação que sustenta o design system como uma ferramenta estratégica. Ela conecta elementos visuais e funcionais ao seu contexto de uso real, evitando dúvidas, decisões isoladas e retrabalho entre as áreas. Mais do que um manual técnico, a documentação atua como uma fonte única de verdade (single source of truth) para todos os times envolvidos na construção de um produto digital. Designers, desenvolvedores e PMs encontram ali um ponto de referência confiável sobre padrões de interface, diretrizes de uso, regras de comportamento e justificativas por trás das decisões de design. Com isso, a comunicação entre áreas se torna mais clara, o onboarding de novos profissionais fica mais rápido, esforços duplicados são evitados e o alinhamento com a identidade da marca e os objetivos do produto é mantido com muito mais consistência. A documentação permite que decisões sejam tomadas com mais segurança, pois todos trabalham com base nas mesmas informações, sem achismos, ruídos ou interpretações divergentes. Em resumo, ela garante que o design system seja compreendido, aplicado e evoluído da forma correta, tornando-se uma base sólida para colaboração e escala. Benefícios para todos Não estamos falando apenas de boas práticas teóricas. Os resultados são concretos e comprovados por algumas das empresas mais inovadoras e influentes do mercado. Organizações como IBM, Shopify, Atlassian e Adobe, grandes referências globais, há tempos entenderam que a documentação de um design system não é um detalhe, mas sim um dos pilares para garantir eficiência, qualidade e escala no desenvolvimento de produtos digitais. Essas empresas, reconhecidas mundialmente por sua excelência em design e tecnologia, obtiveram ganhos mensuráveis ao estruturar bem a documentação dos seus sistemas. Entre os benefícios estão a aceleração no tempo de entrega, a redução de bugs e a eliminação de esforço duplicado. Um experimento conduzido pela Figma comparou dois times de design de produto: um utilizando a documentação de um design system e outro sem esse suporte. O resultado foi expressivo. A equipe com documentação conseguiu atingir seus objetivos 34% mais rápido. A principal razão foi a agilidade obtida ao evitar tarefas repetitivas, como recriar componentes do zero, procurar elementos em arquivos antigos ou tomar decisões recorrentes sobre espaçamentos, tamanhos e estilos tipográficos. Os participantes também relataram um aumento significativo na confiança ao longo do processo, destacando que a reutilização de componentes bem documentados contribui diretamente para a consistência com o produto final. Esses benefícios se estendem para outras áreas da empresa. Desenvolvedores ganham eficiência ao reutilizar elementos confiáveis, o que reduz retrabalho e falhas. Equipes de produto aproveitam esse ganho de produtividade para acelerar as entregas e diminuir o time-to-market. Para os usuários, tudo isso se traduz em uma experiência mais consistente, estável e confiável, com entregas frequentes de valor. Como referências, gostaria de mencionar dois exemplos de documentação que considero excelentes. O primeiro é o Padrão Digital do Governo, o design system do governo federal. Seu propósito é fascinante: oferecer a milhões de brasileiros uma experiência padronizada em todos os produtos e serviços digitais do governo — esteja o cidadão declarando o imposto de renda, consultando o FGTS ou acessando o título de eleitor. Segundo a própria documentação, o objetivo é claro: "oferecer uma experiência única ao cidadão que se relaciona com o governo para acessar produtos e serviços." Em poucos anos, já é possível perceber avanços significativos na experiência digital, como o login unificado gov.br, que pode ser utilizado inclusive em serviços estaduais e municipais. Outro bom exemplo é o design system da Conta Azul, que se destaca por ir além do convencional. Sua documentação inclui, além de componentes e padrões visuais, conteúdos aprofundados como guias de onboarding, redação e pesquisa, oferecendo uma base completa para todas as áreas envolvidas na construção do produto. Para quem busca mais referências nacionais, recomendo visitar o site designsystemsbrasileiros.com, uma curadoria colaborativa com diversos exemplos de design systems utilizados por empresas e instituições brasileiras. A plataforma reúne iniciativas públicas e privadas, oferecendo uma visão ampla sobre como diferentes organizações têm estruturado e documentado seus sistemas para promover consistência, escala e eficiência no desenvolvimento de produtos digitais. Conclusão Um design system bem documentado não é apenas uma ferramenta de design. Ele se torna um ativo estratégico da empresa. Ele conecta pessoas, define padrões, acelera entregas, aumenta a autonomia do time e reduz custos com retrabalho. Para desenvolvedores, a documentação facilita a implementação, reduz dúvidas e acelera o uso de componentes reutilizáveis, promovendo código mais limpo e consistente. Para os times de produto, ela aumenta a previsibilidade dos projetos, melhora a colaboração com design e engenharia e ajuda a reduzir o time-to-market. Já para os usuários, tudo isso se traduz em uma experiência mais estável, intuitiva e coerente em cada ponto de contato com o produto.

RFC 9745 e seu impacto na governança de APIs
Tech Writers Junho 10, 2025

RFC 9745 e seu impacto na governança de APIs

A Internet Engineering Task Force (IETF) - organização internacional aberta que desenvolve e promove padrões técnicos para a internet, como os protocolos TCP/IP, HTTP e DNS - acaba de lançar a RFC 9745, que define uma forma padronizada de se informar a depreciação de recursos no contexto do HTTP, o que é especialmente relevante para APIs baseadas neste protocolo. Em resumo, a partir de agora, servidores podem informar seus clientes sobre o status de depreciação de determinados recursos utilizando o cabeçalho de resposta Deprecation, cujo valor é uma data, no passado ou futuro, indicando que o recurso já foi ou ainda será depreciado. Adicionalmente, é possível utilizar o cabeçalho link para apontar uma documentação e, também, o Sunset, trazendo a data na qual o recurso se tornará indisponível. Neste artigo iremos avaliar a viabilidade de se aplicar este padrão no mundo real. Utilizando as melhores práticas no desenvolvimento de APIs, partiremos de arquivos de definição que seguem a OpenAPI Specification e terminaremos no API gateway KrakenD. Impactos Como dito, este novo padrão é especialmente importante para as web APIs, ou seja, para as APIs que aderem ao protocolo HTTP, como as famosas REST. Neste contexto, a RFC oferece meios de se levar as políticas de depreciação — outrora restritas à documentação ou ao design time — ao tempo de execução. Portanto, a novidade tem o potencial de seriamente mitigar as quebras de integração, possibilitando aos desenvolvedores realizarem as adaptações necessárias com uma antecedência confortável. Aliás, vale lembrar que estamos entrando na era da A.I. (com seus agentes, servidores MCP e etc.), o que só faz aumentar o impacto deste novo padrão, já que eles podem aprender e se adaptar sozinhos diante da sinalização de depreciação. No contexto de governança, a RFC também torna possível aos fornecedores de gateways de API (como Kong, Tyk, KrakenD, Traefik, APISix e etc.) considerarem o novo padrão durante os processos automatizados de deploy de APIs, sobretudo quando pensamos em APIOps baseado em OpenAPI specification. Vejamos. A especificação OpenAPI prevê a indicação de depreciação de operações através do campo deprecated. Com esta nova RFC, é simplesmente natural pensarmos em linkar as coisas, ou seja, fazer com que a indicação de depreciação presente nos arquivos de definição encontre correspondência na configuração dos gateways, que, uma vez em execução, passem a injetar o novo cabeçalho de resposta nas operações apropriadas. Esta melhoria levaria a governança ao próximo nível de qualidade! Provando o conceito Utilizaremos o arquivo de definição aderentes à OpenAPI Specification (OAS) para descrever nossa API, construiremos um parser em Go utilizando a libopenapi, contaremos com o KrakenD como API gateway e um HttpBin como backend. Todos os detalhes do projeto podem ser encontrados neste repositório. Então, vou destacar apenas os pontos principais: O arquivo de definição (openapi.yaml) paths: (...) /users/{userId}: (...) delete: (...) deprecated: true Observe que a operação de deleção de usuário conta com o campo padrão da OAS deprecated com o valor true. Bem, é fácil perceber que estamos diante de uma incompatibilidade de impedância quando tentamos fazer esse booleano interagir com os novos cabeçalhos previstos na RFC 9745, já que estes são muito mais ricos em informação do que aquele. Por razões como esta, a OAS possui extensões, que, no nosso caso, serão utilizadas para descrever as propriedades esperadas pela RFC da seguinte forma: paths: (...) /users/{userId}: (...) delete: (...) deprecated: true x-deprecated-at: "2025-06-30T23:59:59Z" x-deprecated-sunset: "2026-01-01T00:00:00Z" x-deprecated-link: https://api.example.com/deprecation-policy O Parser A função do parser é ler e interpretar o arquivo de definição openapi.yaml, extrair as informações relevantes para o gateway, e criar o arquivo operations.json, que será embarcado na imagem do KrakenD e consumido durante a sua inicialização, numa abordagem denominada configuração flexível. Este é o resultado do operations.json: { "list": [ { "path": "/users", "method": "get", "backend": { "path": "/users", "host": "http://backend:8888" } }, { "path": "/users", "method": "post", "backend": { "path": "/users", "host": "http://backend:8888" } }, { "path": "/users/{userId}", "method": "get", "backend": { "path": "/users/{userId}", "host": "http://backend:8888" } }, { "path": "/users/{userId}", "method": "delete", "deprecated": { "at": "@1751327999", "link": "https://api.example.com/deprecation-policy", "sunset": "Thu, 01 Jan 2026 00:00:00 UTC" }, "backend": { "path": "/users/{userId}", "host": "http://backend:8888" } } ] } Observe que o parser projetou os elementos estendidos da OAS no arquivo de configuração do KrakenD, inclusive fazendo as devidas conversões de valores, da seguinte forma: OAS KrakenD x-deprecated-at: deprecated.at: x-deprecated-link: deprecated.link: x-deprecated-sunset: deprecated.sunset: O plugin Agora que a configuração do gateway foi devidamente gerada a partir do arquivo de definição, nosso plugin personalizado entra em cena. A sua função é identificar as operações de API depreciadas e inserir os cabeçalhos da RFC 9745 com os valores adequados. Mais detalhes podem ser encontrados no repositório do artigo. Mas, uma vez que o plugin foi embarcado no KrakenD, temos os seguintes resultados: GET /users/1 DELETE /users/1 Observe que apenas a segunda operação estava depreciada (vide operations.json) e o gateway adicionou corretamente os cabeçalhos na resposta. Conclusões O experimento mostrou a viabilidade do conceito, ou seja, que é possível levar as políticas de depreciação para além da definição e documentação, sendo facilmente comunicadas em tempo de execução. Desta forma, os sistemas podem adotar ações automatizadas para comunicar a obsolescência aos interessados e reduzir significativamente as chances de falhas nas integrações. Embora as extensões da OpenAPI Specification tenham tornado isso possível diante da insuficiência do booleano deprecated, imagino que a OpenAPI Initiative deve incluir uma melhoria nas próximas versões. Sobretudo quando penso que Eric Wilde, co-autor desta RFC, é bem atuante no mundo das APIs. Aos leitores que chegaram até aqui, meu muito obrigado. Espero que estas poucas palavras lhes tenham acrescentado algo e feito o seu tempo valer a pena. Referências RFC 9745: https://www.rfc-editor.org/rfc/rfc9745 OpenAPI Specification: https://spec.openapis.org/oas/latest.html Incompatibilidade de Impedância: https://devblogs.microsoft.com/oldnewthing/20180123-00/?p=97865 Repositório: https://github.com/MichelFortes/articles-RFC9745 HttpBin: https://hub.docker.com/r/michelfortes/httpbin KrakenD – flexible configuration: https://www.krakend.io/docs/configuration/flexible-config PB33F - libopenapi: https://pb33f.io/libopenapi/

Embeddings: o que são e suas aplicações
Tech Writers Maio 27, 2025

Embeddings: o que são e suas aplicações

Sabemos que com o surgimento de diversas tecnologias, há um grande aumento do número de termos que ouvimos falar, embeddings é um deles, mas o que são?Embeddings, que em inglês significa "incorporar", é um termo utilizado em IA e Processamento de Linguagem Natural (PLN). Refere-se ao processo de "incorporar" ou "embutir" informações complexas (como palavras, frases ou documentos) em um espaço vetorial. Isso significa que dados que seriam difíceis de processar diretamente são transformados em uma forma numérica (vetores), que os modelos de Machine Learning podem entender e usar para tarefas como classificação e análise semântica. Quando combinados com bancos de dados vetoriais, possibilitam que sistemas analisem grandes volumes de dados não estruturados. Isso permite a extração de informações relevantes e consultas complexas de forma rápida e eficaz. Essa técnica de transformação de dados é essencial na construção de soluções escaláveis, pois a representação vetorial facilita a busca e recuperação de informações além de comprimir suas informações e ainda assim manter a relação com o seu conteúdo original. Como funciona Sabemos que Embeddings são vetores para entendimento de máquina baseados em textos, fases, documentos. Mas como transformamos essas informações em vetores?Os vetores são formados a partir da utilização de modelos de IA treinados para identificar contextos, classificando-os com base na aproximação do contexto em números, que normalmente variam de -1 a 1. O valor 1 indica a maior proximidade, com milhares de parâmetros de comparação. Esses modelos são geralmente treinados com grandes volumes de texto, identificando padrões de concorrência entre palavras que aparecem frequentemente em contextos semelhantes, como "gato" e "animal". Durante o treinamento, o modelo aprende a mapear essas palavras para vetores numéricos em um espaço multidimensional, de forma que palavras com significados relacionados ou contextos similares fiquem posicionadas mais próximas entre si nesse espaço vetorial. O objetivo é fazer com que palavras ou frases com significados semelhantes fiquem mais próximas no "espaço" dos vetores. Por exemplo, "gato" e "cachorro" devem ser representados por vetores próximos, enquanto "gato" e "carro" estarão mais distantes. Exemplo de embedding | Imagem: https://arize.com/blog-course/embeddings-meaning-examples-and-how-to-compute/ De que forma é calculada a semelhança entre dois vetores, comparando, por exemplo, um texto com diversos vetores do modelo treinado?Matematicamente se utiliza normalmente a técnica de similaridade por cosseno para realizar a comparação entre dois vetores A similaridade do cosseno fornece um valor no intervalo [-1,1], tendo 1 como o valor de contexto mais próximo e -1 o mais distante [1] Equação de similaridade por cosseno | Imagem: Wikipedia Dois vetores com 98% de similaridade com base no cosseno do ângulo entre os vetores | Imagem: Richmond Alake Embeddings, na prática Análise de PDF com QA (Question Answering): Embeddings são usados em sistemas de análise de documentos, como PDFs, para realizar tarefas de Pergunta e Resposta (QA). Empresas que lidam com grandes volumes de documentos, como contratos ou relatórios, podem utilizar embeddings para localizar automaticamente trechos relevantes em um texto. Por exemplo, ao analisar um contrato em PDF, os embeddings permitem mapear semanticamente o conteúdo e identificar passagens relacionadas a perguntas como "Qual é o prazo de validade deste contrato?" ou "Quais são as obrigações de pagamento do cliente?". Em seguida, um modelo de IA generativa pode utilizar esses trechos para interpretar o contexto e gerar respostas em linguagem natural com maior precisão. Recomendação de Produtos (E-commerce): Plataformas como Amazon e Netflix utilizam embeddings para recomendar produtos ou filmes baseados nas preferências e comportamentos passados dos usuários. Por exemplo, ao recomendar filmes, embeddings são usados para capturar o estilo, gênero e características dos filmes que o usuário assistiu, sugerindo novos conteúdos com base na similaridade vetorial. Análise de Sentimentos (Atendimento ao Cliente): Empresas utilizam embeddings para analisar sentimentos em feedbacks ou mensagens de clientes. Por exemplo, ao analisar um conjunto de comentários em redes sociais ou e-mails de clientes, embeddings ajudam a identificar automaticamente se o sentimento é positivo, negativo ou neutro, permitindo uma resposta rápida e apropriada. Conclusão Embeddings têm se mostrado uma ferramenta poderosa e crescente em diversas indústrias, transformando a forma como interagimos com dados não estruturados. Sua capacidade de representar informações complexas de maneira numérica tem levado a melhorias em sistemas de análise de documentos, recomendações e até no atendimento ao cliente. Sendo uma tecnologia em constante evolução, é esperado que, com o tempo, ela seja cada vez mais integrada em soluções inteligentes e escaláveis. Além disso, com a tendência de redução dos custos computacionais e o avanço das infraestruturas de processamento e armazenamento, torna-se cada vez mais viável escalar essas soluções com eficiência e baixo custo. Referências https://builtin.com/machine-learning/cosine-similarity#:~:text=Cosine%20similarity%20is%20a%20measurement,within%20an%20inner%20product%20space https://arize.com/blog-course/embeddings-meaning-examples-and-how-to-compute

Como o Karpenter otimizou a gestão da nossa infraestrutura EKS na AWS
Tech Writers Maio 13, 2025

Como o Karpenter otimizou a gestão da nossa infraestrutura EKS na AWS

Empresas enfrentam desafios diários na gestão de infraestrutura Kubernetes, especialmente para manter eficiência e reduzir custos. Aqui na Softplan, descobrimos uma solução que transforma a maneira de gerenciar nossos clusters EKS na AWS: o Karpenter. Desafios na gestão de instâncias Antes de falar de Karpenter é preciso dar alguns passos atrás e explicar um pouco do que se trata um auto escalonamento de nodes. Suponha que temos nosso cluster com algumas máquinas (instâncias) disponíveis executando nossos workloads. O que acontece se por acaso houver um pico de uso em nossas aplicações e seja necessário subir mais instâncias (réplicas) de nossos pods? Sem um autoscaling precisaríamos provisionar um node, orientá-lo a juntar-se ao nosso cluster para aí sim nossos pods estarem aptos a serem iniciados nessa nova instância. Lembrando que o provisionamento de uma instância não é instantâneo, há todo um bootstrapping da máquina, configurações de rede e muitas outras coisas antes dela ficar totalmente disponível. Certo, falamos sobre pico de usuários em nossas aplicações, mas e quando houver ociosidade? Queremos mesmo deixar esses nodes em pé com poder computacional subutilizado? Para resolver essa e outras questões, entra em cena o conceito de auto scalers. Auto Scalers As implementações de auto scalers são responsáveis basicamente pelo provisionamento e consolidação de nodes. Aqui estamos falando de escalonamento horizontal, ou seja, adicionando mais máquinas em nosso cluster. Há diversas implementações de node autoscaling, mas neste artigo o foco será na implementação da AWS e por que decidimos migrar para uma outra solução. Abaixo uma figura exemplificando o funcionamento do node autoscaling: Figura 01: autoscaling AWS - Auto Scaling Groups Ao definir um grupo de escalonamento na AWS precisamos definir diversas propriedades, como o número mínimo/máximo de instâncias de nodes permitidas para este grupo, recursos utilizados, tipo de disco, configurações de rede (subnets, etc) e muitos outros detalhes. Por exemplo, para um determinado tipo de aplicação que utilize mais CPU vamos configurar um grupo que contenha tipos de instância com mais CPU do que memória. No fim possivelmente teremos alguns grupos distintos para certos tipos de aplicações. Juntando as peças – Cluster Auto Scaler Para que meu cluster consiga “conversar” com meu cloud provider (neste exemplo AWS), precisamos de um componente chamado Cluster Auto Scaler, ou CAS.Este componente foi criado pela própria comunidade que mantém o Kubernetes, e está disponível aqui. Uma configuração padrão do CAS pode ser vista abaixo, utilizando o helm para instalação: nameOverride: cluster-autoscaler awsRegion: us-east-1 autoDiscovery: clusterName: meu-cluster image: repository: registry.k8s.io/autoscaling/cluster-autoscaler tag: v1.30.1 tolerations: - key: infra operator: Exists effect: NoSchedule nodeSelector: environment: "infra" rbac: create: true serviceAccount: name: cluster-autoscaler annotations: eks.amazonaws.com/role-arn: "role-aws" extraArgs: v: 1 stderrthreshold: info Com isso configurado e instalado e nossos autoscaling groups criados acabamos de habilitar o gerenciamento automático de nossos nodes! Por que decidimos migrar para o Karpenter Nosso caso de uso aqui na Projuris é o seguinte: temos um cluster de desenvolvimento e outro de produção. Depois da migração para o Gitlab SaaS tínhamos um desafio de como provisionar os runners para a execução de nossas pipelines. Ficou decidido que usaríamos o cluster de desenvolvimento para provisionamento desses runners. Na “primeira versão” optamos pelo cluster auto scaler por ser uma configuração mais simples e que já atendia nosso setup em produção. Mas aí começamos a enfrentar alguns problemas com esta escolha: Tempo de provisionamento: ao iniciar uma pipeline o tempo de provisionamento da máquina era um pouco lento. O grande ponto é que o cluster auto scaler paga um “pedágio” no cloud provider para provisionamento de um novo node. Dificuldade na configuração de grupos: como temos alguns “perfis” de pipeline essa gestão ficou um pouco complicada, porque para cada novo perfil um novo node group precisa ser criado. Custo: para mitigar o problema de lentidão no startup de um novo node tínhamos um perfil de máquina “online” que ficava o tempo todo de pé, mesmo sem executar nenhuma pipeline. O que é o Karpenter? É uma solução de cluster autoscaling criada pela AWS, que promete o provisionamento e consolidação de nodes sempre com o menor custo possível. Ele é inteligente o suficiente para saber que por exemplo, ao comprar uma máquina na AWS do tipo on-demand, dependendo da situação, é mais em conta do que se fosse uma máquina spot. E essa é apenas uma das características dessa ferramenta. O Karpenter também trabalha com a ideia de “grupos” de máquinas (que no mundo do Karpenter chamamos de NodePools), só que a diferença é que fazemos isso através de CRDs (custom resource definitions) do próprio Karpenter, ou seja, temos manifestos dentro de nosso cluster com todas essas configurações, eliminando a necessidade de qualquer node group criado na AWS. Exemplo de um NodePool no Karpenter: apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: karpenter-gitlab-runner-small-online spec: template: metadata: labels: workload: gitlab-runners environment: karpenter-nodes-gitlab-runner-build-small-online spec: requirements: - key: "karpenter.sh/capacity-type" operator: In values: ["spot", “on-demand”] - key: "node.kubernetes.io/instance-type" operator: In values: ["m5d.large", "m5n.large", "m6id.large", "m6in.large"] nodeClassRef: group: karpenter.k8s.aws kind: EC2NodeClass name: my-node-class taints: - key: "gitlab-runner-karpenter" value: "true" effect: NoSchedule expireAfter: Never disruption: consolidationPolicy: WhenEmpty consolidateAfter: 5m budgets: - nodes: "20%" limits: cpu: "500" memory: 500Gi Além do NodePool precisamos criar um NodeClass para definir detalhes específicos de instâncias AWS: apiVersion: karpenter.k8s.aws/v1 kind: EC2NodeClass metadata: name: my-node-class spec: amiFamily: AL2 role: "aws-role" tags: Name: nodes-k8s-nodes-gitlab-runner-small-online subnetSelectorTerms: - tags: karpenter.sh/subnet: "my-subnet" securityGroupSelectorTerms: - id: "sg-123" - id: "sg-456" - id: "sg-789" amiSelectorTerms: - id: "imagem ami" kubelet: clusterDNS: ["111.222.333.44"] blockDeviceMappings: - deviceName: /dev/xvda ebs: volumeSize: 40Gi volumeType: gp3 encrypted: true OBS: perceba que o nome “my-node-class” precisa bater com o node class configurado no node pool. Como o Karpenter nos ajudou a superar os desafios apresentados? Tempo de provisionamento: como o Karpenter conversa diretamente com as APIs do cloud provider não é necessário pagar o pedágio do cluster auto scaler. Tínhamos muitos problemas de timeout no provisionamento de novos nodes, após a troca pelo Karpenter esse problema simplesmente desapareceu justamente porque o provisionamento é mais eficiente. Dificuldade na configuração de grupos: com a solução de NodePools e NodeClass do Karpenter essa configuração ficou trivial, e o mais importante, versionada em nosso controle de versões no Gitlab. Ou seja, precisa incluir um perfil de máquina novo no NodePool? Sem problemas, basta um commit e o Karpenter já irá considerar isso nos novos provisionamentos. Custo: Conseguimos utilizar a utilização de máquinas, pois agora runners com características semelhantes são alocados em nodes que suportem os requisitos de memória e CPU exigidos. Ou seja, estamos realmente usando todo o poder computacional que aquele node proporciona. Isso vale também para a consolidação de nodes. Com o cluster auto scaler haviam scripts complexos para fazer o drain dos nodes antes da consolidação. Com o Karpenter isso é configurado no NodePool de maneira muito simplificada. Um ótimo argumento para a gestão que justifique o investimento nesse tipo de mudança é custo. Abaixo temos um comparativo do custo utilizando o Cluster AutoScaler e o Karpenter em Janeiro/25, onde conseguimos uma economia de 16% no total: Figura 02: Período de 01/01 à 15/01 com ClusterAutoScaler Figura 03: Período de 16/01 à 31/01 com o Karpenter Considerações finais A migração para o Karpenter foi uma escolha acertada. Conseguimos simplificar a gestão de nossos nodes com diferentes perfis de forma bastante simplificada. Ainda há espaço para algumas melhorias, como por exemplo a utilização de um único NodePool para simplificar ainda mais, e deixar que os runners configurem labels específicas para o perfil de máquina que deve ser provisionado para o runner (mais em https://kubernetes.io/docs/reference/labels-annotations-taints/). Referências Karpenter (doc oficial): https://karpenter.sh/ Node Auto Scaling (doc oficial k8s): https://kubernetes.io/docs/concepts/cluster-administration/node-autoscaling/