Sitecore is an extremely flexible system; in fact most of Sitecore is built with the extensibility and customization functionalities which is provided. This includes pipelines, events, commands, SheerUI, providers and more. All in all: there is not much which cannot be achieved in Sitecore and only the imagination of you and your client sets the limits of customizations – and believe me, in my work of helping out clients and Sitecore partners all over the world, I’ve seen Sitecore completely twisted in many ways. I’ve seen Sitecore’s entire layout engine replaced with an item based layout definition, with subitems representing placeholders and subitems representing presentation elements. I’ve seen publishing and item saved pipelines so crammed full of custom functionality that performance was non-existent and I’ve seen XSLT’s with one line of code: a call to an extension function which would return an entire HTML structure as a string.
So where do we draw the line in the holy name of bending functionality and giving the customer “what they want”? Remember:
- Convincing the client to choose standard functionality is also an option.
- Each change of standard Sitecore functionality is potentially expensive – for you and for the client.
- If possible, do not replace Sitecore functionality, extend it.
- Think about what you put into Sitecore: Content and functionality can be accessed through .NET code and does not necessarily need to be added to the Sitecore DB’s or in a pipeline.
- Keep track of your customizations – source control it and document it.
- Remember that your customizations will have to upgrade with Sitecore.
- Stay true to yourself: If it feels wrong, don’t do it.
In short, just because you can does not mean that you should:-)