KadraPractice

A C# and ASP.NET Core practice project with real concurrency bugs

Reserva is a working ASP.NET Core booking service. Two people can book the same slot, times drift for users in other timezones, and classes overfill under load. You fix each bug in the real codebase and open a GitHub pull request. An AI teammate reviews it, and a hidden dotnet test suite decides whether it passes.

Real GitHub PRs · Graded by dotnet test · Free during beta

What you'll actually do

Three bugs that only show up under real traffic

Booking systems break when requests arrive at the same moment or from a different timezone. These are the bugs tutorials skip, in a C# codebase you didn't write.

BOOK-801

Two requests can double-book the same slot

Booking reads availability and then inserts the reservation in a separate step with nothing making it atomic, so two concurrent requests can both win. To pass, a slot holds one active booking, the losing request gets a 409 conflict, and cancelling frees the slot again.

BOOK-808

Slot times are stored in server-local time

Start and end times are saved and compared in the server's timezone, so they shift for users elsewhere and again around daylight saving changes. To pass, slots are stored and compared in UTC, shown in the user's own timezone, and a DST change doesn't move an existing slot.

BOOK-815

Capacity limits break under concurrent bookings

For a class with N seats, the flow counts bookings and then inserts without locking, so a burst of requests overfills it. To pass, bookings never exceed capacity, exactly capacity requests succeed in a burst, and a cancellation frees a seat.

How grading works

dotnet test decides whether the fix works

Each Reserva ticket has a hidden xUnit test file that's added to your branch at grading time. The result appears on your pull request as a check.

  • The hidden tests run with dotnet test on the .NET 8 SDK in a clean sandbox. The race tests fire concurrent requests at your code, so a fix that only works one request at a time won't pass.
  • An AI teammate reviews the diff in the PR thread and can request changes. That review is feedback; the tests decide pass or fail.
  • If a check fails, the test output is on the PR. Push another commit and it runs again.
  • Shipped tickets and tracked hours go on a certificate with a public link for your résumé or LinkedIn.
See exactly how the grading pipeline works →
Who it's for

Who the C# track is for

Reserva assumes you can write C# and know the basics of ASP.NET Core. It tests whether you can find a concurrency bug and fix it properly.

Developers heading for .NET teams who want work that looks like what those teams ship.

Juniors who have heard of race conditions but have never had to fix one.

Self-taught devs and bootcamp grads who have never had a pull request reviewed.

Anyone preparing for interviews who wants a concrete concurrency story to tell.

Not for: people new to C#. Reserva is about debugging an existing service, so learn the language first.

FAQ

Questions about the C# track

What do I need installed?

The .NET 8 SDK if you work locally. Every Reserva repo also opens in GitHub Codespaces with the SDK ready.

Who reviews my pull request?

An AI teammate reviews the diff in the PR thread and can ask for changes. Whether the fix is correct is decided by the hidden dotnet test suite.

How do the tests check for a race condition?

They send concurrent booking requests for the same slot or class and count how many succeed. With the bug, too many get through.

What happens if the tests fail?

The failing test output is on the pull request. Push a new commit and the check runs again.

Can I put it on my résumé?

Yes. Finishing the sprint gives you a certificate with the stack, the tickets you shipped and your tracked hours, behind a public link.

Does it cost anything?

It's free during the beta.

Take BOOK-801 and stop two people from booking the same 3 PM.