Planual Rules regarding Native Versions

Select the Current and Actual checkboxes within Version Settings to use calculation functions that deliver results based on the version, such as CURRENTVERSION(), ACTUALVERSION(), ISCURRENTVERSION() and ISACTUALVERSION().

When selected, the Current Version acts as a top level for Versions, which means the value from the Current Version is returned when pulling data from a source module with Versions into a target module without Versions. This inherent behavior can streamline models and avoid additional functions or SELECT statements.
Engine Applicability: Classic Hyperblock and Polaris

While this is a simple construct and it might be OK for simple models, it effectively adds size to models every time versions are used in a module even if you don't want the variance. 

Also, in modules with three or more dimensions, if you have calculation line items and aggregations, the results may not always give the expected result due to different calculation priorities. Finally, you can't amend the summary method for a version formula within the versions setting.

Use these as a simple, administrator-led control for read and write access to versions. For more granular control, use Dynamic Cell Access.

Using switchover means the historic periods are effectively cleared out. This does have the benefit of reducing model size as the historic cells are cleared, but switchover should be moved forward only. Moving it backward will blank out the respective period removing any values that were previously held.

Versions have built-in functionality that's not available for normal lists. However, a large number of Versions (for example, 10+), can have performance implications due to the block structure. Review the need for a large number of Versions, and if the native functionality isn't critical or needed, consider using a normal list to represent Versions.