Those who create end-user software are likely to be familiar with the idea of UX testing, whereby random potential users are placed in a room & given a set of tasks to carry out using the software being tested while the team creating the software watches in secret from the other side of a one-way mirror. The team is nearly always surprised to discover how much harder their software is to use than they thought it was. I think a variant of this approach could prove useful for the underlying code itself too.
Instead of random potential users, we would need to use other programmers who may need to read the code later. The special room wouldn’t be necessary either. Instead we’d have each of these programmers attempt to read the code alone, try to understand it, document it, sketch an architecture diagram for it and finally try to refactor or extend the functionality of the code. At the nd, the original author(s) would look at all the artifacts produced and discover any ways in which their code may be misunderstood by others in future. This would involve more effort than a code review so should be reserved for code that is particularly important & expected to survive a long time. Alternately, it can be used an an exercise to make people realize that reading their code is harder than they think.