A notification badge looks like a small feature. In a distributed application, it can expose a large architectural assumption.

I recently investigated a badge that sometimes stayed stale in an ASP.NET Core and Blazor application running across multiple server instances. The notification itself had been created successfully. Durable state was correct. A separate push path could also complete. Yet the visible count did not always change until the user left the screen and returned.

The bug was not really about arithmetic. It was about assigning too much authority to a realtime transport.

The hidden assumption

The UI initially loaded its count from the server and then relied on live events to remain current. That feels reasonable while developing against one server with a stable connection. In production, several ordinary conditions weaken the assumption: