Why shortcodes still matter
Blocks are the modern way and shortcodes are not going away, because they work everywhere blocks do not: inside a page builder, in a widget area, in a theme template, in a classic editor a client refuses to give up, and inside another plugin's content field.
For an agency maintaining sites on several themes and builders, a shortcode is the only mechanism guaranteed to be available on all of them. That is the real argument for it.
What a list shortcode should control
How many. The most-used option by a distance — a sidebar wants three, a What's On page wants everything.
Which events. Filtering by category or tag is what lets one site show “live music” on one page and “comedy” on another from the same data.
How far ahead. A window, so a page can show this month rather than the next fifty events.
What to show per event. Whether images, descriptions and locations appear, so the same list can be a compact sidebar or a full listing.
What to say when empty. Genuinely important. “No events” on a venue's front page is a bad look, and being able to write “Programme for the spring announced in January” instead is worth having.
Attribute names are the thing that goes wrong
Every plugin's attributes are different, they are easy to mistype, and a mistyped attribute is nearly always ignored in silence — so you get a list that looks nearly right and is not filtered at all. Always check the shortcode against the documentation for the version you actually have installed, rather than against a blog post written two versions ago.
For reference, this plugin's is [meridian_events], and it takes view (list or month), limit, days and category:
[meridian_events view="list" limit="5" days="90" category="concerts"]
The same attributes are listed on the plugin's own settings screen, which is the copy to trust if this page and your installed version ever disagree.
The performance question
A list shortcode should query events, not occurrences. If the plugin materialises repeats into database rows, a list of the next ten is a query across potentially thousands of rows. If it expands rules at render time, it is a small query plus a fast calculation — the expansion above took microseconds.
Where this becomes visible is a sidebar shortcode on every page of the site. Multiply a slow list by every page view and it stops being a detail.