Engineering insights from SaaSForge — cloud-native architecture, observability, GenAI, and building SaaS products.

Part 7 of the Production GraphQL series — federation with a GraphQL router, client identification, operation-level metrics, error classification, schema analytics, and performance optimization for your DGS API.
Read more
Part 6 of the Production GraphQL series — how to carry type safety from your DGS backend all the way to Vue components using GraphQL Code Generator, typed document nodes, tiered fragments, and a shared operations package.
Read more
Part 5 of the Production GraphQL series — unit testing DGS components with Spock, evolving your GraphQL schema without breaking clients, and federating multiple services into a unified graph.
Read more
Java 21 virtual threads solve thread scalability for blocking code. WebFlux solves backpressure, streaming, and event-driven composition. They are not competitors — they solve different problems, and the 'WebFlux is dead' take is dangerously wrong.
Read more
Part 4 of the Production GraphQL series — GraphQL subscriptions over WebSocket, choosing between Mono and CompletableFuture for data fetchers, and AOP-based observability for your GraphQL API.
Read more
Push-based deployment with Terraform and Helm reprocesses your entire infrastructure to update one container tag. Locked state buckets, stuck Helm releases, and developer bottlenecks are the real cost. GitOps with Flux CD separates what changes often from what changes rarely.
Read more
Part 3 of the Production GraphQL series — authentication and authorization with @PreAuthorize, error sanitization to prevent information leakage, and query depth and complexity limits to stop abuse.
Read more
How to test Axon 5 aggregate state machines using Spock and AxonTestFixture — from creation commands to guard clause rejections, with practical patterns for event chaining, timestamp handling, and injected services.
Read more
Part 2 of the Production GraphQL series — how DGS data loaders batch database calls to eliminate the N+1 problem, when to use MappedBatchLoader vs BatchLoader, and pagination patterns for GraphQL APIs.
Read more
Part 1 of the Production GraphQL series — how Netflix DGS and Spring for GraphQL merged into one stack, schema-first development patterns, code generation, and the three-layer type system that keeps your API maintainable.
Read more
Command metadata doesn't automatically propagate to events in Axon Framework 5. Here's how CorrelationDataProvider fixes the silent data loss — and why it's so hard to catch.
Read more
How we debugged intermittent 'Session not found' errors in a Spring AI MCP server on GKE — and why switching to stateless transport is the right answer for Kubernetes deployments.
Read more
How we migrated from the traditional Flux bootstrap approach to the Flux Operator on GKE Autopilot, managed entirely with Terraform — and why a single FluxInstance CRD replaces 660KB of generated YAML.
Read more
Why ReactiveSecurityContextHolder is always empty inside Axon query handlers, three approaches we considered, and the Axon MetaData solution that keeps query objects clean.
Read more
A hands-on account of migrating a CQRS/ES application from Axon Framework 4.12 to 5.0 — the API upheaval, replacing sagas with stateful event handlers, and the reactive payoff.
Read more
Vendor-locked APM agents create costly dependencies. Learn why OpenTelemetry is the better path — and how to auto-instrument your Kubernetes workloads with the OTel Operator's Instrumentation CRD.
Read more