Rafael Pereira / engenheiro de software / sistemas

Eu trabalho nos pontos em que sistemas simples deixam de ser simples.

Estudos de caso, projetos e textos técnicos sobre escala, falhas, legado e regras de negócio. Cada peça mostra a restrição, a decisão e até onde a solução funciona.

Método

A restrição vem antes do diagrama.

Começo pelo que acontece quando uma mensagem falha.

O banco não pode mudar. O legado não pode parar.

O caminho feliz vem depois.

A decisão registra a alternativa descartada e a condição que justificaria revê-la.

O código mostra o que foi feito; o case mostra por quê.

Prova

Três sistemas, três restrições

Infosistemas fev/2025 a mai/2026

~98% redução de falhas intermitentes nos fluxos críticos

Infosistemas: contrato de falha na mensageria RabbitMQ

Falhas intermitentes entre microsserviços sem contrato para retry, DLQ ou duplicidade. Mais consumidores só empurravam a sobrecarga.

Abrir o case

Contrato de falha na mensageria
Contrato de falha na mensageria Publicação confirmada segue para uma fila durável e um consumidor idempotente. Falhas temporárias retornam para retry com backoff; falhas permanentes seguem para a DLQ. Publicação confirmada Fila durável prefetch controlado Consumidor idempotente retry + backoff DLQ por fluxo duplicidade não repete efeito de negócio

Publicação confirmada, consumo com prefetch controlado, retry com backoff e DLQ por fluxo. Escalar só consumidores fica de fora do desenho.

Ver o caso

VBET out/2023 a fev/2025

~7 min → <1 s comissões, da carga original ao cache quente

VBET: analytics sobre um SQL Server que não podíamos mudar

O banco era de outro time. O dashboard precisava deixar de depender de um schema que não controlávamos.

Abrir o case

Pipeline de comissões
Pipeline de comissões Dados de um SQL Server externo passam por ETL para uma base PostgreSQL própria, depois por cache, e alimentam leituras REALTIME e CLOSED. SQL Server externo ETL PostgreSQL pré-cálculo Cache Leituras dashboard REALTIME tendência CLOSED pagamento ~7 min no pico, menos de 1 s com cache quente

Cada estágio corresponde a uma decisão incremental documentada no case. Números de outras histórias não entram neste desenho.

Ver o caso

Flapper set/2021 a jun/2022

~25% menos tabelas na separação por domínios

Flapper: descobrir o domínio antes de separar o monólito

O produto não podia parar, e os autores originais já não estavam lá. Antes de migrar, foi preciso descobrir quais fronteiras o banco ainda revelava.

Abrir o case

Descoberta de domínio antes da migração
Descoberta de domínio antes da migração O banco do monólito PHP revela fronteiras de domínio. Pessoas, autenticação e aeronaves saem gradualmente para contextos com persistência própria. Monólito PHP banco como fonte de descoberta Pessoas Autenticação Aeronaves Strangler: um domínio por vez, sem parar o produto

O banco legado revela fronteiras; pessoas, autenticação e aeronaves saem gradualmente para contextos com persistência própria.

Ver o caso

Artefatos

Projetos selecionados

Repositório público

SMS Manager

Importar CSV não pode travar a API Nest. A campanha persiste e publica na fila RabbitMQ; consumidores em TypeScript, Go ou Rust gravam o resultado no Mongo. A API não espera a operadora.

Abrir o projeto

Desacoplamento da campanha
Desacoplamento da campanha CSV entra na API Nest, que persiste em PostgreSQL e publica na fila RabbitMQ. Consumidores em TypeScript, Go ou Rust, no mesmo contrato, registram o resultado no MongoDB. A API não bloqueia no ritmo da operadora. CSV upload API Nest campanha Postgres persistência API → fila Fila RabbitMQ TS Go Rust mesmo contrato Mongo resultado API não espera a operadora

CSV na API Nest com persistência Postgres; publicação na fila; consumidores no mesmo contrato gravam no Mongo. A API não espera a operadora.

Experimento documentado

goc_mcp

Maestro (Codex/Cursor) delega via MCP; daemon FIFO e workers OpenCode executam com estado em SQLite. A orquestração funcionou, mas a medição não confirmou redução de custo ou tempo.

Abrir o projeto

Orquestração local via MCP
Orquestração local via MCP Maestro MCP delega tarefas a workers OpenCode via daemon FIFO, um worker por vez. Estado em SQLite. A hipótese de reduzir tempo e custo não foi confirmada nas medições. Maestro MCP / Codex · Cursor Daemon · FIFO 1 worker por vez Worker OpenCode Worker OpenCode Worker OpenCode SQLite hipótese tempo/custo não confirmada

Maestro delega; daemon FIFO coordena um worker OpenCode por vez; SQLite guarda estado. A hipótese de eficiência não se confirmou.

Produto próprio, desktop

md2cv

Perfil e versões imutáveis ficam no SQLite da máquina. O agente supervisionado só propõe alterações sob schema; ATS e exportação em PDF/DOCX reutilizam o mesmo grafo, sem backend SaaS dono dos dados.

Abrir o projeto

Grafo local e agente supervisionado
Grafo local e agente supervisionado Perfil e currículos no SQLite local; versões imutáveis; candidatura no mesmo contexto; agente supervisionado propõe sob schema e só grava com confirmação; auditoria ATS e export PDF/DOCX. Sem backend SaaS como dono dos dados. Grafo do perfil SQLite · WAL · máquina local Versões imutáveis Markdown · restauração Candidatura vaga · versão Agente supervisionado confirma antes de gravar ATS PDF / DOCX sem SaaS dono

Perfil e versões no SQLite; candidatura no mesmo contexto; agente só propõe sob schema; ATS e export reutilizam o grafo sem SaaS dono.

Ver todos os projetos

Percurso

Uma trajetória de sistemas, não de cargos

  1. 2025 a 2026

    Arquitetura

    Plataformas de locação e frotas. A prova pública desta etapa é a mensageria.

    Infosistemas

  2. 2023 a 2025

    Analytics em base externa

    SQL Server de outro time. O dashboard passou a funcionar sem depender de um schema que não controlávamos.

    VBET

  3. 2023

    Pós-venda sobre legado

    O core em PHP 5.7 sustentava a operação. A automação libertou suporte sem reescrever o monólito.

    Maxmilhas

  4. 2022 a 2023

    Marketplace multi-tenant

    White-label para incorporar bancos sem fork por cliente.

    South System / QUIQ-Itaú

  5. 2021 a 2022

    Modernização incremental

    O monólito não tinha os autores originais. A migração começou pelo que o banco ainda deixava ler.

    Flapper

Prática

Como o trabalho avança

Cada etapa restringe a seguinte. Sem essas restrições, arquitetura vira gosto pessoal.

Como o trabalho avança

01

Contexto

Quem sofre quando isso quebra, e em qual operação.

02

Restrição

O que não pode parar, mudar ou ser tratado como capacidade extra.

03

Decisão

O caminho escolhido, com a alternativa descartada à vista.

04

Evidência

O que foi medido, em qual cenário, com que autoria.

05

Limite

A condição que justificaria rever a decisão.

Contato

Tem um sistema que deixou de ser simples?

Chame direto pelo @imrafaeldev, sem formulário — para conversa profissional, comece pelo LinkedIn.

Abrir a página de contato