
Custom vs Speed
During my day job I’m confronted on an hourly basis with requests for small improvements that people want to make to the website in order to be more personal. Add “My Account Rep”, only show them content they own, put their name on the page, remember what they last searched, show them the most popular research for the products they own, show them the top rated research in what they own, show non-members a view of what it would look like if they were members, but don’t hide the stuff they don’t have access to, I don’t know, maybe a switch of some sort that you can click to give them the “whole view” (seriously…I don’t even know how in the world to write a spec for that).
There’s a problem with all of these though. Our old site was an example of what happens when you allow unfettered, continual customization, and don’t consider the overall impact that each one of those chips in the scalability wall makes.
The above illustration is a good example of the customization vs speed argument, imagine the teeter toter works like this. When you put something on one side, it lifts the other side up, causing the other side to get more and more out of control. Everyone at some point in their life has been the one on the top part of the teeter totter, it’s not a lot of fun because the person on the heavy end has all of the control, they decide when you go up, or when you go down. They decide when they’ll just jump off the teeter totter and leave you to slam down hard on your butt and probably fall off.
Out of the gate I’ll tell you that speed’s got it’s work cut out for it. It’s trickier to do than customization. I can customize the crap out of a website in hours, but tweaking the speed requires deep plumbing and hard work.
Every time you add a feature to the customization side of the scale, the speed side gets lighter, and it becomes harder for speed to balance the teeter totter. Eventually you get to a point where poor speed is thrashing and flailing at the top of the teeter totter trying to gain his balance…and he simply can’t.
Well why can Google do it then?
Google’s not much different. Take a look at an iGoogle page with loads of gadgets on it, and watch how slow it loads, compare that to the straight Google home page…also keep in mind that Google has locked up about 90% of North America’s smartest software engineers…and if they can’t figure this out, what chance do us mere mortals have?
The appearance of customization is better than true customization.
First off, I believe greatly in putting more of the customization components on the client side. Cookies are a great way to do this, keep their display name, and some basic customization options in their cookie. Users who refuse customization on their machines simply don’t get customization. Sorry, but that’s the realities of the internet in 2009. On the server side, you need some pre-assembled components, preferably in XML, HTML, or plain ole text files which use the file system rather than the database. It’s MUCH easier to scale a file system up than it is a database into a cluster.
Too much customization is a bad thing
No matter how much apparent customization you do, eventually you reach a point where you’re still making database calls for pieces. There’s no hard and fast rule for how many database calls are too many…but you know when you hit it. Your site’s slow.
You also hit a strange point where you’ve essentially created an infinite number of slightly different sites. While this is appropriate for a site like Google, it’s not great for a site which is trying to convey a single directed message.
Customization vs editorial control
There’s a certain level of editorial control that I expect when I go to a website. I’m figuring that there are people who get paid six figure salaries to show me what’s important, to make certain editorial decisions, and decide that this is their best stuff. Yeah it’s cool when I can add a filter to that content to let me see stuff that I’m most interested in, but when I go to the Globe and Mail’s website or Wired.com, I want to see what their editorial has determined is most important…because even though I’m not all that interested in Bio Tech, maybe today’s biotechnology story is relevant to me in a way I’m not even aware of.
In the end, customization is a good thing, but too much can put blinders on content, and put excessive strain on systems.
The other caveat to consider is the database implementation. Google uses Bigtable which flies in the face of a relational database. Everything is in one table. The database itself live on thousands upon thousands of distributed servers. They want to add another application/customization? No problem, add a column and distribute over another thousand servers. Back0end architectural decisions can balance the custom vs speed dilemma.