Switching costs are everything that makes leaving expensive: data migration, retraining, integration rebuilds, contractual penalties, lost workflows, lost institutional memory, and the political cost of admitting the original choice was wrong. High switching costs make customers stick even when a competitor has a marginally better product.
Software companies often engineer switching costs deliberately through deep workflow integration, accumulated user data, and custom configurations. The strongest switching costs are the ones the customer creates themselves through use.