How Digg does continuous deployment
about.digg.com
about.digg.com
I've tried to do continuous deployment for a smaller, one man, project and it was effectively impossible. It was too much infrastructure to maintain for one person.
The real question is does it save time at the end of the day? The overhead to set it up and keep it going is astronomical.
Unless programmers are business users themselves (which in Digg's case, I think is highly unlikely), it's very risky for business users who requested the features to first see them in production. Even with all the tools that they have, the chance of simple misunderstanding and "No-no, that's not what I meant!" is always there. That's why I think there should always be a user acceptance stage, where users get to play around with the release (ideally, with data as close to production one as possible), and 'ok' the release for production from there.
Also they didn't mention QA at all. Unless QA are the ones that are writing Selenium tests at the same time devs are coding the feature.
Also, in this scenario you'd need to test every single combination, because what if you test A,B,C together, but then business wants to hold off on B, and if you enable A and C, that would break things?
And then enabling them for specific users only.. oy. What if it's a db schema change? Run db scripts to alter tables in production, every time we 'flip the switch'?
As for the complexity of testing permutations of features - that sounds like a problem with your Q&A process, no matter how you implement it.
But which are the rules that autokill a submission? I can understand simple duplicate removal, but then?
http://eng.kaching.com/2010/05/deployment-infrastructure-for...
http://eng.kaching.com/2010/06/applied-lean-startup-ideas-co...
And I believe many of the companies featured in the Startup Lessons Learned conference are doing continuous deployment:
http://www.justin.tv/startuplessonslearned/videos
There's a lot of momentum towards this. The company I'm at is working to get there.
Continuous integration is a fairly simple thing: detect a new source commit, run a battery of tests on it, report back. Hudson is a really good one (of which the original author is a main contributor, and I did some plugin work for a while), and I use it as a fairly fancy looking cron as well.
Continuous deployment, as described in the article, is much more difficult. Not only do you have the slew of tests, but maybe you want more long-running tests that you don't care to run all the time. Maybe you want code reviews. You'll need to automate the actual deployment process and so on.
http://www.southsearepublic.org/article/2340/read/etsys_cont...
I've also contributed a chapter on it to the new O'Reilly Web Operations book: http://bit.ly/WebOperations