The Base Class With One Subclass
Decide what you would do from the brief alone, including whether you would change anything at all. Everything below it is available, but the exercise stops working if you open it first.
AbstractReportExporter defines a seven-step template method with seven overridable hooks. It has exactly one subclass, CsvReportExporter, which overrides two of them. You have been asked to add a PDF export.
Making PDF a second subclass and adding the eighth hook the base class needs to accommodate it. This is the path of least resistance, it is exactly what the class was built for, and it makes the original design look vindicated — the extension point was used. What follows is mechanical: the hook is used by one subclass, the ninth arrives with the next format, and the "shared" superclass becomes the union of every format's special cases, so that no format can be changed without checking all of them. The moment a second case appears is the one chance to test whether the first guess was right; taking the extension point is how that chance is spent.
Read this even if you are confident. It is here rather than behind a button because it is the answer most teams actually ship, it passes review, and the cost of it does not arrive until the change after this one.