Johnny Hashoul

I'm Johnny, a software architect focused on scalable distributed systems, clean architecture, and AI-driven engineering. I write about the systems I build and what I learned along the way.

More about me →

Latest posts

All posts →

Testing purposes post

June 20, 2026

Buffering is used to temporarily store data while it is being moved from one place to another.

  • technology
  • testing

Modern Microservices Challenges

September 5, 2022

How we built an idempotent, zero-intervention email service that handles millions of requests per hour - state-machine processing, auto-retrying HTTP clients, in-memory backoff, and Kafka retry/DLQ patterns for resilience.

  • microservices
  • architecture
  • kafka
  • resiliency
  • spring-boot

Dual write and data inconsistency

October 15, 2020

Inserting to the database succeeds but publishing the event fails — and now two systems disagree. A look at distributed transactions, logical transactions, and why the outbox pattern is the right way to avoid dual-write inconsistency.

  • microservices
  • architecture
  • kafka
  • data-consistency
  • outbox-pattern

Buffering for a better performance

September 20, 2020

Sooner or later a database, web server, or third-party service becomes a bottleneck. Request aggregation through buffering can prevent or minimize the overload — and here's a tiny, simple-to-use Java library to do it.

  • performance
  • java
  • buffering
  • rate-limiting
  • backend

Get new posts by email

Short, infrequent. Unsubscribe anytime.