"This might mean that a transaction that is open and is mostly doing writes will never be committed until something is written"

You mean mostly doing _reads_?

Ok, yeah, I think it makes sense then to add a higher level wrapper to grades.grade. `progress_summary` is only called once, by `progress`, so we probably don't have to wrap it with extra transaction management.