For example, in Accept, I don't see the reason why we use pointer for the ballot. Since we actually do a Clone() to make a copy of the ballot. I think a normal ballot(not a pointer) is sufficient. Also it can reduce some GC pressure.
So in order to make the change, we will need to replace NewBallot(x,y,z) with Ballot{x,y,z} in instance.go and other related files.