When you boil a critique down to its very core, you really end up with only three parts to it. Practically any critique can be broken down into something like this:
In my experience, the usefulness of a critique is inversely proportional to the ambiguity of the feature and reason blocks above. The less ambiguous the description of the feature or the reason is, the more useful it is to me, since I can figure out exactly what the issue is. Once I know exactly what the issue is, I can start coming up with solutions for it. This is really what’s important to us as devs - if the reasoning or the problem is ambiguous, it means we need to spend our time and energy investigating the problem first, before we can start brainstorming the solution.