A distributed system has no shared clock, yet we still need to know what could have caused what. Logical clocks stamp events with counters instead of times: Lamport clocks keep one number per process, vector clocks one number per process for every process.