The productivity shift is real. Developers using AI assistants consistently close tasks faster, explore unfamiliar codebases more quickly, and write boilerplate that used to consume hours in minutes. The tools work. But the conversation around them has two blind spots that I think are genuinely dangerous: what happens when the AI is confidently wrong, and what happens to the engineer who stops thinking for themselves.A mudança de produtividade é real. Desenvolvedores que usam assistentes de IA consistentemente fecham tarefas mais rápido, exploram codebases desconhecidas com mais agilidade e escrevem boilerplate que antes consumia horas em minutos. As ferramentas funcionam. Mas a conversa ao redor delas tem dois pontos cegos que considero genuinamente perigosos: o que acontece quando a IA está errada com confiança, e o que acontece com o engenheiro que para de pensar por si mesmo.
This article is not about whether to use AI. That ship has sailed. It's about the mental model and habits that separate engineers who get compounding gains from AI from those who accumulate invisible technical debt — and occasionally ship bugs that a junior dev with Stack Overflow would have caught.Este artigo não é sobre usar ou não IA. Esse barco já partiu. É sobre o modelo mental e os hábitos que separam engenheiros que obtêm ganhos compostos com IA daqueles que acumulam dívida técnica invisível — e ocasionalmente entregam bugs que um dev júnior com Stack Overflow teria pegado.
What AI Genuinely Gets RightO Que a IA Genuinamente Acerta
Before the criticism, let's be precise about where the gains are real and significant:Antes das críticas, vamos ser precisos sobre onde os ganhos são reais e significativos:
- Boilerplate elimination. CRUD endpoints, DTO mappings, migration scripts, Dockerfile templates, test fixtures — the category of work where the pattern is known and the output is verifiable. AI is genuinely excellent here. The code is usually correct and reviewing it takes a fraction of the time writing it would have.Eliminação de boilerplate. Endpoints CRUD, mapeamentos de DTO, scripts de migration, templates de Dockerfile, fixtures de teste — a categoria de trabalho onde o padrão é conhecido e o output é verificável. A IA é genuinamente excelente aqui. O código costuma estar correto e revisá-lo leva uma fração do tempo que escrevê-lo levaria.
- Codebase navigation. "Where is the rate limiting logic applied?" "What's the relationship between these two models?" Asking an AI that has read your entire codebase is faster than grep for anything requiring reasoning about relationships — not just text matches.Navegação em codebases. "Onde é aplicada a lógica de rate limiting?" "Qual é a relação entre esses dois modelos?" Perguntar a uma IA que leu todo o seu codebase é mais rápido que grep para qualquer coisa que exige raciocínio sobre relacionamentos — não apenas correspondências de texto.
- First-draft acceleration. Producing a working starting point for a feature, a migration plan, or a system design sketch is dramatically faster. The AI removes the blank-page problem. The engineer's job becomes editing and validating rather than generating from scratch.Aceleração do primeiro rascunho. Produzir um ponto de partida funcional para uma feature, um plano de migration ou um esboço de design de sistema é dramaticamente mais rápido. A IA remove o problema da página em branco. O trabalho do engenheiro vira editar e validar em vez de gerar do zero.
- Unfamiliar territory. Working in a language, framework, or domain you've never touched before is faster with AI than with documentation alone. You can ask "why", not just "how".Território desconhecido. Trabalhar em uma linguagem, framework ou domínio que você nunca tocou é mais rápido com IA do que apenas com documentação. Você pode perguntar "por quê", não só "como".
Hallucinations: The Silent Trust KillerAlucinações: O Destruidor Silencioso de Confiança
A hallucination is when an AI produces output that is fluent, confident, and wrong. Not "maybe wrong" — stated with the same tone as correct information. This is the single most dangerous property of current LLMs for professional use, and it's dangerous precisely because the signal for "I'm making this up" looks identical to the signal for "I know this for certain".Uma alucinação é quando a IA produz output fluente, confiante e errado. Não "talvez errado" — afirmado com o mesmo tom que informações corretas. Essa é a propriedade mais perigosa dos LLMs atuais para uso profissional, e é perigosa precisamente porque o sinal de "estou inventando isso" parece idêntico ao sinal de "sei isso com certeza".
What hallucinations look like in practice: a non-existent library method with a plausible name; a security configuration that looks correct but has a subtle flaw; a database query that returns the right shape but has an off-by-one edge case; a dependency version that was yanked two releases ago; a code pattern sourced from a deprecated API that was replaced with a breaking change.Como alucinações aparecem na prática: um método de biblioteca inexistente com nome plausível; uma configuração de segurança que parece correta mas tem uma falha sutil; uma query de banco que retorna o shape certo mas tem um caso de borda off-by-one; uma versão de dependência que foi removida duas releases atrás; um padrão de código retirado de uma API depreciada que foi substituída com breaking change.
The distribution of hallucinations is not uniform. They cluster in specific conditions:A distribuição de alucinações não é uniforme. Elas se concentram em condições específicas:
High hallucination risk:
- Specific library versions and their exact APIs
- Recent changes (anything after the model's training cutoff)
- Niche or less-documented frameworks
- Security configurations with many valid-looking variations
- Cross-library interactions (e.g. "how does X work with Y")
- Numerical calculations in prose explanations
Lower hallucination risk:
- Well-established algorithms and data structures
- Standard library usage in popular languages
- General architectural patterns and trade-offs
- Code transformation (refactoring, translating between languages)
- Explaining code you provide as contextAlto risco de alucinação:
- Versões específicas de bibliotecas e suas APIs exatas
- Mudanças recentes (qualquer coisa após o corte de treino do modelo)
- Frameworks de nicho ou pouco documentados
- Configurações de segurança com muitas variações de aparência válida
- Interações entre bibliotecas (ex: "como X funciona com Y")
- Cálculos numéricos em explicações em prosa
Menor risco de alucinação:
- Algoritmos e estruturas de dados bem estabelecidos
- Uso de biblioteca padrão em linguagens populares
- Padrões arquiteturais gerais e trade-offs
- Transformação de código (refatoração, tradução entre linguagens)
- Explicação de código que você fornece como contextoThe operational implication: your verification effort should be proportional to risk zone, not uniform. Code the AI generates from a well-known pattern deserves a quick read. A security configuration or dependency version deserves a deliberate check against the primary source.A implicação operacional: seu esforço de verificação deve ser proporcional à zona de risco, não uniforme. Código que a IA gera a partir de um padrão bem conhecido merece uma leitura rápida. Uma configuração de segurança ou versão de dependência merece uma verificação deliberada na fonte primária.
Agents: What They Actually AreAgentes: O Que São de Verdade
An AI agent is an LLM that can take actions — read files, run commands, call APIs, write code, open browsers — and loop: observe the result of an action, reason about the next step, act again. The loop continues until the task is done or the agent gets stuck.Um agente de IA é um LLM que pode tomar ações — ler arquivos, rodar comandos, chamar APIs, escrever código, abrir browsers — e fazer loops: observar o resultado de uma ação, raciocinar sobre o próximo passo, agir novamente. O loop continua até a tarefa ser concluída ou o agente travar.
This is qualitatively different from a chat assistant. A chat assistant responds to your prompt. An agent acts autonomously over multiple steps to complete a task — and it can compound errors. If the LLM's reasoning at step 3 is wrong, steps 4 through 10 might execute confidently in the wrong direction.Isso é qualitativamente diferente de um assistente de chat. Um assistente de chat responde ao seu prompt. Um agente age autonomamente em múltiplos passos para completar uma tarefa — e pode compor erros. Se o raciocínio do LLM no passo 3 estiver errado, os passos 4 a 10 podem executar com confiança na direção errada.
Skills: Reusable Behavioral PackagesSkills: Pacotes de Comportamento Reutilizáveis
Skills (also called tools, functions, or capabilities depending on the platform) are the specific actions an agent can take. They bridge the gap between the LLM's reasoning and the real world. A skill is essentially a function the agent can call: it has a name, a description of what it does, a defined set of parameters, and it returns a result the agent can act on.Skills (também chamadas de tools, functions ou capabilities dependendo da plataforma) são as ações específicas que um agente pode tomar. Elas fazem a ponte entre o raciocínio do LLM e o mundo real. Uma skill é essencialmente uma função que o agente pode chamar: tem nome, descrição do que faz, conjunto definido de parâmetros e retorna um resultado sobre o qual o agente pode agir.
// Example: a skill definition for an agent
{
"name": "run_tests",
"description": "Runs the test suite and returns pass/fail counts and failing test names",
"parameters": {
"path": {
"type": "string",
"description": "Directory or specific test file to run"
},
"filter": {
"type": "string",
"description": "Optional test name filter"
}
}
}
// The agent can then reason:
// "I just wrote a new function. I should run the tests to verify it works.
// Let me call run_tests({ path: 'src/payment' }) and check the output."Skills make agents powerful — and risky. A skill that can write to a database, push a git commit, send an email, or call a payment API is a skill that can do real damage if the agent's reasoning is wrong. The capability gap between an agent with read-only skills and one with write skills is enormous.Skills tornam os agentes poderosos — e arriscados. Uma skill que pode escrever em um banco de dados, fazer push de um commit git, enviar um e-mail ou chamar uma API de pagamento é uma skill que pode causar dano real se o raciocínio do agente estiver errado. A diferença de capacidade entre um agente com skills somente de leitura e um com skills de escrita é enorme.
The Vibe Coding TrapA Armadilha do Vibe Coding
"Vibe coding" — generating code by vibes, accepting what the AI produces without deep comprehension, iterating by prompting rather than understanding — has a seductive short-term appeal. Tasks close fast. The developer feels productive. The feedback loop is immediate."Vibe coding" — gerar código por intuição, aceitar o que a IA produz sem compreensão profunda, iterar por prompts em vez de entendimento — tem um apelo de curto prazo sedutor. As tarefas fecham rápido. O desenvolvedor se sente produtivo. O loop de feedback é imediato.
The debt accumulates in invisible ways:A dívida se acumula de formas invisíveis:
- You cannot review what you don't understand. If you didn't understand the code well enough to write it, you don't understand it well enough to catch the bug the AI introduced. Code review becomes a formality rather than a filter.Você não consegue revisar o que não entende. Se você não entendeu o código bem o suficiente para escrevê-lo, não o entende bem o suficiente para pegar o bug que a IA introduziu. A revisão de código vira formalidade em vez de filtro.
- The codebase becomes unownable. If nobody on the team can confidently explain why a section works the way it does, adding to it is archaeology, and changing it is russian roulette. Teams that vibe-code their way through features end up with codebases that only AI can navigate — and that's a dependency, not a feature.O codebase fica sem dono. Se ninguém no time consegue explicar com confiança por que uma seção funciona do jeito que funciona, adicionar nela é arqueologia e mudar é roleta-russa. Times que fazem vibe coding nas features acabam com codebases que só a IA consegue navegar — e isso é dependência, não feature.
- Debugging regresses. Debugging requires a mental model of the system. Vibe coding produces code without mental models. When production breaks at 2am, "ask the AI" is not a debugging strategy — it's a prayer.O debugging regride. Debugar exige um modelo mental do sistema. Vibe coding produz código sem modelos mentais. Quando a produção quebra às 2h da manhã, "perguntar à IA" não é uma estratégia de debugging — é uma prece.
The test: If you can't explain, in plain language, why the AI-generated code works — what invariant it maintains, what edge cases it handles, what it would break if you changed line 7 — you don't own that code. You're renting it from the model, and the lease can be recalled at any incident.O teste: Se você não consegue explicar, em linguagem simples, por que o código gerado pela IA funciona — que invariante mantém, quais casos de borda trata, o que quebraria se você mudasse a linha 7 — você não é dono desse código. Você está alugando do modelo, e o contrato pode ser rescindido em qualquer incidente.
The Skill Atrophy RiskO Risco de Atrofia de Habilidades
There's a subtler, longer-term cost that doesn't show up in sprint velocity: the erosion of the ability to work without AI assistance. Skills that aren't practiced degrade. If you've spent two years never debugging without AI, never designing a system without AI generating the first proposal, never reading documentation because the AI summarized it — you've been trading long-term capability for short-term throughput.Há um custo mais sutil e de longo prazo que não aparece na velocity do sprint: a erosão da capacidade de trabalhar sem assistência de IA. Habilidades que não são praticadas degradam. Se você passou dois anos nunca debugando sem IA, nunca desenhando um sistema sem a IA gerar a primeira proposta, nunca lendo documentação porque a IA resumiu — você trocou capacidade de longo prazo por throughput de curto prazo.
This matters because AI tools are not always available, not always accurate, and not always appropriate. The engineer who can function without them is resilient. The engineer who can't is fragile — and in high-stakes moments (production incidents, security audits, architecture reviews), fragility is expensive.Isso importa porque ferramentas de IA não estão sempre disponíveis, nem sempre são precisas e nem sempre são apropriadas. O engenheiro que consegue funcionar sem elas é resiliente. O que não consegue é frágil — e em momentos de alto risco (incidentes de produção, auditorias de segurança, revisões de arquitetura), fragilidade é cara.
How to Use AI Correctly: A Practical Mental ModelComo Usar IA do Jeito Certo: Um Modelo Mental Prático
The mental model that works: AI is a fast, knowledgeable, sometimes overconfident colleague who needs review. You wouldn't merge a PR from a senior engineer without reading it. You wouldn't deploy a config a colleague sent on Slack without checking it. The same standard applies to AI output — and the review burden scales with the risk of the change.O modelo mental que funciona: IA é um colega rápido, bem informado e às vezes excessivamente confiante que precisa de revisão. Você não faria merge de um PR de um engenheiro sênior sem ler. Não faria deploy de uma config que um colega mandou no Slack sem conferir. O mesmo padrão se aplica ao output da IA — e a carga de revisão escala com o risco da mudança.
Rule 1 — Match the verification effort to the riskRegra 1 — Calibre o esforço de verificação ao risco
Low risk → quick read:
- Boilerplate, repetitive code, test fixtures
- Refactoring with clear intent
- Code transformation (e.g. Python → TypeScript)
Medium risk → careful read + run the tests:
- Business logic implementation
- Database queries
- API integration code
High risk → verify against primary source:
- Security configurations (auth, CORS, encryption)
- Dependency versions and their changelog
- Infrastructure as code (IAC) that touches production
- Any code handling money, PII, or access controlBaixo risco → leitura rápida:
- Boilerplate, código repetitivo, fixtures de teste
- Refatoração com intenção clara
- Transformação de código (ex: Python → TypeScript)
Risco médio → leitura cuidadosa + rodar os testes:
- Implementação de lógica de negócio
- Queries de banco de dados
- Código de integração com API
Alto risco → verificar na fonte primária:
- Configurações de segurança (auth, CORS, criptografia)
- Versões de dependências e seus changelogs
- Infrastructure as code (IAC) que toca produção
- Qualquer código que lida com dinheiro, PII ou controle de acessoRule 2 — Use AI to accelerate understanding, not to bypass itRegra 2 — Use IA para acelerar o entendimento, não para contorná-lo
The most effective pattern: use AI to get to a working first draft quickly, then make sure you understand it before shipping. "Explain this code to me" and "What could go wrong with this approach?" are power prompts that force the AI to expose its reasoning — and expose gaps and risks you can then address.O padrão mais eficaz: use IA para chegar a um primeiro rascunho funcional rapidamente, depois garanta que você o entende antes de entregar. "Explique esse código para mim" e "O que poderia dar errado com essa abordagem?" são prompts poderosos que forçam a IA a expor seu raciocínio — e expõem lacunas e riscos que você pode endereçar.
Rule 3 — Give agents the minimum necessary permissionsRegra 3 — Dê aos agentes as permissões mínimas necessárias
The principle of least privilege applies to AI agents exactly as it does to service accounts. An agent that needs to read your codebase to answer questions doesn't need write access. An agent that can run tests doesn't need to push to main. Design agent permission sets deliberately:O princípio do privilégio mínimo se aplica a agentes de IA exatamente como se aplica a service accounts. Um agente que precisa ler o codebase para responder perguntas não precisa de acesso de escrita. Um agente que pode rodar testes não precisa de push para main. Projete os conjuntos de permissões de agentes deliberadamente:
// Tier 1 — Read-only agents (safest for exploration tasks)
permissions: [read_files, search_code, read_docs]
// Tier 2 — Write-in-sandbox agents (safe for development loops)
permissions: [read_files, write_files, run_tests, run_linter]
constraints: [no_git_push, no_external_api_calls, no_db_writes]
// Tier 3 — Full-action agents (require explicit confirmation per step)
permissions: [all]
constraints: [require_human_approval_for: [git_push, db_write, api_call]]Rule 4 — Deliberate practice outside of AI assistanceRegra 4 — Prática deliberada fora da IA
Treat your core engineering skills like a muscle that needs deliberate exercise. Periodically solve problems without AI — not because AI is bad, but because your ability to recognize when AI is wrong depends on your ability to reason correctly without it. The engineers who get the most out of AI are the ones who remain capable without it.Trate suas habilidades essenciais de engenharia como um músculo que precisa de exercício deliberado. Periodicamente resolva problemas sem IA — não porque IA é ruim, mas porque sua capacidade de reconhecer quando a IA está errada depende da sua capacidade de raciocinar corretamente sem ela. Os engenheiros que mais tiram proveito da IA são os que permanecem capazes sem ela.
Prompting Patterns That Actually WorkPadrões de Prompt Que Realmente Funcionam
The quality of AI output is highly sensitive to how you frame the request. These patterns consistently produce better results:A qualidade do output da IA é altamente sensível a como você formula a solicitação. Esses padrões consistentemente produzem resultados melhores:
// ❌ Too vague — leaves critical decisions implicit
"Write a function to process payments"
// ✓ Constrained — explicit requirements, stack, and edge cases
"Write a TypeScript function that processes a payment using the Stripe SDK.
It should accept a customerId and amountInCents, return { success, transactionId }
on success and throw a PaymentFailedError with the reason on failure.
Use stripe@14. Handle network timeouts and idempotency."
// ✓ Review mode — expose AI reasoning for critique
"Here is my implementation of the payment processor [paste code].
What edge cases am I missing? What could fail in production?"
// ✓ Risk surfacing — force the AI to think adversarially
"This is my auth middleware [paste code].
Assume a malicious user is trying to bypass it. What attack vectors exist?"
// ✓ Verification prompt — catch hallucinations in library usage
"You suggested using axios.get() with an { onUploadProgress } option.
Does that option actually exist on GET requests? Show me the docs reference."// ❌ Vago demais — deixa decisões críticas implícitas
"Escreva uma função para processar pagamentos"
// ✓ Com restrições — requisitos, stack e casos de borda explícitos
"Escreva uma função TypeScript que processa um pagamento usando o Stripe SDK.
Deve aceitar customerId e amountInCents, retornar { success, transactionId }
em caso de sucesso e lançar um PaymentFailedError com o motivo em caso de falha.
Use stripe@14. Trate timeouts de rede e idempotência."
// ✓ Modo revisão — exponha o raciocínio da IA para crítica
"Aqui está minha implementação do processador de pagamento [cole o código].
Quais casos de borda estou deixando passar? O que pode falhar em produção?"
// ✓ Levantamento de riscos — force a IA a pensar adversarialmente
"Este é meu middleware de auth [cole o código].
Assuma que um usuário malicioso está tentando contorná-lo. Quais vetores de ataque existem?"
// ✓ Prompt de verificação — pegue alucinações no uso de bibliotecas
"Você sugeriu usar axios.get() com a opção { onUploadProgress }.
Essa opção realmente existe em requisições GET? Me mostre a referência na documentação."A Realistic Picture of AI in a Production TeamUm Quadro Realista de IA em um Time de Produção
The teams that use AI most effectively aren't the ones that automate the most — they're the ones that apply AI selectively and maintain strong engineering judgment about when to trust the output. Concretely:Os times que usam IA de forma mais eficaz não são os que mais automatizam — são os que aplicam IA seletivamente e mantêm julgamento de engenharia forte sobre quando confiar no output. Concretamente:
- They use AI to write the first 80% of a feature fast, then slow down to review and own the remaining 20% — which is where the complexity lives.Usam IA para escrever os primeiros 80% de uma feature rapidamente, depois desaceleram para revisar e ser dono dos 20% restantes — onde a complexidade mora.
- They have a rule: if you can't explain it in PR review, it doesn't merge. AI-generated code is held to the same standard as human-generated code.Têm uma regra: se você não consegue explicar na revisão do PR, não faz merge. Código gerado por IA é tratado com o mesmo padrão que código gerado por humanos.
- They treat agents as automation with guardrails, not as autonomous actors. Every agent action that touches shared state has a human confirmation step until trust is established through repeated correct behavior.Tratam agentes como automação com guardrails, não como atores autônomos. Toda ação de agente que toca estado compartilhado tem uma etapa de confirmação humana até que a confiança seja estabelecida por comportamento correto repetido.
- They track AI-introduced bugs in postmortems — not to blame the tool, but to build intuition for which categories of AI output require the most verification in their specific stack.Rastreiam bugs introduzidos por IA em postmortems — não para culpar a ferramenta, mas para construir intuição sobre quais categorias de output de IA exigem mais verificação em sua stack específica.
The compounding gain: Engineers who use AI to handle the mechanical parts of their work — boilerplate, lookup, first drafts — free up cognitive bandwidth for the parts that actually require judgment: architecture, edge cases, security, maintainability. That's the right trade. Using AI to bypass the judgment parts is the wrong trade, and the debt it creates is real.O ganho composto: Engenheiros que usam IA para lidar com as partes mecânicas do trabalho — boilerplate, consulta, primeiros rascunhos — liberam largura de banda cognitiva para as partes que realmente exigem julgamento: arquitetura, casos de borda, segurança, manutenibilidade. Essa é a troca certa. Usar IA para contornar as partes de julgamento é a troca errada, e a dívida que cria é real.
Key TakeawaysPontos Principais
- AI is genuinely productive for boilerplate, codebase navigation, first drafts, and unfamiliar territory — use it there without hesitation.IA é genuinamente produtiva para boilerplate, navegação de codebase, primeiros rascunhos e território desconhecido — use sem hesitação nesses casos.
- Hallucinations cluster around specific API versions, recent changes, niche frameworks, and security configurations — calibrate your verification effort accordingly.Alucinações se concentram em versões específicas de API, mudanças recentes, frameworks de nicho e configurações de segurança — calibre seu esforço de verificação de acordo.
- Agents amplify both capability and error. Give them minimum necessary permissions and require human approval for actions that touch shared state.Agentes amplificam tanto a capacidade quanto o erro. Dê a eles as permissões mínimas necessárias e exija aprovação humana para ações que tocam estado compartilhado.
- Vibe coding — accepting AI output without understanding it — produces code you can't debug, review, or maintain. If you can't explain it, you don't own it.Vibe coding — aceitar output de IA sem entendê-lo — produz código que você não consegue debugar, revisar nem manter. Se não consegue explicar, não é seu.
- Skills degrade without practice. Use AI to go faster, not to avoid thinking — your ability to catch AI errors depends on your ability to reason without it.Habilidades degradam sem prática. Use IA para ir mais rápido, não para evitar pensar — sua capacidade de pegar erros de IA depende da sua capacidade de raciocinar sem ela.
- The best mental model: AI is a fast, knowledgeable, overconfident colleague. Review its work, hold it to the same standard as human code, and you'll capture the gain without the debt.O melhor modelo mental: IA é um colega rápido, bem informado e excessivamente confiante. Revise seu trabalho, exija o mesmo padrão que código humano e você capturará o ganho sem a dívida.