Computer Laboratory


I am a first year PhD student at the Computer Laboratory under the supervision of Steven Hand (2012 - ) and a member of the NetOS research group and St John's College

I also did my undergraduate degree here in Cambridge, where I was supervised by David Evans and Jat Singh for my final year dissertation (2009-2012), which is available here .

In the past, I interned at the Max Planck Institute for Software Systems under the supervision of Allen Clement and Rodrigo Rodrigues (2011), and at Imperial College London, with Peter Pietzuch and Eva Kalyvianaki (2012). Before that, I worked on the JMEDS Framework for Web Services as part of an internship with Materna GmBH (2010)

An even longer time ago, I had a brief stint studying British and French Law (2008-2009), at Cambridge and Paris II, and took the French Baccalaureate, Scientific Section (2008).

My CV is available here .


My main interests lies in distributed systems, more specifically, in building dependable replicated systems with a strong theoretical foundation. I am specifically interested in looking at consistency.

I believe that we should abandon the illusion that a serializable, unique world view of the world exists, and explicitly reason in terms multiple execution paths and diverging views of the world.

Eventual consistency, causal consistency, Dynamo-like systems, for me, are steps towards that direction, but the area is still somewhat of a mess. Why? Because we're still blocked by our gut instinct: a system is consistent if and only it can converge.

I'm trying to argue that this shouldn't be the case. It's unrealistic to think that a single view of the world should or even could exist at any given time, given how heavily replicated/concurrent systems are nowadays. If you give up on that belief but instead start explicitly reasoning about multiple world views, and care about these being individually consistent, then I think things start getting easier.

The core questions then become: how do these multiple execution paths, or branches arise, how do you keep them isolated, or conversely, how do you reconcile them? Do you even want to do that?


In 2012-2013, I have or will be supervising the following courses:

Publications & Posters

More to come in the near future hopefully, but in the mean time, here's a list of posters and talks given

  • EuroDW 2013 - Eurosys Doctoral Workshop - Branch Consistency Poster Abstract
  • Eurosys Main Poster Session - StreamShell, Secure Stream Procesing Poster Abstract (Work done as part of an internship at Imperial)


Drop me an email if you'd like to chat (or argue, it's always more fun)


Natacha Crooks
University of Cambridge
William Gates Building
15 JJ Thomson Avenue
Cambridge, CB3 0FD, UK