Category: Web
-

Why You Should Never Use Floating Point for Money
After years of maintaining legacy systems, I have seen more bugs caused by improper currency handling than by actual logic errors. Floating-point arithmetic is designed for scientific calculations where precision is secondary to range, making it fundamentally unfit for financial systems. When you use float or double, you are essentially gambling with rounding errors that…
-

Optimizing Search Performance with CQRS: Relational Writes and NoSQL Reads
Most developers start with a single relational database. It works well until your search requirements grow beyond simple primary key lookups. Once you introduce complex filtering, full-text search, and high-concurrency read patterns, that ACID-compliant relational engine starts to crawl. The solution isn’t a bigger server — it’s a different architecture.
-

Granular Authorization in Spring Boot: Beyond Role Checks
Picture this. You were planning a beautiful day, but your product manager sprints to your desk at 9 AM. There’s a “minor” data leak. A junior accountant in the Berlin office just discovered they could view the CEO’s payroll details by changing a userId in the URL. You look at the code. There’s a glorious,…
-

Making Testcontainers Work with Lima on macOS
I switched from Docker Desktop to Lima a while back. Lighter, faster, no licensing headaches. For day-to-day Docker use it is seamless. Then I added Testcontainers to a Spring Boot project and the integration test started failing with the least helpful error message in the ecosystem: Could not start container / There are no stdout/stderr…
-

Google Cloud Run Limitations: When Serverless Complexity Outweighs the Cost Savings
Google Cloud Run is a great fit for simple APIs, but once you need large file uploads, high availability, and event-driven reliability, the workarounds pile up fast. This post walks through the real cost of fighting Cloud Run’s constraints and when GKE Autopilot or Compute Engine becomes the more honest choice.
-

The Command Pattern in Java: Eliminating Fat Service Classes with Commands and Handlers
Fat Service classes are a liability — one class that does everything is a class that’s impossible to test and dangerous to change. This post shows how to apply the Command pattern in Java using Records, Repository interfaces, and single-responsibility Handlers to keep your business logic clean and isolated.
-

Spring Security 6 OAuth 2.1: Replacing Implicit Grant and ROPC with PKCE
If your Spring Security config still uses the Implicit Grant or Resource Owner Password flow, you’re running on borrowed time. This post breaks down why OAuth 2.1 makes PKCE mandatory, kills legacy flows, and shows the exact config difference between a legacy setup and a production-hardened one.
-

Why JavaScript Floating Point Math Breaks Your App (And How to Fix It)
JavaScript’s IEEE 754 floating point format means 0.1 + 0.2 !== 0.3 — and that’s just the obvious case. This post covers why it happens, where it silently breaks production code, and four concrete strategies: toFixed for display, integer arithmetic for money, a scale-round-ceil pattern for computed floats, and decimal.js for complex chains.
-

Fullstack 2026: Building the Modern Spring Boot 3.4 and React 19 Architecture
After 15 years in the industry, the author emphasizes the need for simplicity in development. The post discusses using Spring Boot 3.4 and React 19 to streamline setups by eliminating boilerplate, automating infrastructure, and enhancing developer experience. Key strategies include Docker integration, virtual threads, and proxy configurations for efficient development.
-

Google Sign-In for React Native: The Complete Setup Guide That Actually Works
Integrating Google Sign-In in a React Native app involves configuring Firebase and Google Cloud Console, managing SHA-1 fingerprints, and using the @react-native-google-signin library. Common issues arise post-deployment due to silent failures linked to mismatched fingerprints, emphasizing the need for accurate configuration across environments. Proper setup is crucial for a smooth user experience.
