To use custom post types, or not to use

The rule of thumb in wordpress development is that you should stick with the highest level API you can use. From software development perspective it helps you get a better documentation for your code and reduce the maintenance cost due to the backward compatibility policy.

As CPTs have wrapper APIs in core and costume tables do not, it is easy to see that by default you should prefer CPT, and there should be very very very strong reason to use additional tables.

The only somewhat plausible reason to use additional table is if you need to be able to drop it, or you need a different index structure. Even then not sure if you will gain any actual performance benefit over doing it with less optimized queries.

[joking] If you don’t have 20k reputation on this site, additional tables are just not for you [/joking]