Friday, June 05, 2009

Just because you can doesn’t mean you should

For those of you who don’t know this; I make my living as a Sitecore Professional Services Consultant. Understand this in the context of working with the Sitecore product as a consultant, I don’t actually work for Sitecore the company.


My job, if you will, consists primarily of establishing contact with newly started Sitecore Partners or want-to-become Partners, and bringing to them whatever skills I can offer to help them take those first shaky steps when bringing their first Sitecore Project to life.


Don’t worry, am not going to start any kind of sales pitch here, that’s not what blogs this blog are is for. I’m only telling, so you know what sort of context this post is in and where my experiences are coming from.


As you can maybe imagine (or even remember still?); the myriad of questions in relation to Sitecore coming from developers, sales people, project managers and so on are many and not far between. Nothing wrong with that, obviously, we all have to learn. Mostly the questions start out around the capabilities of the product, “can” questions. After this, they move into “how”, and ultimately (in the cases where I’m actually lucky enough to be around for the entire project) “when”.


"Can” questions

Initially, when requirements are being gathered, it’s a heap of “Can Sitecore do this?” type of questions. To name just a very few examples:


  • Can you integrate Sitecore with SharePoint?
  • Can you use the AJAX toolkit on a Sitecore site?
  • Can Sitecore deliver Flash content?
  • Can we build a database of our people and offices in Sitecore and have them shown on the site?
  • Can we have search options on our site?
  • Can Sitecore integrate with Google Analytics?
  • Can we implement breadcrumbs with Sitecore?


There are, of course, many more questions that are usually asked – as I’m sure any member of the Sitecore sales team will tell you as well. Incidentally, the answer to all of the above questions is “yes”.


And now we’re getting to the point. Working with Sitecore – how often is it, that you actually have to sat “No”. “Sorry. Can’t do that with Sitecore”?   While I have no statistics on it, I can still state without shaking my hand that this very rarely happens. Sitecore allows you to say “Yes. Can do” to almost any requirement, no matter how far fetched it may seem or even be.


Let’s not get too carried away, however, this is not quite as amazing as it might appear on the surface. If we boil it down to the bone, Sitecore can be described as an “ASP.NET application that adds Content Management services to your ASP.NET websites”. Right – I’m sure there’s a hundred different marketing spins to be made here, but bear with me… ;-) 


Sitecore is an ASP.NET application. It sits, talks, walks and sounds like an ASP.NET application. And here’s the good bit – and the reason you can answer “yes” to almost any requirement – anything you can do in ASP.NET, you can continue doing – Sitecore or no Sitecore involved.


Even the Sitecore product itself is flexible to the bone - (almost) everything is based on configuration files, and they can be tweaked and twisted or completely rewritten – in case there’s a particular feature you are missing, or if there’s a certain way Sitecore works that you want to change or even remove entirely. A blessing, right?


Wrong!  And on after-thought; “Wrong… mostly!”


Don’t get me wrong. I totally get where Sitecore is coming from, in wanting to create as flexible a platform as possible. As any software vendor on the market; the more requirements you can say “yes” to, the more sales you are likely to get. This is as simple and obvious as can be, really.


I’m just saying; maybe “Yes. But…” is a better answer. Let’s take a look at some more “can” questions. These are not fictional by the way, they are real questions asked by real people.


“Can” questions part 2


  • Can you rewrite how Sitecore creates new items, so that all language versions are created instead of just the current language you are editing?
  • Can you use ASP.NET Master Pages and Content Pages with Sitecore?   Does Sitecore support nested Master Pages?
  • Can you work with Web Parts in Sitecore?
    • This one deserves a closer examination; and after doing that what is usually really asked here is, “Can I put my page into edit mode, and add/remove Web Parts on different placeholder areas of the page?”
  • Can I use Microsoft Word to edit my pages?
  • Can I use the Microsoft MVC Framework with Sitecore?


Do you see where this is going?


What are these people really asking for?  Features?


Nope. In the vast majority of cases, these are not feature requests. These people are looking for familiarity.


Yep. That’s right. Familiar ground to stand on. Something known, as opposed to something unknown. Can we blame them?  Absolutely not. I think we all have a bit of fear of the unknown, to one degree or another.


And of course, Sitecore is fully aware of this as well. They have released features specifically to address some of these very questions already, and there are more to come. That way, we can continue saying “yes” and everyone wins. Just keep this point in mind however – familiarity. Not features. More often than not.


The solution

