I would recommend doing both approaches, for different purposes.
Given / When / Then is good for testing communication. This format brings assurance that what you are testing is what the business owner / requirements writer intended. The bugs mainly caught by these tests, IME, are ones where the business owner intended X and the dev did Y. Often, these tests (if the devs read them) will "catch bugs" before they are implemented, because the dev will come to tell you that the test is wrong. A conversation with the business owner usually clears up where the issue is, and often it is a communication issue. These tests will also catch basic "the feature doesn't work" issues that somehow leak through the developer's unit tests.
However, Given / When / Then tests often carry a substantial amount of overhead. First, writing the G/W/T format tends to take more time than a checklist, especially to write this format well. Second, to get the most value from G/W/T tests, you need to ensure that both the business owner and the developer read them before coding starts. Often developers, especially, horde their precious work time - the less you have for them to review, the more likely they are to be involved. Finally, IME maintenance for tests implemented with G/W/T languages like Cucumber tends to be more costly than e.g., JUnit tests, mostly because there is the additional "English" layer on top of the libraries. Moving from English to code effectively has some quirks that do create additional maintenance work. It's easy to end up with test steps that seem to do one thing in English but actually do another in code, especially if you have multiple test implementors. In general, you want a test pyramid - acceptance tests should be the smallest group of tests, then system integration tests, then component integration tests, then unit tests.
Personally, I use the Given / When / Then format for only those things that have clear requirements around them that the business owner cares about. For some code, this will include mainly happy path scenarios while the engineers will be the best ones to determine how error cases should be handled. In other cases, there are requirements around error cases that the business cares about deeply and additional Given / When / Then style outlines will be needed for those cases.
I usually then use a list or checklist to cover the other scenarios or test work that the business owner doesn't care about. This is mostly error cases, but will also include things like logging, metrics, documentation, very technical aspects of the feature like queue processing performance, and so on.