<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>performance Archives - Leonardo Nascimento | Engenheiro de Software</title>
	<atom:link href="https://leonardonascimento.dev/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>https://leonardonascimento.dev/tag/performance/</link>
	<description>Especializado em backend, APIs e sistemas escaláveis. Experiência em arquitetura de sistemas, integrações, mensageria, performance e aplicações de alta disponibilidade.</description>
	<lastBuildDate>Fri, 23 Jan 2026 20:50:36 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://leonardonascimento.dev/wp-content/uploads/2021/05/cropped-programming-32x32.png</url>
	<title>performance Archives - Leonardo Nascimento | Engenheiro de Software</title>
	<link>https://leonardonascimento.dev/tag/performance/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress não é amador. Amador é o uso que fazem dele.</title>
		<link>https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/</link>
					<comments>https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Sat, 24 Jan 2026 12:00:00 +0000</pubDate>
				<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[criar site wordpress]]></category>
		<category><![CDATA[drag and drop]]></category>
		<category><![CDATA[elementor]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[seo técnico]]></category>
		<category><![CDATA[wpbakery]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2338</guid>

					<description><![CDATA[<p>WordPress não é lento, frágil ou amador. Ele só ficou mal-falado porque virou refém de más decisões técnicas — principalmente do abuso de construtores visuais do tipo arrastar e soltar. Neste texto, faço uma crítica direta, sem romantização, sobre por que tantos sites WordPress são ruins e quem realmente é o culpado. Vamos começar com [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/">WordPress não é amador. Amador é o uso que fazem dele.</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://leonardonascimento.dev/blog/por-que-muitos-sites-estagnam-no-google-mesmo-publicando-com-frequencia/" type="post" id="2301" target="_blank" rel="noreferrer noopener">WordPress </a>não é lento, frágil ou amador. Ele só ficou mal-falado porque virou refém de más decisões técnicas — principalmente do abuso de construtores visuais do tipo <em>arrastar e soltar</em>. Neste texto, faço uma crítica direta, sem romantização, <a href="https://leonardonascimento.dev/categoria/wordpress/" target="_blank" rel="noreferrer noopener">sobre por que tantos sites WordPress são ruins</a> e quem realmente é o culpado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-vamos-comecar-com-o-obvio-que-ninguem-gosta-de-dizer">Vamos começar com o óbvio que ninguém gosta de dizer</h2>



<p>WordPress move <strong>uma fatia gigantesca da internet</strong>. Portais de notícias, sites institucionais, e-commerces, projetos governamentais e empresas milionárias usam WordPress em produção, com alto tráfego e performance.</p>



<p>Se o WordPress fosse o problema, <strong>esses sites simplesmente não existiriam</strong>.</p>



<p>O que existe, na prática, é outra coisa:<br><strong>WordPress virou terra sem lei técnica.</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-mito-wordpress-e-lento">O mito: “WordPress é lento”</h2>



<p>Não.<br><strong>Lento é o jeito que ele é montado.</strong></p>



<p>WordPress, por padrão:</p>



<ul class="wp-block-list">
<li>Renderiza HTML no servidor</li>



<li>Funciona muito bem com cache</li>



<li>Escala com Cloudflare, CDN e NGINX</li>



<li>Aguenta alto volume quando bem configurado</li>
</ul>



<p>O que deixa o site lento não é o core. É o ecossistema mal utilizado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-verdadeiro-vilao-o-arrastar-e-soltar">O verdadeiro vilão: o “arrastar e soltar”</h2>



<p>Construtores visuais como Elementor, WPBakery e similares <strong>não são ferramentas neutras</strong>. Eles impõem um modelo de desenvolvimento que cobra um preço alto — e quase sempre invisível para o cliente final.</p>



<h3 class="wp-block-heading" id="h-o-que-realmente-acontece-por-baixo-do-capo">O que realmente acontece por baixo do capô</h3>



<p>Um site feito com <em>drag and drop</em> geralmente entrega:</p>



<ul class="wp-block-list">
<li>HTML inflado, sem semântica</li>



<li>CSS duplicado, inline, desorganizado</li>



<li>JavaScript carregado em excesso</li>



<li>Dependência de dezenas de scripts globais</li>



<li>Layouts quebradiços fora do editor</li>
</ul>



<p>Tudo isso para resolver algo simples: <strong>posicionar bloco na tela</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-problema-nao-e-o-plugin-e-o-conceito">O problema não é o plugin. É o conceito.</h2>



<p>Construtores visuais vendem a ideia de “qualquer um pode criar um site”.<br>Tecnicamente, isso é verdade.<br>Profissionalmente, é um desastre.</p>



<p>Criar um site não é:</p>



<ul class="wp-block-list">
<li>Arrastar caixa</li>



<li>Escolher fonte</li>



<li>Mudar cor</li>
</ul>



<p>Criar um site é:</p>



<ul class="wp-block-list">
<li>Pensar estrutura</li>



<li>Performance</li>



<li>SEO</li>



<li>Manutenção</li>



<li>Evolução futura</li>
</ul>



<p>E nisso, <em>drag and drop</em> falha e falha muito.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-seo-sofre-e-muito">SEO sofre (e muito)</h2>



<p>Sites feitos com construtores visuais costumam ter:</p>



<ul class="wp-block-list">
<li>Hierarquia de headings quebrada</li>



<li>Conteúdo diluído em divs sem sentido</li>



<li>HTML difícil de interpretar para crawlers</li>



<li>Tempo de carregamento alto no mobile</li>
</ul>



<p>Depois, o cliente culpa:</p>



<ul class="wp-block-list">
<li>O Google</li>



<li>O WordPress</li>



<li>O servidor</li>



<li>O SEO</li>
</ul>



<p>Quando, na verdade, o problema nasceu no layout.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-manutencao-vira-um-inferno-silencioso">Manutenção vira um inferno silencioso</h2>



<p>Todo site precisa evoluir.<br>E é aqui que o <em>arrastar e soltar</em> cobra a conta.</p>



<ul class="wp-block-list">
<li>Atualização quebra layout</li>



<li>Plugin vira dependência crítica</li>



<li>Migrar tema vira pesadelo</li>



<li>Refatorar é praticamente impossível</li>
</ul>



<p>O site funciona… até o dia que não funciona mais.</p>



<p>E quando dá problema, ninguém quer mexer.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-mas-e-mais-rapido-desenvolver">“Mas é mais rápido desenvolver”</h2>



<p>É mais rápido <strong>entregar</strong>.<br>Não é mais rápido <strong>manter</strong>.</p>



<p>Construtores visuais economizam horas no início e <strong>custam meses no futuro</strong>.<br>É dívida técnica disfarçada de produtividade.</p>



<p>A culpa também acaba sendo do cliente, que pretende lançar seu negócio em 1 semana e acha um &#8216;programador wordpress&#8217; que entrega o projeto em 3 dias por menos de R$ 500 (História real)</p>



<p>Cansei de refazer sites em WordPress que foram utilizados &#8216;arrastar e soltar&#8217;, quando falo para o cliente que não da para aproveitar nada, ele ainda fica bravo comigo.</p>



<p>Na verdade não deveria estar fazendo essa crítica, poque é muito bom refazer esses sites, você refaz o tema, olha o banco de dados e tem lá mais de 245 tabelas para um portal de notícias regional ou até mesmo institucional (Mais uma história real), com certeza não saiu por R$ 500</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-wordpress-bem-feito-e-outra-historia">WordPress bem feito é outra história</h2>



<p>Quando WordPress é usado como deve ser:</p>



<ul class="wp-block-list">
<li>Tema enxuto</li>



<li>PHP bem estruturado</li>



<li>HTML semântico</li>



<li>CSS organizado</li>



<li>JS apenas quando necessário</li>



<li>Cache correto</li>



<li>Integração com CDN</li>
</ul>



<p>O resultado é:</p>



<ul class="wp-block-list">
<li>Site rápido</li>



<li>SEO limpo</li>



<li>Fácil de manter</li>



<li>Fácil de evoluir</li>



<li>Profissional</li>
</ul>



<p>Isso não aparece em tutorial de “site em 30 minutos”.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-mercado-criou-o-problema-e-culpa-a-ferramenta">O mercado criou o problema — e culpa a ferramenta</h2>



<p>O que estragou a reputação do WordPress não foi o WordPress.</p>



<p>Foi:</p>



<ul class="wp-block-list">
<li>Freelancer sem base técnica</li>



<li>Agência vendendo atalho</li>



<li>Cliente buscando preço, não solução</li>



<li>Cultura do “funciona, então tá bom”</li>
</ul>



<p>O <em>arrastar e soltar</em> só acelerou esse processo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-wordpress-nao-e-amador-o-uso-dele-que-e">WordPress não é amador — o uso dele que é</h2>



<p>WordPress é uma ferramenta poderosa.<br>Mas ferramenta boa <strong>na mão errada vira problema</strong>.</p>



<p>Se você quer:</p>



<ul class="wp-block-list">
<li>Performance</li>



<li>SEO</li>



<li>Escalabilidade</li>



<li>Longevidade</li>
</ul>



<p>Então pare de tratar WordPress como brinquedo visual.</p>



<p>Porque no fim, não é o CMS que define a qualidade do site.<br>É <strong>quem está por trás das decisões técnicas</strong>.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/">WordPress não é amador. Amador é o uso que fazem dele.</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Erros comuns ao usar Redis em aplicações Laravel</title>
		<link>https://leonardonascimento.dev/blog/erros-comuns-ao-usar-redis-em-aplicacoes-laravel/</link>
					<comments>https://leonardonascimento.dev/blog/erros-comuns-ao-usar-redis-em-aplicacoes-laravel/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Sun, 11 Jan 2026 10:47:00 +0000</pubDate>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[concorrência]]></category>
		<category><![CDATA[laravel]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[produção]]></category>
		<category><![CDATA[redis]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2282</guid>

					<description><![CDATA[<p>Redis costuma entrar no projeto como sinônimo de performance. E, de fato, quando bem usado, ele resolve muita coisa. O problema é que em aplicações Laravel — principalmente quando começam a crescer — Redis também vira fonte de bugs difíceis, inconsistências e comportamentos estranhos quando é usado sem critério. A maioria desses problemas não vem [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/erros-comuns-ao-usar-redis-em-aplicacoes-laravel/">Erros comuns ao usar Redis em aplicações Laravel</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Redis costuma entrar no projeto como sinônimo de <a href="https://leonardonascimento.dev/tag/performance/" type="post_tag" id="209">performance</a>. E, de fato, quando bem usado, ele resolve muita coisa. O problema é que em aplicações Laravel — principalmente quando começam a crescer — Redis também vira fonte de bugs difíceis, inconsistências e comportamentos estranhos quando é usado sem critério.</p>



<p>A maioria desses problemas não vem do Redis em si, mas da forma como ele é integrado à aplicação. A seguir estão erros que aparecem com frequência em produção e o que aprender com eles.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Um dos erros mais comuns é <strong>tratar Redis como banco de dados principal</strong>. Redis é rápido, mas não é fonte de verdade. Dados em memória podem ser perdidos por restart, eviction ou falha de infraestrutura. Quando o sistema depende do Redis para manter estado crítico, qualquer limpeza vira incidente. Em aplicações maduras, Redis é sempre camada auxiliar; o banco relacional continua sendo a referência.</p>



<p>Outro problema recorrente é <strong><a href="https://leonardonascimento.dev/blog/quando-usar-cache-e-quando-ele-so-complica-o-sistema/" type="post" id="2251">cachear dados sem estratégia clara de invalidação</a></strong>. No começo, tudo parece funcionar: menos queries, respostas mais rápidas. Com o tempo, começam a aparecer dados desatualizados, comportamentos inconsistentes e bugs que “somem sozinhos”. Cache sem invalidação bem definida vira dívida técnica. Toda entrada em cache precisa ter resposta clara para três perguntas: quando expira, quem invalida e o que acontece se falhar.</p>



<p>Também é comum <strong>usar TTL genérico para tudo</strong>. Definir o mesmo tempo de expiração para dados completamente diferentes ignora o contexto. Dados quase estáticos podem ficar horas em cache; dados sensíveis a mudanças podem precisar de expiração curta ou invalidação ativa. TTL não é detalhe de configuração, é parte da regra de negócio.</p>



<p>Em projetos com filas e jobs, aparece bastante o erro de <strong>usar Redis sem pensar em concorrência</strong>. Dois workers acessando e alterando a mesma chave ao mesmo tempo geram condição de corrida. Incrementos, flags e estados intermediários precisam ser atômicos ou protegidos por lock. Ignorar isso funciona em teste, mas quebra sob carga.</p>



<p>Outro ponto crítico é <strong>usar Redis como solução para idempotência sem persistência complementar</strong>. Locks e flags em Redis ajudam, mas não garantem segurança total. Se o Redis reiniciar, o controle some. Para efeitos colaterais críticos (pagamento, notificação, integração externa), o controle final precisa estar no banco, com constraint ou registro explícito de processamento.</p>



<p>Muitos projetos também caem no erro de <strong>não separar namespaces ou prefixos de chave</strong>. Em aplicações maiores, isso gera colisão, dificuldade de debug e limpeza perigosa. Padronizar prefixos por domínio ou tipo de dado facilita manutenção e evita apagar cache errado.</p>



<p>Há ainda o uso excessivo de Redis para <strong>resolver problemas que não são de cache</strong>. Guardar lógica de negócio, estados complexos ou fluxos longos em memória costuma deixar o sistema frágil. Redis é ótimo para acelerar acesso, coordenar concorrência e compartilhar estado temporário, mas não substitui modelagem correta.</p>



<p>Outro erro que só aparece em produção é <strong>ignorar política de eviction e limites de memória</strong>. Quando a memória acaba, o Redis começa a remover chaves de acordo com a política configurada. Se isso não foi considerado no design, o sistema passa a perder cache crítico aleatoriamente, causando degradação inesperada. Monitorar uso de memória e entender eviction é obrigatório.</p>



<p>Também é comum <strong>não monitorar Redis como dependência crítica</strong>. Quando ele fica lento ou indisponível, a aplicação sofre. Sem métricas, alertas e logs específicos, o diagnóstico demora. Redis precisa estar no radar de observabilidade tanto quanto banco e API externa.</p>



<p>Por fim, um erro sutil: <strong>acoplar demais o código ao Redis</strong>. Quando a aplicação assume que Redis sempre está disponível, qualquer fallback vira difícil. Código mais saudável trata Redis como otimização opcional: se falhar, o sistema continua funcionando, mesmo que mais lento.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Redis é uma ferramenta poderosa, mas exige disciplina. <a href="https://leonardonascimento.dev/categoria/laravel/" type="category" id="44">Em aplicações Laravel</a>, ele deve acelerar, proteger e coordenar — nunca sustentar a lógica principal do sistema. Quando tratado como camada auxiliar, com invalidação clara, controle de concorrência e observabilidade, ele entrega o que promete. Quando usado como atalho, cobra o preço em produção.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/erros-comuns-ao-usar-redis-em-aplicacoes-laravel/">Erros comuns ao usar Redis em aplicações Laravel</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/erros-comuns-ao-usar-redis-em-aplicacoes-laravel/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Na minha máquina funciona. Vamos levar sua máquina para o usuário então</title>
		<link>https://leonardonascimento.dev/blog/na-minha-maquina-funciona-vamos-levar-sua-maquina-para-o-usuario-entao/</link>
					<comments>https://leonardonascimento.dev/blog/na-minha-maquina-funciona-vamos-levar-sua-maquina-para-o-usuario-entao/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Sat, 10 Jan 2026 21:35:00 +0000</pubDate>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Produção]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ambiente de produção]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[produção]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2277</guid>

					<description><![CDATA[<p>Todo desenvolvedor já disse ou ouviu essa frase: “Na minha máquina funciona”. Em ambiente local, com poucos dados, sem concorrência real e sem dependências instáveis, quase tudo funciona. O problema é que produção não tem nada a ver com o seu computador. Quando alguém usa “funciona local” como argumento técnico, geralmente está ignorando o contexto [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/na-minha-maquina-funciona-vamos-levar-sua-maquina-para-o-usuario-entao/">Na minha máquina funciona. Vamos levar sua máquina para o usuário então</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Todo desenvolvedor já disse ou ouviu essa frase: <em>“Na minha máquina funciona”</em>. Em ambiente local, com poucos dados, sem concorrência real e sem dependências instáveis, quase tudo funciona. O problema é que <strong>produção não tem nada a ver com o seu computador</strong>.</p>



<p>Quando alguém usa “funciona local” como argumento técnico, geralmente está ignorando o contexto em que o sistema realmente vai operar. E é exatamente aí que os problemas começam.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Em local, você tem controle total. O banco está limpo, a latência é praticamente zero, não existem requisições concorrentes, não há retries, não há jobs acumulados, não há serviços externos oscilando. Você executa uma ação, olha o resultado e segue em frente. É um ambiente artificialmente perfeito.</p>



<p>Produção é o oposto disso.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>A primeira diferença aparece com <strong>concorrência</strong>. Localmente, você clica uma vez. Em produção, dezenas ou centenas de usuários fazem a mesma ação ao mesmo tempo. Jobs rodam em paralelo. Requests competem por recursos. Código que nunca apresentou problema começa a gerar condição de corrida, duplicidade de execução e dados inconsistentes. Nada disso aparece no teste local simples.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Outra diferença crítica é <strong>latência</strong>. Em local, chamadas HTTP e queries são praticamente instantâneas. Em produção, uma API externa pode demorar segundos para responder, ou responder de forma intermitente. Um banco pode ficar lento sob carga. Um cache pode expirar no pior momento. Código que assume resposta imediata funciona local, mas degrada ou trava em produção.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Existe também a questão do <strong>volume de dados</strong>. Local costuma ter poucos registros. Produção tem milhares ou milhões. Queries que pareciam inofensivas passam a consumir tempo e recursos. Loops simples viram gargalo. Processamentos que eram aceitáveis começam a estourar timeout. O problema não é o código “errado”, é o código <strong>não preparado para escala</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Dependências externas são outro ponto ignorado em ambiente local. Muitas vezes você testa com mock, sandbox ou serviço estável. Em produção, serviços externos falham, ficam lentos ou retornam dados inesperados. Se o sistema não foi desenhado para lidar com isso, o erro externo vira indisponibilidade interna.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Local também não expõe problemas de <strong>observabilidade</strong>. Em produção, quando algo dá errado, você precisa responder rápido: o que aconteceu, quando, com qual dado, em qual fluxo. Código que “funciona local” mas não gera logs úteis transforma qualquer incidente em uma investigação longa e cara.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Outro ponto comum é <strong>configuração e ambiente</strong>. Local costuma ter permissões amplas, cache limpo, variáveis simples. Produção tem múltiplos ambientes, secrets, variáveis diferentes, limites de recurso e regras de segurança. Código que assume configuração fixa funciona local e quebra fora dele.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Existe ainda o fator <strong>tempo</strong>. Local você testa agora. Produção roda por semanas ou meses. Vazamentos de memória, acúmulo de jobs, crescimento de filas e degradação progressiva só aparecem com o tempo. “Funciona local” raramente considera isso.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Nada disso significa que testar local não importa. Significa que <strong>teste local valida comportamento</strong>, não valida operação. Ele é necessário, mas está longe de ser suficiente.</p>



<p>Código pronto para produção é aquele que:</p>



<ul class="wp-block-list">
<li>lida bem com concorrência</li>



<li>assume latência e falha</li>



<li>escala com dados reais</li>



<li>é observável</li>



<li>se comporta de forma previsível sob estresse</li>
</ul>



<p>Sem isso, o “funciona local” vira apenas uma falsa sensação de segurança.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>“Funciona local” não é critério de qualidade. É apenas o primeiro degrau. Produção cobra decisões que local nunca vai cobrar: resiliência, previsibilidade e responsabilidade técnica.</p>



<p>Quando alguém entende isso, muda a forma de escrever código. Quando não entende, continua apagando incêndio e se perguntando por que algo que “funcionava perfeitamente” começou a falhar sem explicação.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/na-minha-maquina-funciona-vamos-levar-sua-maquina-para-o-usuario-entao/">Na minha máquina funciona. Vamos levar sua máquina para o usuário então</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/na-minha-maquina-funciona-vamos-levar-sua-maquina-para-o-usuario-entao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Quando usar cache (e quando ele só complica o sistema)</title>
		<link>https://leonardonascimento.dev/blog/quando-usar-cache-e-quando-ele-so-complica-o-sistema/</link>
					<comments>https://leonardonascimento.dev/blog/quando-usar-cache-e-quando-ele-so-complica-o-sistema/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Sat, 03 Jan 2026 16:47:00 +0000</pubDate>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[arquitetura de software]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[performance]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2251</guid>

					<description><![CDATA[<p>Cache costuma entrar na conversa sempre que alguém fala em performance. A ideia é simples: “se está lento, coloca cache”. O problema é que, na prática, cache mal aplicado resolve um problema e cria outros. Não é raro ver sistemas que até funcionam bem sem cache, mas ficam difíceis de manter depois que ele entra [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/quando-usar-cache-e-quando-ele-so-complica-o-sistema/">Quando usar cache (e quando ele só complica o sistema)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cache costuma entrar na conversa sempre que alguém fala em performance. A ideia é simples: “se está lento, coloca cache”. O problema é que, na prática, cache mal aplicado resolve um problema e cria outros.</p>



<p>Não é raro ver sistemas que até funcionam bem sem cache, mas ficam difíceis de manter depois que ele entra sem critério.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Cache não é ponto de partida</h2>



<p>Antes de pensar em cache, vale responder uma pergunta básica:<br><strong>onde o sistema está lento?</strong></p>



<p>Muitas vezes o problema não é falta de cache, mas:</p>



<ul class="wp-block-list">
<li>query mal escrita;</li>



<li>lógica duplicada;</li>



<li>processamento desnecessário;</li>



<li>excesso de chamadas externas.</li>
</ul>



<p>Colocar cache sem entender o gargalo real só esconde o problema por um tempo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Quando cache realmente faz sentido</h2>



<p>Cache funciona bem quando você tem:</p>



<ul class="wp-block-list">
<li>dados lidos muitas vezes;</li>



<li>dados que mudam pouco;</li>



<li>custo alto de processamento ou consulta.</li>
</ul>



<p>Configurações, listas estáticas, resultados agregados e respostas de APIs externas são bons candidatos. Nesse cenário, o cache reduz carga e melhora tempo de resposta de forma consistente.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">O problema começa na invalidação</h2>



<p>Cache quase nunca dá problema na criação. Ele dá problema na invalidação.</p>



<p>Quando não fica claro:</p>



<ul class="wp-block-list">
<li>quando o cache expira;</li>



<li>quem invalida;</li>



<li>o que acontece se falhar;</li>
</ul>



<p>o sistema começa a servir dado errado. E dado errado em produção costuma ser pior que erro explícito.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Cache que vira dependência</h2>



<p>Um sinal claro de problema é quando o sistema <strong>depende</strong> do cache para funcionar corretamente.</p>



<p>Se desligar o cache quebra tudo, isso indica que:</p>



<ul class="wp-block-list">
<li>a lógica base não está saudável;</li>



<li>o cache está mascarando problemas estruturais;</li>



<li>o código ficou acoplado demais a essa camada.</li>
</ul>



<p>Cache deveria acelerar, não sustentar o sistema.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Cuidado com cache em dados muito voláteis</h2>



<p>Cache em dados que mudam o tempo todo geralmente gera:</p>



<ul class="wp-block-list">
<li>inconsistência;</li>



<li>comportamento estranho;</li>



<li>bugs intermitentes.</li>
</ul>



<p>Quanto mais volátil o dado, maior o custo mental e técnico para manter o cache correto. Em muitos casos, o ganho de performance não compensa a complexidade introduzida.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Cache também tem custo</h2>



<p>Cache não é gratuito.</p>



<p>Ele consome memória, adiciona mais uma camada ao sistema e aumenta a complexidade de debug. Quando algo dá errado, você precisa verificar:</p>



<ul class="wp-block-list">
<li>código;</li>



<li>banco;</li>



<li>cache;</li>



<li>estratégia de expiração.</li>
</ul>



<p>Cada camada extra aumenta o esforço para entender o que está acontecendo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Uma regra simples que ajuda</h2>



<p>Uma regra prática que costuma funcionar bem:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Primeiro, faça o sistema funcionar corretamente sem cache.<br>Depois, use cache para otimizar pontos específicos e bem entendidos.</p>
</blockquote>



<p>Isso evita decisões precipitadas e mantém o sistema mais previsível.</p>



<h2 class="wp-block-heading">Bancos de cache, CDN e cache em borda: onde cada um faz sentido</h2>



<p>Quando se fala em cache, muita gente mistura tudo como se fosse a mesma coisa. Na prática, existem <strong>camadas diferentes de cache</strong>, cada uma com um papel específico. Entender isso evita decisões erradas e expectativas irreais.</p>



<h2 class="wp-block-heading">Cache em memória (Redis, Memcached)</h2>



<p>Bancos de cache em memória, como Redis, são muito usados no backend porque são rápidos e flexíveis. Eles fazem sentido quando você precisa:</p>



<ul class="wp-block-list">
<li>reduzir acesso ao banco de dados;</li>



<li>compartilhar cache entre múltiplos processos;</li>



<li>armazenar dados temporários com expiração controlada;</li>



<li>lidar com alta concorrência.</li>
</ul>



<p>Redis funciona muito bem para:</p>



<ul class="wp-block-list">
<li>resultados de queries pesadas;</li>



<li>locks e controle de concorrência;</li>



<li>sessões;</li>



<li>dados derivados de outras fontes.</li>
</ul>



<p>O erro comum aqui é transformar o Redis em “banco principal”. Cache não é fonte de verdade. Se os dados do Redis forem perdidos, o sistema precisa continuar funcionando.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Cache de aplicação ≠ cache de infraestrutura</h2>



<p>Cache dentro da aplicação resolve problemas diferentes de cache na borda.</p>



<p>Cache de aplicação (Redis, cache local, etc):</p>



<ul class="wp-block-list">
<li>reduz custo de processamento;</li>



<li>protege banco e serviços internos;</li>



<li>atua no backend.</li>
</ul>



<p>Já cache de infraestrutura atua <strong>antes</strong> da requisição chegar no servidor.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">CDN e cache em borda</h2>



<p>CDN (Content Delivery Network) e cache em borda são ideais para:</p>



<ul class="wp-block-list">
<li>conteúdo estático;</li>



<li>respostas públicas;</li>



<li>páginas que não mudam com frequência.</li>
</ul>



<p>Nesse cenário, o cache:</p>



<ul class="wp-block-list">
<li>reduz latência;</li>



<li>diminui carga no servidor;</li>



<li>melhora experiência do usuário.</li>
</ul>



<p>Cloudflare, por exemplo, atua nesse nível, servindo conteúdo direto da borda sem que a requisição chegue no backend.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Cloudflare não substitui cache de backend</h2>



<p>Um erro comum é achar que, usando Cloudflare ou outra CDN, não é mais necessário cache no backend. Isso não é verdade.</p>



<p>Cloudflare:</p>



<ul class="wp-block-list">
<li>ajuda muito com páginas públicas;</li>



<li>protege contra picos de acesso;</li>



<li>reduz tráfego direto no servidor.</li>
</ul>



<p>Mas ele não resolve:</p>



<ul class="wp-block-list">
<li>lógica pesada no backend;</li>



<li>chamadas internas;</li>



<li>processamento de regras de negócio;</li>



<li>APIs autenticadas.</li>
</ul>



<p>As camadas se complementam, não se substituem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Combinar camadas de cache com consciência</h2>



<p>Em sistemas mais maduros, é comum ter:</p>



<ul class="wp-block-list">
<li>cache em Redis no backend;</li>



<li>cache HTTP para respostas públicas;</li>



<li>CDN para conteúdo estático;</li>



<li>regras claras de expiração e invalidação.</li>
</ul>



<p>O ponto crítico é não perder controle. Quanto mais camadas, maior a necessidade de saber:</p>



<ul class="wp-block-list">
<li>onde o dado está sendo cacheado;</li>



<li>por quanto tempo;</li>



<li>quem invalida.</li>
</ul>



<p>Sem isso, debug vira loteria.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Cache certo no lugar certo</h2>



<p>Não existe “o melhor cache”. Existe cache adequado ao problema.</p>



<p>Usar Redis para tudo, Cloudflare para tudo ou cachear tudo geralmente leva a soluções frágeis. Cada camada resolve um tipo de problema específico, e ignorar isso gera sistemas difíceis de operar.</p>



<h2 class="wp-block-heading">Um exemplo prático de cache bem aplicado em alto volume</h2>



<p>Em um projeto onde trabalhei, o sistema recebia mais de <strong>30 milhões de visualizações por mês</strong>. O volume era alto, os picos eram imprevisíveis e qualquer erro de arquitetura aparecia rápido.</p>



<p>A solução não foi um único tipo de cache, mas a <strong>combinação correta de camadas</strong>, cada uma resolvendo um problema específico.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Cache no backend</h3>



<p>No backend, utilizávamos cache em memória para reduzir acesso ao banco e evitar processamento repetido. Consultas mais pesadas e dados derivados eram armazenados com tempo de vida bem definido.</p>



<p>Esse cache não era tratado como fonte de verdade. Se fosse limpo ou reiniciado, o sistema continuava funcionando normalmente, apenas com impacto temporário de performance.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Cache no servidor web</h3>



<p>No nível do servidor web, respostas públicas eram cacheadas diretamente, evitando que requisições idênticas chegassem até a aplicação.</p>



<p>Isso reduzia drasticamente:</p>



<ul class="wp-block-list">
<li>consumo de CPU;</li>



<li>execução de código desnecessário;</li>



<li>abertura de conexões com o backend.</li>
</ul>



<p>Para grande parte do tráfego, a aplicação nem chegava a ser executada.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Cache em servidor de borda</h3>



<p>Além disso, havia cache em servidores distribuídos geograficamente, entregando conteúdo diretamente próximo ao usuário final.</p>



<p>Essa camada absorvia picos de acesso e reduzia latência, principalmente em horários de maior tráfego. Em muitos casos, a requisição nem chegava ao servidor de origem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">O ponto mais importante: controle</h3>



<p>O que fez essa estratégia funcionar não foi o volume de cache, mas o <strong>controle sobre ele</strong>.</p>



<p>Cada camada tinha:</p>



<ul class="wp-block-list">
<li>regras claras de expiração;</li>



<li>critérios bem definidos de cache e bypass;</li>



<li>invalidação consciente quando o conteúdo mudava.</li>
</ul>



<p>Nada era “cacheado por padrão”.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">O resultado prático</h3>



<p>Com essa abordagem:</p>



<ul class="wp-block-list">
<li>o sistema se manteve estável mesmo em picos;</li>



<li>o backend ficou protegido;</li>



<li>o banco deixou de ser gargalo;</li>



<li>a operação ficou previsível.</li>
</ul>



<p>Cache não foi usado como remendo, mas como parte da arquitetura.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Lição aprendida</h3>



<p>Cache funciona quando é pensado como <strong>estratégia</strong>, não como solução emergencial. Em sistemas de alto volume, separar responsabilidades entre backend, servidor web e borda faz toda a diferença.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Conclusão</h2>



<p>Cache é uma ferramenta poderosa, mas perigosa quando usada sem critério. Ele melhora performance quando aplicado com consciência, e cria problemas quando entra apenas como “solução rápida”.</p>



<p>Entender quando <strong>não usar cache</strong> é tão importante quanto saber usá-lo.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/quando-usar-cache-e-quando-ele-so-complica-o-sistema/">Quando usar cache (e quando ele só complica o sistema)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/quando-usar-cache-e-quando-ele-so-complica-o-sistema/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Código em produção: você tem certeza de que ele está pronto?</title>
		<link>https://leonardonascimento.dev/blog/codigo-em-producao-voce-tem-certeza-de-que-ele-esta-pronto/</link>
					<comments>https://leonardonascimento.dev/blog/codigo-em-producao-voce-tem-certeza-de-que-ele-esta-pronto/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Thu, 01 Jan 2026 15:45:00 +0000</pubDate>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[arquitetura de software]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[manutenibilidade]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[produção]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2245</guid>

					<description><![CDATA[<p>Na minha máquina funciona, isso é o suficiente? Muita gente confunde código que simplesmente funciona com código que está realmente pronto para rodar em produção. A diferença entre um e outro costuma aparecer no pior momento possível: em pico de acesso, durante uma campanha, com cliente reclamando ou com o sistema fora do ar. Funcionar [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/codigo-em-producao-voce-tem-certeza-de-que-ele-esta-pronto/">Código em produção: você tem certeza de que ele está pronto?</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Na minha máquina funciona, isso é o suficiente?</p>



<p>Muita gente confunde código que simplesmente funciona com código que está realmente pronto para rodar em produção. A diferença entre um e outro costuma aparecer no pior momento possível: em pico de acesso, durante uma campanha, com cliente reclamando ou com o sistema fora do ar.</p>



<p>Funcionar significa que o código faz o que foi pedido.<br>Código pronto para produção significa que ele continua funcionando <strong>quando tudo começa a dar errado</strong>.</p>



<p>Na prática, código pronto para produção:</p>



<ul class="wp-block-list">
<li>lida com erros de forma previsível;</li>



<li>escala quando a carga aumenta;</li>



<li>se comporta bem sob concorrência;</li>



<li>é observável;</li>



<li>pode ser mantido sem medo;</li>



<li>não depende de sorte.</li>
</ul>



<p></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1) Tratamento de erros</h2>



<p>Produção é um ambiente imprevisível. APIs externas caem. Banco fica lento. Cache expira. Timeouts acontecem.</p>



<p>Se o seu código assume que tudo sempre vai responder corretamente, ele vai quebrar — e rápido.</p>



<p>Código de produção:</p>



<ul class="wp-block-list">
<li>trata exceções;</li>



<li>captura falhas externas;</li>



<li>retorna erros claros;</li>



<li>evita estados quebrados.</li>
</ul>



<p>Ignorar erros não faz eles desaparecerem. Só faz você descobri-los tarde demais.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2) Concorrência</h2>



<p>Concorrência é real. E não é opcional.</p>



<p>Vários usuários, múltiplos processos, jobs rodando ao mesmo tempo, filas sendo consumidas em paralelo. Se o sistema não foi pensado para isso, os problemas aparecem como:</p>



<ul class="wp-block-list">
<li>condições de corrida;</li>



<li>duplicidade de processamento;</li>



<li>registros inconsistentes;</li>



<li>dados sobrescritos.</li>
</ul>



<p>Código que funciona com um usuário não necessariamente funciona com cem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3) Idempotência</h2>



<p>Esse ponto é ignorado por muita gente.</p>



<p>Em produção, requisições podem ser reenviadas, jobs podem ser reprocessados, webhooks podem disparar mais de uma vez. Se sua lógica não for idempotente, você terá:</p>



<ul class="wp-block-list">
<li>registros duplicados;</li>



<li>ações executadas mais de uma vez;</li>



<li>efeitos colaterais difíceis de desfazer.</li>
</ul>



<p>Código de produção precisa assumir que <strong>a mesma ação pode chegar mais de uma vez</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4) Observabilidade</h2>



<p>Sem logs estruturados, métricas e alertas, você não tem controle — só reação.</p>



<p>Quando algo quebra e você depende de usuário reclamando para descobrir, o problema já escalou.</p>



<p>Código pronto para produção:</p>



<ul class="wp-block-list">
<li>registra eventos relevantes;</li>



<li>gera logs que ajudam a investigar;</li>



<li>permite entender o que aconteceu sem “chutar”.</li>
</ul>



<p>Debug em produção não pode ser baseado em achismo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5) Performance previsível</h2>



<p>Performance não é só velocidade. É previsibilidade.</p>



<p>Um endpoint que responde em 50ms hoje e em 5s amanhã é um problema, mesmo que “funcione”.</p>



<p>Código de produção:</p>



<ul class="wp-block-list">
<li>evita queries desnecessárias;</li>



<li>não faz processamento pesado sem controle;</li>



<li>considera impacto de volume e concorrência.</li>
</ul>



<p>O objetivo não é ser rápido no melhor cenário, mas <strong>estável no pior</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6) Isolamento de responsabilidades</h2>



<p>Misturar regra de negócio, acesso a dados e controle de requisição cria código frágil.</p>



<p>Quando tudo está acoplado:</p>



<ul class="wp-block-list">
<li>mudanças pequenas viram grandes refatorações;</li>



<li>bugs aparecem em lugares inesperados;</li>



<li>testes se tornam difíceis ou impossíveis.</li>
</ul>



<p>Código de produção separa responsabilidades para reduzir impacto de mudanças.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7) Dependências externas sob controle</h2>



<p>Qualquer integração externa é um ponto de falha.</p>



<p>APIs de terceiros, serviços de pagamento, mensageria, armazenamento. Tudo isso pode falhar.</p>



<p>Código pronto para produção:</p>



<ul class="wp-block-list">
<li>define timeouts;</li>



<li>controla retries;</li>



<li>trata respostas inesperadas;</li>



<li>evita travar o sistema por dependência externa.</li>
</ul>



<p>Assumir que serviços externos “sempre funcionam” é ingenuidade.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8) Configuração e ambiente</h2>



<p>Código de produção não depende de configuração hardcoded.</p>



<p>Ambientes mudam: local, staging, produção, múltiplos servidores, múltiplos clientes. Se o código não respeita isso, o deploy vira um risco.</p>



<p>Separar configuração de código não é frescura. É requisito básico.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9) Manutenibilidade</h2>



<p>Se depois de um mês você não entende o que escreveu, o problema não é memória — é o código.</p>



<p>Produção é manutenção contínua. Código precisa ser:</p>



<ul class="wp-block-list">
<li>legível;</li>



<li>previsível;</li>



<li>organizado.</li>
</ul>



<p>Código bom não é o mais curto nem o mais “esperto”. É o que dá menos medo de mexer.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">10) Pensar no impacto futuro</h2>



<p>Código que funciona resolve o agora.<br>Código pronto para produção considera o depois.</p>



<p>Depois de:</p>



<ul class="wp-block-list">
<li>novos usuários;</li>



<li>novas regras;</li>



<li>novas integrações;</li>



<li>novos desenvolvedores no time.</li>
</ul>



<p>Decisões técnicas ruins não quebram tudo na hora — elas cobram juros com o tempo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Conclusão</h2>



<p>Código pronto para produção não é sobre escrever mais código, usar mais ferramentas ou aplicar padrões complexos.</p>



<p>É sobre responsabilidade técnica.</p>



<p>É pensar no que pode dar errado, assumir que vai dar, e preparar o sistema para continuar funcionando mesmo assim. Essa é a diferença real entre sistemas estáveis e sistemas problemáticos.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/codigo-em-producao-voce-tem-certeza-de-que-ele-esta-pronto/">Código em produção: você tem certeza de que ele está pronto?</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/codigo-em-producao-voce-tem-certeza-de-que-ele-esta-pronto/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