I guess the word “solution” is not really appropriate, as it seems to indicate there was a problem to begin with. Look behind the question. Find out why it is being asked in the first place, and then work from there.


Why does the person want to change how Sitecore creates language versions?


Turns out, this is apparently how other major CMS vendors do it. Now I happen to think Sitecore is doing this the right way, but this person came from a different background with different experience.   He was looking for a way to solve (amongst other things) content translation flows – and was maybe not aware of the various tools and gadgets that Sitecore provide for this purpose.


Master Pages?


Think “overworked .NET developer who really cannot be bothered to try and figure out how Sitecore constructs the pages it delivers”.


I certainly get where he or she is coming from. But don’t go chasing down this road – sit down and show (don’t tell; show) how a Sitecore “Layout” and an ASP.NET “Master Page” is more or less essentially the same thing. (I know…  but really – in most cases, this is just semantics).   So “placeholders”, not “content placeholders”. “Layouts”, not “Master Pages”.


Am sure you’re seeing the pattern here, by now :-)


All I’m saying is; “Yes. You absolutely CAN reconfigure Sitecore, so that security is completely disabled, users and roles come off a scan of your table napkin, your coffee machine starts automatically when you publish AND it will even offer background music when content editing”. Ok I’m being ironic, obviously, but see the point is this.


Just because you can doesn’t mean you should


Don’t go mucking about with Sitecore, jumping through hoops to make it act a certain way. Chances are – and most times – you aren’t dealing with a real requirement at all. All too often have I arrived at a “young” Sitecore shop and seen a development team dive right into a complete reconfiguration of how Sitecore works.  Pipelines altered and skewed and tonnes of bespoke code developed because “Otherwise we couldn’t meet our clients requirements”.  Err…  WHAT requirements were those exactly?


I mean, come on. I’ve done lots and lots of Sitecore sites now – and I can count the number of times I’ve actually had to modify standard Sitecore behaviour on maybe one hand.  This does not include adding new modules or field types, or anything like that – I’m talking about core changes such as altering the publishing pipeline, messing about with security resolvers and so on.


Not pointing fingers at anyone in particular here. If I were, I would have to point to myself first – I’m as guilty of trying to change something from what it is into something that is familiar as I gather anyone else is.


I just think it’s something we should all keep in mind.


And oh… before I end.


Sometimes the question DOES lead to a “legitimate” feature request ;-)





Seth Luersen said...

Just wanted to say that I completely agree. I field similar questions all the time.

Your point about requirements is essential. Many newbie developers and beginning partners start fiddling because they "can", overcomplicating development, rather than reading the docs, posting to the SDN forums, and finding out they could have implemented a simpler solution using out of the box features.

Brian Pedersen said...

Great article. I experience the same too. We need to explain how Sitecore does it, not how to tweak Sitecore into another technology.

Jukka-Pekka Keisala said...

Great post. I have too often modified standard behavior of Sitecore that just made things more difficult in the end.

misteraidan said...

I tend to disagree with the comment about master pages. It is not laziness that causes this, it is that Sitecore (1) claims that it is based on and can support everything that .NET can do (so you would expect a base feature of .NET would be available), and (2) Sitecore does support Master Pages (see workaround link below).

In fact, the page structure makes more sense in Sitecore when Master Pages are introduced, as Layouts can then be used as their name suggests, to control layout, rather than using a Layout as a Master page to store headers and global functions and using a Sublayout to mess around with lower level page structures. By using a master page for high level stuff and a Layout to organise .. er layout, then 'Sublayouts' can be used as their name doesn't suggest but for what they actually are: controls. Renderings and Sublayouts then become interchangeable depending on the best case for each one.

Master page content editor work around:

* it must be said that I discovered this post and the workaround link at the same time. Thorough testing is needed to qualify my comments .. I'll retract the lot if the workaround fails. I still standard by my 1st point though, that Sitecore should support base .NET features such as master page.

(by the way.. captcha was failing in Firefox)

Kamsar said...

I agree with misteraidan on the master pages issue, there's definitely a place for being able to template static elements across multiple similar layouts without having to tediously link 8-10 sublayouts into Sitecore on every single template or worry about power users breaking layout inheritance interfering with future template updates. That said, it's a bit of a moot point as Page Designer mode outright breaks when using master pages, and Lars is disinterested in fixing that issue.

Mark Cassidy said...


I would actually look into the Sitecore Rules Engine, to solve that specific issue.

Further, a number of solutions have been blogged about, that deal with inherited presentation details.

I just haven't had much use for these techniques myself. If that changed, Rules Engine would be where I would be looking.