Good tests double as documentation. I'd place designing for testing, followed by formal verification, fuzzing, mutation testing, unit testing, and finally (rather limited) integration testing, as more important than documentation.
Good function signatures and variable names also double as documentation. Think of documentation as that awful intersection crammed full of distracting signage. Should I speed up or slow down? Warning, elk sign ahead! Good product requires minimal documentation. But no amount of documentation will ever be sufficient for bad product.