All that comes into parse() is the "raw" description string. You need to parse this message to figure out what it contains. In many cases, this would correspond to an event you want to generate (e.g., a switch turning on or off). The zigbee.getEvent() method is a sort of "shortcut" you can use to generate an event object from this data if the device uses standard clusters and attributes and this is one that this method knows about. For simple devices like switches, it very well could.
An alternative approach you'll see in some drivers is using zigbee.parseDescriptionAsMap() instead. Then you can inspect the (keys and) values in the resulting map object yourself and build/generate events as needed. This is the approach Hubitat developers normally use themselves, as far as I know, with zigbee.getEvent() likely just being around for ST compatibility (though certainly usable if it works for the messages your device sends).
The previous steps really just created an event object; now you need to pass it to the platform to actually create/generate the event itself. Calling sendEvent() is one way you can do that (returning an event object itself, whether created from the first method above or manually with createEvent(), which just makes the object but doesn't "send" it, is another, though also something I don't think most Hubitat drivers do).
This document (and ones it links to) explains more about the above and demonstrates the typical methods used by Hubitat drivers: