# My Tech Profile > Systems architecture, backend platforms, and technical leadership. Public site for José Adrián Alemán Rojas. The pages below are available as HTML without executing JavaScript. ## Pages - [Home](https://my-tech-profile.dev/): profile overview - [Experience](https://my-tech-profile.dev/experience): career timeline and competencies - [Insights](https://my-tech-profile.dev/insights): technical articles - [Projects](https://my-tech-profile.dev/projects): live public projects - [Sketchnotes](https://my-tech-profile.dev/sketchnotes): architecture sketches - [Let's Connect](https://my-tech-profile.dev/lets-connect): contact ## Insights - [Vector search always returns a neighbor. That is not an answer](https://my-tech-profile.dev/insights/vector-search-always-returns-a-neighbor-that-is-not-an-answer) - [Guardrails in Spring AI 2.0 and LangChain4j 1.18](https://my-tech-profile.dev/insights/guardrails-in-spring-ai-2-0-and-langchain4j-1-18) - [A Firewall for AI Agents: Enforce Authority at Every Tool Call](https://my-tech-profile.dev/insights/a-firewall-for-ai-agents-enforce-authority-at-every-tool-call) - [MCP talks. OWASP names the damage. ACS is the brake](https://my-tech-profile.dev/insights/mcp-talks-owasp-names-the-damage-acs-is-the-brake) - [MCP is a Host, a Client, and a Server. Stop Mixing Them Up](https://my-tech-profile.dev/insights/mcp-is-a-host-a-client-and-a-server-stop-mixing-them-up) - [From ETL, ELT, and EtLT to Agents: What's Actually Changing in Data Engineering](https://my-tech-profile.dev/insights/from-etl-elt-and-etlt-to-agents-what-s-actually-changing-in-data-engineering) - [How I would build Agentic RAG in LangChain4j](https://my-tech-profile.dev/insights/how-i-would-build-agentic-rag-in-langchain4j) - [Agentic RAG is a graph with a grade, not a fancier prompt](https://my-tech-profile.dev/insights/agentic-rag-is-a-graph-with-a-grade-not-a-fancier-prompt) - [Loop Engineering isn't Dead](https://my-tech-profile.dev/insights/loop-engineering-isn-t-dead) - [Who disappears first with AI — frontend or backend?](https://my-tech-profile.dev/insights/who-disappears-first-with-ai-frontend-or-backend) - [What comes after microservices is an agent with a budget](https://my-tech-profile.dev/insights/what-comes-after-microservices-is-an-agent-with-a-budget) - [Spring AI's AutoMemoryTools: Letting the Agent Decide What's Worth Keeping](https://my-tech-profile.dev/insights/spring-ai-s-automemorytools-letting-the-agent-decide-what-s-worth-keeping) - [What 99 insights on my-tech-profile.dev actually add up to](https://my-tech-profile.dev/insights/what-99-insights-on-my-tech-profile-dev-actually-add-up-to) - [Build a production-ready AI PR reviewer in Java with LangChain4j](https://my-tech-profile.dev/insights/build-a-production-ready-ai-pr-reviewer-in-java-with-langchain4j) - [SuperPowers: A Skill Framework](https://my-tech-profile.dev/insights/superpowers-a-skill-framework) - [Vibe Coding — Vulnerability as a Service](https://my-tech-profile.dev/insights/vibe-coding-vulnerability-as-a-service) - [What Is Actually Cheaper for Orchestrating Coding Agents: APIs, Codex CLI, or Cursor CLI?](https://my-tech-profile.dev/insights/what-is-actually-cheaper-for-orchestrating-coding-agents-apis-codex-cli-or-cursor-cli) - [DB-Scheduler: A Persistent, Cluster-Friendly Scheduler for Java](https://my-tech-profile.dev/insights/db-scheduler-a-persistent-cluster-friendly-scheduler-for-java) - [API Mocking and Testing With Microcks](https://my-tech-profile.dev/insights/api-mocking-and-testing-with-microcks) - [A Practical Guide to Java Virtual Threads With JMS Listeners on Java 25 and Spring Boot 4](https://my-tech-profile.dev/insights/a-practical-guide-to-java-virtual-threads-with-jms-listeners-on-java-25-and-spring-boot-4) - [Is n8n better than Spring AI or LangChain4j?](https://my-tech-profile.dev/insights/is-n8n-better-than-spring-ai-or-langchain4j) - [Securing MCP servers in agent workflows](https://my-tech-profile.dev/insights/securing-mcp-servers-in-agent-workflows) - [Prompt Engineering Techniques with Spring AI: What Actually Works in Production Java](https://my-tech-profile.dev/insights/prompt-engineering-techniques-with-spring-ai-what-actually-works-in-production-java) - [A Goal the Agent Cannot Fake](https://my-tech-profile.dev/insights/a-goal-the-agent-cannot-fake) - [The Evolution Of Modern Software Architectures](https://my-tech-profile.dev/insights/the-evolution-of-modern-software-architectures) - [Spring AI 2.0 vs LangChain4j 1.18: same research agents, different orchestration](https://my-tech-profile.dev/insights/spring-ai-vs-langchain4j-same-research-agents-different-orchestration) - [Google Gemini with Spring AI 2.0](https://my-tech-profile.dev/insights/google-gemini-with-spring-ai-2-0) - [Agent2Agent on Spring Boot: one specialist, one orchestrator, no megaprompt](https://my-tech-profile.dev/insights/agent2agent-on-spring-boot-one-specialist-one-orchestrator-no-megaprompt) - [Use of LLMs to Learn Complex Topics](https://my-tech-profile.dev/insights/use-of-llms-to-learn-complex-topics) - [Building Resilient Data Pipelines: Practical Patterns That Survive Production](https://my-tech-profile.dev/insights/building-resilient-data-pipelines-practical-patterns-that-survive-production) - [System Prompt Leakage vs. Prompt Injection: Two Different Attacks, Two Different Defenses](https://my-tech-profile.dev/insights/system-prompt-leakage-vs-prompt-injection-two-different-attacks-two-different-defenses) - [Create a AI Video from Codebase](https://my-tech-profile.dev/insights/create-a-ai-video-from-codebase) - [SRE Best Practices For Production Alerting](https://my-tech-profile.dev/insights/sre-best-practices-for-production-alerting) - [LLM Integration with Apache Camel](https://my-tech-profile.dev/insights/llm-integration-with-apache-camel) - [This One Spring Data JPA Pattern Cleaned Up to 3 Years of Repository Debt](https://my-tech-profile.dev/insights/this-one-spring-data-jpa-pattern-cleaned-up-to-3-years-of-repository-debt) - [Microservices Architecture: 7 Engineering Decisions That Determine Success or Failure](https://my-tech-profile.dev/insights/microservices-architecture-7-engineering-decisions-that-determine-success-or-failure) - [Stop Giving Agents Your Feign Clients: Govern Tools Behind MCP](https://my-tech-profile.dev/insights/govern-tools-behind-mcp) - [Application Startup Tracking In Spring Boot](https://my-tech-profile.dev/insights/application-startup-tracking-in-spring-boot) - [What Spring AI 2.0 Actually Gives You for Transactional Agent Workflows](https://my-tech-profile.dev/insights/what-spring-ai-2-0-actually-gives-you-for-transactional-agent-workflows) - [Don't write prompts, run loops](https://my-tech-profile.dev/insights/don-t-write-prompts-run-loops) - [Thirty years of Java, and I've been there for most of it](https://my-tech-profile.dev/insights/thirty-years-of-java-and-i-ve-been-there-for-most-of-it) - [Spring Boot 4.0 changed how HttpStatus prints](https://my-tech-profile.dev/insights/spring-boot-4-0-changed-how-httpstatus-prints) - [Deep Dive on Dokimos for AI Spec Testing in Java](https://my-tech-profile.dev/insights/deep-dive-on-dokimos-for-ai-spec-testing-in-java) - [Spec-Driven Development (Part 2)](https://my-tech-profile.dev/insights/spec-driven-development-part-2) - [ACK as a AI Start Response](https://my-tech-profile.dev/insights/signal-drift-and-trust-breaks) - [Anti-Patters of Microservices Architecture](https://my-tech-profile.dev/insights/anti-patters-of-microservices-architecture) - [My honest take on the "1 million notifications" system design question](https://my-tech-profile.dev/insights/my-honest-take-on-the-1-million-notifications-system-design-question) - [AGENTS.md Makes Your Java Codebase AI-Agent Ready AGENTS.md Makes Your Java Codebase AI-Agent Ready](https://my-tech-profile.dev/insights/agents-md-makes-your-java-codebase-ai-agent-ready-agents-md-makes-your-java-codebase-ai-agent-ready) - [DuckDB as an AI Data Layer](https://my-tech-profile.dev/insights/duckdb-as-an-ai-data-layer) - [AI Integration to AI Engineering](https://my-tech-profile.dev/insights/ai-integration-to-ai-engineering) - [Mastering Java Loops: Under the Hood, Memory Pitfalls, and High-Scale Optimizations](https://my-tech-profile.dev/insights/mastering-java-loops-under-the-hood-memory-pitfalls-and-high-scale-optimizations) - [Stop Making Your AI Agent Re-Read Your Entire Codebase](https://my-tech-profile.dev/insights/stop-making-your-ai-agent-re-read-your-entire-codebase) - [Database Normalization, ACID, and Slowly Changing Dimensions](https://my-tech-profile.dev/insights/database-normalization-acid-and-slowly-changing-dimensions) - [Spring Boot 4 vs Spring Boot 3](https://my-tech-profile.dev/insights/spring-boot-4-vs-spring-boot-3) - [Ontology Knowledge Fusion: Why I Stopped Trusting Pure RAG for Job Fit](https://my-tech-profile.dev/insights/ontology-knowledge-fusion-why-i-stopped-trusting-pure-rag-for-job-fit) - [Getting Started With RabbitMQ in Spring Boot](https://my-tech-profile.dev/insights/getting-started-with-rabbitmq-in-spring-boot) - [Centralizing Chaos Monkey at Scale — What I Learned Building a Command Relay](https://my-tech-profile.dev/insights/centralizing-chaos-monkey-at-scale-what-i-learned-building-a-command-relay) - [Picking Between LangChain4j 1.15 and Spring AI 2.0](https://my-tech-profile.dev/insights/picking-between-langchain4j-1-15-and-spring-ai-2-0) - [Why AI-Generated Code Is Making Regression Testing More Important](https://my-tech-profile.dev/insights/why-ai-generated-code-is-making-regression-testing-more-important) - [Deep dive on Spring Modulith](https://my-tech-profile.dev/insights/deep-dive-on-spring-modulith) - [The New Senior Developer Job Description](https://my-tech-profile.dev/insights/the-new-senior-developer-job-description) - [Multi-Agent Orchestrator and Workers in Spring AI 2.0](https://my-tech-profile.dev/insights/multi-agent-orchestrator-and-workers-in-spring-ai-2-0) - [AI-Native Engineering Culture](https://my-tech-profile.dev/insights/ai-native-engineering-culture) - [Deep Dive on Spring AI 2.0](https://my-tech-profile.dev/insights/deep-dive-on-spring-ai-2-0) - [RAG to Agentic RAG to Agent Memory](https://my-tech-profile.dev/insights/rag-to-agentic-rag-to-agent-memory) - [Bean Background Initialization in Spring Framework](https://my-tech-profile.dev/insights/bean-background-initialization-in-spring-framework) - [When to use Rest API, WebSockets and grpc](https://my-tech-profile.dev/insights/when-to-use-rest-api-websockets-and-grpc) - [Stop Copy-Pasting Agent Rules Into Every Repo](https://my-tech-profile.dev/insights/stop-copy-pasting-agent-rules-into-every-repo) - [AI Broke Your Definition of Done](https://my-tech-profile.dev/insights/ai-broke-your-definition-of-done) - [Chaos Engineering with Chaos Monkey](https://my-tech-profile.dev/insights/chaos-engineering-with-chaos-monkey) - [Self-Correcting Structured Output in Spring AI 2.0](https://my-tech-profile.dev/insights/self-correcting-structured-output-in-spring-ai-2-0) - [GenAI Isn't Solving the Problem Most Development Teams Actually Have](https://my-tech-profile.dev/insights/genai-isn-t-solving-the-problem-most-development-teams-actually-have) - [Deep Dive in DokDeploy](https://my-tech-profile.dev/insights/deep-dive-in-dokdeploy) - [Measure your RAG with RAGAS](https://my-tech-profile.dev/insights/measure-your-rag-with-ragas) - [Git Worktrees](https://my-tech-profile.dev/insights/git-worktrees) - [Audit Trails Make Systems Easier to Trust](https://my-tech-profile.dev/insights/audit-trails-make-systems-easier-to-trust) - [LLM Architecture Explained](https://my-tech-profile.dev/insights/llm-architecture-explained) - [Claude Fable 5 Changes the Model-Selection Question](https://my-tech-profile.dev/insights/claude-fable-5-changes-the-model-selection-question) - [Orchestrating Subagents in Spring AI: What I Learned Building It the Hard Way](https://my-tech-profile.dev/insights/orchestrating-subagents-in-spring-ai-what-i-learned-building-it-the-hard-way) - [AI Spec-Driven Development](https://my-tech-profile.dev/insights/ai-spec-driven-development) - [What Actually Is an LLM?](https://my-tech-profile.dev/insights/what-actually-is-an-llm) - [Building Code Training Lab: a self-hosted multi-language coding platform](https://my-tech-profile.dev/insights/building-code-training-lab-a-self-hosted-multi-language-coding-platform) - [AL & ML Concepts Explained](https://my-tech-profile.dev/insights/al-ml-concepts-explained) - [MergeWatch + GitHub Actions: A Setup That Actually Made Our PR Reviews Useful](https://my-tech-profile.dev/insights/mergewatch-github-actions-a-setup-that-actually-made-our-pr-reviews-useful) - [AI-Generated Code Testing Strategies](https://my-tech-profile.dev/insights/ai-generated-code-testing-strategies) - [The Algorithmic Yes-Man But Why?](https://my-tech-profile.dev/insights/the-algorithmic-yes-man-but-why) - [Dynamic Workflows With Opus 4.8](https://my-tech-profile.dev/insights/dynamic-workflows-with-opus-4-8) - [When Your AI Agent Fails Mid-Task: Temporal vs LangGraph vs Axon](https://my-tech-profile.dev/insights/when-your-ai-agent-fails-mid-task-temporal-vs-langgraph-vs-axon) - [The Different Kinds of RAG, and How I've Been Using LangChain4j to Build Them](https://my-tech-profile.dev/insights/the-different-kinds-of-rag-and-how-i-ve-been-using-langchain4j-to-build-them) - [Deep Dive on AI Harness Engineering](https://my-tech-profile.dev/insights/deep-dive-on-ai-harness-engineering) - [MartinLoop for AI Workflows](https://my-tech-profile.dev/insights/martinloop-for-ai-workflows) - [SurfSense vs Onyx: Two Very Different Bets on Personal AI](https://my-tech-profile.dev/insights/surfsense-vs-onyx-two-very-different-bets-on-personal-ai) - [LlamaIndex RAG Pipelines](https://my-tech-profile.dev/insights/llamaindex-rag-pipelines) - [Building a Verification Layer That Catches Hallucinations](https://my-tech-profile.dev/insights/building-a-verification-layer-that-catches-hallucinations) - [Learn Agentic AI: Here's Where I'd Actually Start](https://my-tech-profile.dev/insights/learn-agentic-ai-here-s-where-i-d-actually-start) - [AI Governance and Safety: What I've Learned Building Systems That Actually Have to Be Accountable](https://my-tech-profile.dev/insights/ai-governance-and-safety-what-i-ve-learned-building-systems-that-actually-have-to-be-accountable) - [Introduction to Github Actions](https://my-tech-profile.dev/insights/introduction-to-github-actions) - [Filtering the Spam Before It Gets Into Your Vector Store](https://my-tech-profile.dev/insights/filtering-the-spam-before-it-gets-into-your-vector-store) - [I Built a Small POC to Compare FreeBuff and CodeBuff](https://my-tech-profile.dev/insights/i-built-a-small-poc-to-compare-freebuff-and-codebuff) - [From APIs to Actions: Rethinking Back-End Design for Agents](https://my-tech-profile.dev/insights/from-apis-to-actions-rethinking-back-end-design-for-agents) - [The Hidden Bottlenecks That Break Microservices in Production](https://my-tech-profile.dev/insights/the-hidden-bottlenecks-that-break-microservices-in-production) - [How I Got Our API Response Times Under 100ms With Redis and Spring Boot](https://my-tech-profile.dev/insights/how-i-got-our-api-response-times-under-100ms-with-redis-and-spring-boot) - [Skills vs. Prompts](https://my-tech-profile.dev/insights/skills-vs-prompts) - [Building with OpenWA Java Whatsapp Bots](https://my-tech-profile.dev/insights/building-with-openwa-java-whatsapp-bots) - [Context-Aware Authorization for AI Agents](https://my-tech-profile.dev/insights/context-aware-authorization-for-ai-agents) - [Using Anthropic's Agent Skills in Spring AI](https://my-tech-profile.dev/insights/using-anthropic-s-agent-skills-in-spring-ai) - [Caddy to the Rescue: Why I Stopped Fighting Nginx and Never Looked Back](https://my-tech-profile.dev/insights/caddy-to-the-rescue-why-i-stopped-fighting-nginx-and-never-looked-back) - [Building a profesional branding for you](https://my-tech-profile.dev/insights/building-a-profesional-branding-for-you) - [Software Design Pattens in Java](https://my-tech-profile.dev/insights/software-design-pattens-in-java) - [The Art of Token Frugality in Generative AI Applications](https://my-tech-profile.dev/insights/the-art-of-token-frugality-in-generative-ai-applications) - [Spring Boot Observability with Open Telemetry and DynaTrace](https://my-tech-profile.dev/insights/spring-boot-observability-with-open-telemetry-and-dynatrace) - [Observability in Apache Camel Applications](https://my-tech-profile.dev/insights/observability-in-apache-camel-applications) ## Sketchnotes - [FDE in AI — The Roadmap](https://my-tech-profile.dev/sketchnotes/forward-deployed-engineer-ai-roadmap) - [What is a Guardrail](https://my-tech-profile.dev/sketchnotes/what-is-a-guardrail) - [GitHub Actions](https://my-tech-profile.dev/sketchnotes/github-actions) - [Spring Boot 3 to 4 Migration](https://my-tech-profile.dev/sketchnotes/spring-boot-3-to-4) - [Classic RAG vs Agentic RAG](https://my-tech-profile.dev/sketchnotes/classic-rag-vs-agentic-rag) - [LangGraph4j vs LangChain4j](https://my-tech-profile.dev/sketchnotes/langgraph4j-vs-langchain4j) - [Architect Secure AI Agents](https://my-tech-profile.dev/sketchnotes/secure-ai-agents) - [RAG vs Context-Augmented Generation](https://my-tech-profile.dev/sketchnotes/rag-vs-cag) - [Python vs Java AI Tools](https://my-tech-profile.dev/sketchnotes/python-vs-java-ai-tools) - [Proof of Humanity](https://my-tech-profile.dev/sketchnotes/proof-of-humanity) - [Cursor Origin vs GitHub](https://my-tech-profile.dev/sketchnotes/cursor-origin) - [How to Think Like an AI Architect](https://my-tech-profile.dev/sketchnotes/think-like-ai-architect) - [llmfit · right-size the local LLM](https://my-tech-profile.dev/sketchnotes/llmfit) - [Claude · Codex from your phone](https://my-tech-profile.dev/sketchnotes/phone-codex-claude) - [n8n vs LangChain4j 1.18](https://my-tech-profile.dev/sketchnotes/n8n-vs-langchain4j) - [Java Records · Use Them Well](https://my-tech-profile.dev/sketchnotes/java-records) - [When to Vibe · When to Spec](https://my-tech-profile.dev/sketchnotes/vibe-vs-ai-spec) - [LangChain4j 1.18 — Builders · Domain · Observability](https://my-tech-profile.dev/sketchnotes/langchain4j-1-18-class-model) - [Agentic Era Languages · 2026](https://my-tech-profile.dev/sketchnotes/agentic-era-languages) - [MCP vs Agent2Agent (A2A)](https://my-tech-profile.dev/sketchnotes/mcp-vs-a2a) - [Prompt Engineering vs Loop Engineering](https://my-tech-profile.dev/sketchnotes/prompt-vs-loop-engineering) - [Agent Memory + MCP](https://my-tech-profile.dev/sketchnotes/agent-memory-mcp) - [What is a Forward Deployed Engineer](https://my-tech-profile.dev/sketchnotes/forward-deployed-engineer) - [Apache Camel vs Spring Integration](https://my-tech-profile.dev/sketchnotes/apache-camel-vs-spring-integration) - [MCP Client & Server · Spring AI 2.0](https://my-tech-profile.dev/sketchnotes/spring-ai-mcp-client-server) - [Static Analysis in Spring Boot](https://my-tech-profile.dev/sketchnotes/spring-boot-static-analysis) - [RAG vs Fine-Tune](https://my-tech-profile.dev/sketchnotes/rag-vs-fine-tune) - [Claude Opus 5](https://my-tech-profile.dev/sketchnotes/claude-opus-5) - [Avoid Agent Hallucinations · Spring AI 2.0](https://my-tech-profile.dev/sketchnotes/spring-ai-agent-hallucinations) - [AI Hype Versus Reality](https://my-tech-profile.dev/sketchnotes/ai-hype-versus-reality) - [Kimi K3 vs DeepSeek V4 Pro](https://my-tech-profile.dev/sketchnotes/kimi-k3-vs-deepseek-v4) - [RAG with LangChain4j & Spring AI 2.0](https://my-tech-profile.dev/sketchnotes/rag-langchain4j-spring-ai) - [SQS · RabbitMQ · Kafka](https://my-tech-profile.dev/sketchnotes/sqs-rabbitmq-kafka) - [How to Become a Java AI Engineer](https://my-tech-profile.dev/sketchnotes/java-ai-engineer) - [AI Guardrails](https://my-tech-profile.dev/sketchnotes/ai-guardrails) - [Integrate with MCP](https://my-tech-profile.dev/sketchnotes/integrate-with-mcp) - [When to Use an Agent](https://my-tech-profile.dev/sketchnotes/when-to-use-an-agent) - [Popular AI Models in 2026](https://my-tech-profile.dev/sketchnotes/popular-ai-models-2026) - [How an AI Spec Should Look](https://my-tech-profile.dev/sketchnotes/ai-spec) - [Java 26 Roadmap](https://my-tech-profile.dev/sketchnotes/java-26-roadmap) - [Microservices vs Miniservices](https://my-tech-profile.dev/sketchnotes/microservice-vs-miniservice) - [AI Native Harness](https://my-tech-profile.dev/sketchnotes/ai-native-harness) - [GPT-5.6](https://my-tech-profile.dev/sketchnotes/gpt-5-6) - [When to Vibe · When Not To](https://my-tech-profile.dev/sketchnotes/when-to-vibe) - [Grok 4.5](https://my-tech-profile.dev/sketchnotes/grok-4-5) - [Voice Agent Architecture — Hear, Think, Speak](https://my-tech-profile.dev/sketchnotes/voice-agent-architecture) - [How LLMs Generate Text — Inference Pipeline](https://my-tech-profile.dev/sketchnotes/llm-inference-pipeline) - [LangChain4j 1.15 vs Spring AI 2.0](https://my-tech-profile.dev/sketchnotes/langchain4j-1.15-spring-ai-2.0) - [RAG Pipeline vs Agentic RAG](https://my-tech-profile.dev/sketchnotes/rag-vs-agentic-rag) - [Engineering Profile Sketchnote](https://my-tech-profile.dev/sketchnotes/engineering-profile) - [Spring Boot 4.1](https://my-tech-profile.dev/sketchnotes/spring-boot-4-1) ## Machine-readable - Sitemap: https://my-tech-profile.dev/sitemap.xml - Feed: https://my-tech-profile.dev/feed.xml