ORBIS 1.0 shipped on 18 May 2010. I wrote most of it, which at the time seemed reasonable and in retrospect was a significant single point of failure.

The geometric core — the bundle adjustment and the error propagation that runs underneath everything — is recognisably the same code today. It has been refactored, extensively tested and moved between three languages' worth of surrounding infrastructure, but the mathematics and the structure are the 2010 design.

I have proposed rewriting it three times. Each time, someone on the team has asked what specifically we would do differently, and each time the honest answer has been 'nothing important'. Resisting those rewrites is probably the most valuable engineering decision I have been involved in.

What has changed completely is everything around it: the ingest, the storage model, the scheduling, the delivery, the API. ORBIS 4 will look nothing like ORBIS 1 from the outside.

The lesson I take is not 'never rewrite'. It is that the part of a system worth keeping is usually the part that encodes a hard-won understanding of the problem, and the part worth replacing is usually the part that encodes an assumption about the technology of the day.