The current design is not very evolvable. For backwards compatibility, every time we add a new field in one of the relevant objects (e.g. StageInfo) we need to add a default value to the field. Otherwise, the test suite still passes, but it throws some sort of obscure json exception if the field does not exist.
We should let a common interface (JsonSerializable) handle this logic, so we don't need to do it for all classes.