Lesson #1: Don't push code on Friday afternoon.
Lesson #2: Beer, Code and Commit is totally fine. Just don't push! Wait until next day to review and push/deploy it..
Lesson #1: Don't push code on Friday afternoon.
Lesson #2: Beer, Code and Commit is totally fine. Just don't push! Wait until next day to review and push/deploy it..
As a general rule, the best time to launch is first thing on a Tuesday. Why Tuesday morning? We are also well aware of "Monday morning madness" too - pre-planning stress for Monday morning is akin to masochism.
The technical staff all talk about the dangers of Friday evening deployments.
The company has ignored/overridden these warnings in the past, and sometimes experienced catastrophic failures because of it.
STILL, sometimes the marketing staff will have weekend promotions that are considered more important than these concerns.
In particular, a weekend promotion will be implemented, tested on Wednesday, and ready to go. And only after it's active, is a bug found in it on Friday at 5pm. And the promo is more important than the risk of failure.
I'm not saying this as a "bitter techie"... I'm just explaining that this is how it happens.
I think that the "it's more important" argument is often correct. Not running the promo costs the company $X of opportunity cost, and X is often very well known, from past promotions. Balance "losing $X" against "well, there's only a small chance of something going wrong", and that's why the risk is often taken.
Take the risk enough times, and eventually something goes wrong.
We exclusively push code on Fridays.
Funnily enough, change control actually runs a lot more smoothly in terms of getting past senior non-technical managers when you include elements like that
continuous deployment to a dev/test environment is the easiest for most organisations to move to. Due to the live environment being mission-critical, they can't afford the risk of any degradation of service. So you push regularly (after passing test suites) to a test environment, get a small subset of users working, and at some point then push out to live from that. But I suspect that isn't what you are referring to, as this is too similar to typical change management.
the alternative definition of continuous deployment is that of constantly pushing to live, initially for a subset of users then rolling it out from there gradually, but always on the live environment. In many large, often 'cloud-y' solutions, that subset might be all users. Except you can't have a public transport ticketing system fail at peak times. A hospital patient record system must stay available for staff, and give sufficient notice before any possible impact to service to allow manual processes to be used. Payroll, accounts, HR systems... all of these have failure modes that have financial penalties at best.
Hence continuous deployment only makes sense when you can afford to risk service, possibly with significant impact.