<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/styles.xsl" type="text/xsl"?><rss version="2.0"><channel><title>Rida KADDIR | Software Engineering Blog</title><description>Writing about AI-assisted development, clean architecture, and modern development practices.</description><link>https://ridakaddir.com/</link><language>en-us</language><item><title>Spring AI Agentic Patterns - and When Not to Build an Agent</title><link>https://ridakaddir.com/blog/post/spring-ai-agentic-patterns-production-agent/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spring-ai-agentic-patterns-production-agent/</guid><description>Prompt chaining, routing, parallelization, orchestrator-workers and evaluator-optimizer in Spring Boot, plus approval gates, durable run state, and an honest case against reaching for an agent at all.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Spring AI</category><category>AI</category><category>AI Agents</category><author>rida kaddir</author></item><item><title>Spring AI in Production - Prompt Injection and Cost Control</title><link>https://ridakaddir.com/blog/post/spring-ai-prompt-injection-and-cost-control/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spring-ai-prompt-injection-and-cost-control/</guid><description>The two things that decide whether an AI feature survives production. Prompt injection including poisoned RAG documents, guardrails as advisors, and the caching and routing that keep the bill honest.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Spring AI</category><category>AI</category><category>Security</category><category>Prompt Injection</category><author>rida kaddir</author></item><item><title>Spring AI and MCP - Tools That Outlive One Application</title><link>https://ridakaddir.com/blog/post/spring-ai-mcp-model-context-protocol/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spring-ai-mcp-model-context-protocol/</guid><description>Why the Model Context Protocol exists, how to consume a third-party MCP server from Spring Boot, how to build and secure your own, and the two-thirds of MCP that most coverage skips.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Spring AI</category><category>AI</category><category>MCP</category><author>rida kaddir</author></item><item><title>Spring AI Tool Calling - Giving the Model the Power to Act</title><link>https://ridakaddir.com/blog/post/spring-ai-tool-calling-let-llms-act/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spring-ai-tool-calling-let-llms-act/</guid><description>How @Tool turns a Java method into something an LLM can invoke, what actually happens on the wire, why ToolContext is an authorization boundary, and how to fail gracefully.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Spring AI</category><category>AI</category><category>Tool Calling</category><author>rida kaddir</author></item><item><title>Spring AI RAG - Talking to Your Own Documents</title><link>https://ridakaddir.com/blog/post/spring-ai-rag-talking-to-your-documents/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spring-ai-rag-talking-to-your-documents/</guid><description>Retrieval-augmented generation in Spring Boot, from a zero-infrastructure SimpleVectorStore to the ETL pipeline, chunking, metadata filtering and the modular RetrievalAugmentationAdvisor.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Spring AI</category><category>AI</category><category>RAG</category><category>Vector Database</category><author>rida kaddir</author></item><item><title>Spring AI Chat Memory - Making a Stateless Model Remember</title><link>https://ridakaddir.com/blog/post/spring-ai-chat-memory-stateless-llms/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spring-ai-chat-memory-stateless-llms/</guid><description>LLMs forget everything between requests. How ChatMemory, MessageChatMemoryAdvisor and a JDBC repository fix that in Spring AI 2.0, plus the conversation-id change and the tool-call gotcha that catch people out.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Spring AI</category><category>AI</category><category>Chat Memory</category><author>rida kaddir</author></item><item><title>Spring AI Essentials - Prompts, Advisors and Structured Output</title><link>https://ridakaddir.com/blog/post/spring-ai-prompts-advisors-structured-output/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spring-ai-prompts-advisors-structured-output/</guid><description>Message roles, ChatOptions and the cross-provider temperature trap, the advisor chain that wraps every model call, and how to get typed Java records out of an LLM instead of parsing strings.</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Spring AI</category><category>AI</category><category>Advisors</category><author>rida kaddir</author></item><item><title>Spring AI - One Codebase, Many Model Providers</title><link>https://ridakaddir.com/blog/post/spring-ai-one-codebase-many-model-providers/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spring-ai-one-codebase-many-model-providers/</guid><description>How to call an LLM from Spring Boot with ChatClient, and switch between OpenAI, Anthropic and a free local model by changing a single property. Part 1 of a series on shipping AI in Spring.</description><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Spring AI</category><category>AI</category><category>OpenAI</category><category>Ollama</category><author>rida kaddir</author></item><item><title>OpenSpec vs Spec Kit - Why I Switched and Never Looked Back</title><link>https://ridakaddir.com/blog/post/openspec-vs-spec-kit-why-i-switched/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/openspec-vs-spec-kit-why-i-switched/</guid><description>A practical comparison of OpenSpec and Spec Kit for spec-driven AI development. Why OpenSpec&apos;s lightweight, brownfield-first approach fits real-world projects better.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate><category>AI</category><category>Development Workflow</category><category>Spec-Driven</category><category>OpenSpec</category><author>rida kaddir</author></item><item><title>Did Anthropic Just Kill OpenCode?</title><link>https://ridakaddir.com/blog/post/did-anthropic-kill-opencode-claude-subscription-ban/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/did-anthropic-kill-opencode-claude-subscription-ban/</guid><description>Anthropic banned OpenCode from using Claude subscriptions. As someone who built my entire workflow around it, here&apos;s what happened and what it means for the future of AI coding tools.</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>opencode</category><category>Claude Code</category><category>Anthropic</category><category>Opinion</category><author>rida kaddir</author></item><item><title>apitwin - How Frontend Teams Work Ahead of the Backend</title><link>https://ridakaddir.com/blog/post/apitwin-frontend-ahead-of-backend-rest-grpc/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/apitwin-frontend-ahead-of-backend-rest-grpc/</guid><description>apitwin is a CLI tool that lets frontend teams define mock REST and gRPC APIs from a config file, serve them locally, and proxy to real backends as they come online.</description><pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate><category>Frontend</category><category>Development Tools</category><category>REST</category><category>gRPC</category><category>Mocking</category><author>rida kaddir</author></item><item><title>How I Use opencode - Best Practices After Months of Daily Use</title><link>https://ridakaddir.com/blog/post/opencode-best-practices-switching-from-claude-code/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/opencode-best-practices-switching-from-claude-code/</guid><description>A practical guide to using opencode for AI-assisted development, covering AGENTS.md, custom commands, plan/build mode, MCP servers, and my complete configuration.</description><pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate><category>opencode</category><category>AI</category><category>Development Tools</category><category>Productivity</category><author>rida kaddir</author></item><item><title>Testing with AI - Smarter Coverage, Faster Feedback</title><link>https://ridakaddir.com/blog/post/testing-with-ai-smarter-coverage-faster-feedback/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/testing-with-ai-smarter-coverage-faster-feedback/</guid><description>Discover how to use AI to write better tests, find edge cases you&apos;d miss, and build a sustainable testing habit that actually sticks in your development workflow.</description><pubDate>Sat, 21 Feb 2026 00:00:00 GMT</pubDate><category>Testing</category><category>AI</category><category>Quality</category><category>Development</category><author>rida kaddir</author></item><item><title>Building Dev Platforms in the AI Era - Challenges and Lessons Learned</title><link>https://ridakaddir.com/blog/post/dev-platform-in-ai-era/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/dev-platform-in-ai-era/</guid><description>Learn when to build vs buy developer platforms in 2026, how AI changes the equation, and practical lessons from rebuilding a custom platform with small teams.</description><pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate><category>DevOps</category><category>Platform Engineering</category><category>AI</category><category>Infrastructure</category><author>rida kaddir</author></item><item><title>Spec Kit - GitHub&apos;s Toolkit for Spec-Driven AI Development</title><link>https://ridakaddir.com/blog/post/spec-kit-github-spec-driven-development-ai-coding/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/spec-kit-github-spec-driven-development-ai-coding/</guid><description>GitHub&apos;s Spec Kit brings structured spec-driven development to AI coding assistants, forcing clear specifications before any code generation for better, more reliable output.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><category>GitHub</category><category>AI</category><category>Development Workflow</category><category>Spec-Driven</category><author>rida kaddir</author></item><item><title>Advanced AI Coding - Context Engineering and Spec-Driven Development</title><link>https://ridakaddir.com/blog/post/advanced-ai-coding-context-engineering-and-spec-driven-development/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/advanced-ai-coding-context-engineering-and-spec-driven-development/</guid><description>Level up your AI-assisted development with context engineering techniques, spec-driven workflows, custom skills, and advanced prompting patterns for production-quality code.</description><pubDate>Wed, 10 Sep 2025 00:00:00 GMT</pubDate><category>AI</category><category>Development</category><category>Context Engineering</category><category>Best Practices</category><author>rida kaddir</author></item><item><title>Vibe Coding - A Developer&apos;s Guide to AI-Assisted Development</title><link>https://ridakaddir.com/blog/post/vibe-coding-ai-assisted-development-for-developers/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/vibe-coding-ai-assisted-development-for-developers/</guid><description>Learn what vibe coding is, how AI-assisted development works, and the best practices for collaborating effectively with AI coding tools as a developer.</description><pubDate>Sat, 25 Jan 2025 00:00:00 GMT</pubDate><category>AI</category><category>Development</category><category>Tools</category><category>Programming</category><author>rida kaddir</author></item><item><title>Spring Boot Observability using OpenTelemetry, Tempo, and Loki</title><link>https://ridakaddir.com/blog/post/java-observability-using-opentelemetry-tempo-and-loki/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/java-observability-using-opentelemetry-tempo-and-loki/</guid><description>Set up production-grade observability in Spring Boot with OpenTelemetry, Grafana Tempo for distributed tracing, and Loki for correlated log querying.</description><pubDate>Fri, 12 Apr 2024 00:00:00 GMT</pubDate><category>Java</category><category>Spring Boot</category><category>Observability</category><category>OpenTelemetry</category><category>DevOps</category><author>rida kaddir</author></item><item><title>NestJS Clean Code Using Hexagonal Architecture</title><link>https://ridakaddir.com/blog/post/nestjs-clean-code-using-hexagonal-architecture/</link><guid isPermaLink="true">https://ridakaddir.com/blog/post/nestjs-clean-code-using-hexagonal-architecture/</guid><description>A practical guide to implementing hexagonal architecture in NestJS, keeping your business logic independent of frameworks, databases, and infrastructure concerns.</description><pubDate>Thu, 07 Apr 2022 00:00:00 GMT</pubDate><category>NestJS</category><category>Architecture</category><category>Clean Code</category><category>TypeScript</category><author>rida kaddir</author></item></channel></rss>