Khashayar Nourian


Software Engineer | Technical Consultant

Reliable software systems, practical architecture, and AI-enabled applications.

I design and modernize software platforms, improve performance, and help teams ship reliable software without unnecessary complexity.

Selected work

Projects I've built

All projects

PulseDevelopment: Started - Updated

Pulse checks whether a service behaves correctly from different networks, not merely whether one monitor can reach it. A central ASP.NET control plane distributes definitions to deployable agents, which return measurements over HTTP.

HTTP, ping, and TCP checks record latency and failures; the dashboard compares recent results and agent health. SQLite keeps the first deployment simple, while shared contracts keep the server, agents, and Blazor UI aligned.

Read more ...

cowork-serverDevelopment: Started - Updated

cowork-server is a C# API for shared coworking meeting rooms. It checks access, room availability, opening hours, booking windows, duration limits, conflicts, and price snapshots before saving a reservation.

Commands and queries stay separate inside one application and database. The booking lock coordinates competing requests only within one process, so a multi-instance deployment would need another concurrency mechanism.

Read more ...

From the notebook

Latest writing

All posts

Idempotency: Make Retries SafePublished At:

A timeout can leave a caller unsure whether work succeeded. Idempotency makes repeating the same operation safe for its intended business effect, even when the acknowledgement is lost.

A small C# background worker demonstrates stable keys, saved results, and duplicate handling, with explicit limits around concurrency, restarts, retention, and external effects.

engineering architecture #csharp #dotnet #idempotency #background-processing

Read more ...

CQRS with a separate read store: useful projections, new guaranteesPublished At:

A separate read store lets a query model match its screen or report instead of the write model. It can remove expensive joins and let read traffic scale independently.

The new boundary also creates a synchronization problem. Reads can be stale, projections must recover safely, and the system has to state what a user should expect after a command.

engineering architecture #architecture #cqrs #projections #eventual-consistency #dotnet #csharp

Read more ...

Minimal CQRS: separate code paths, keep one application and one databasePublished At:

Minimal CQRS keeps commands and queries in one deployed application using one database. The paths differ because commands protect state changes while queries return data shaped for a caller.

This retains transactions and immediate reads after a command. It does not provide independent read scaling, denormalized reporting projections, or isolation from a busy write workload.

engineering architecture #architecture #cqrs #cqs #dotnet #csharp

Read more ...