I find it useful to write out a workflow of things the code will need to do from a high level.
Ex: “Validate form input” or “filter API response based on submitted criteria”
Those become doc blocks for functions and classes.
Then I break those down into more granular directives still more abstract than pseudo code.
Ex: “determine whether name input is alphabetical” or “iterate response. check contents of all 3 phone fields against submitted value”
Writing both code and tests against that then becomes nearly trivial.