^card balance is stored on the card itself, not the machines.
So when you get it loaded in person, the employee can update the card immediately. When you do it online, you have to wait for the system to sync to update it as the balance can not be updated until you tap your card.
When you tap your card, the goal is to keep the number of operations to a minimum.
This is what happens now:
If NEW BALANCE = Y, increase BALANCE by Y VALUE & change Y to N
If BALANCE > FARE, subtract FARE from BALANCE & display FARE PAID
If BALANCE < FARE, display INSUFFICIENT FUNDS
When you load the card, the system changes to Y ($50), or whatever your value is. Thing is, the terminal needs to be updated to receive this information. When loading in person, the terminal at the cashier is updated instantly, and thus can update the fare value on your card instantly.
essentially 3 lines of code. When a new amount is loaded onto a card, all terminals are updated with that information. If you held the balance of each card on the system side of things, which would allow for instant updates in balance, you would have to get terminals to query databases to look for balance information when you tapped your card, which would considerably slow down the tap speed to the point of crippling the system.
My understanding of PNG is that it will allow for instant updates as new tech is being installed in the new readers that allow the entire system to be updated immediately after a card load online.