extract QuestionState, genericize improvement_job()