Over the last couple of month, my Twitter feed recurrently showed me tweets like “If you feel safe releasing on Mondays, why don’t you on Fridays” or “If you can’t release on a Friday you can’t release at all”. I didn’t like the tone of this tweets, and they felt wrong. I think what the respective tweeters wanted to say is: Releases should always work the same, no matter what day of the week. And while I totally agree with them on this, I don’t agree with their Friday statements at all.
So let’s start with the side we obviously agree on. Yes, we all should have automated release processes with proper automated testing and monitoring of all the things that could possibly go wrong. And we should use continuous integration, so we see our code in action as long as possible before releasing it.
This is how it should be, having a process we can rely on. And there’s absolutely nothing wrong with that from a technical point of view… but, you knew it was coming, and here it is… but, there is not only the technical side of things, often, or most of the time, there is a business side as well.
There are so many things that can go wrong that have nothing to do with your code. Just to give you some made up examples. A new feature could have some visual side effects so your users aren’t seeing the checkout button anymore and sales are decreasing rapidly. Maybe you have some legal issues with a feature you released and have to make some changes to not getting sued. Maybe your new feature gets some social media attention and all the new traffic is killing you. All your unit tests worked, the front end tests passed, even the QA guys said everything works. And they were right! And still you have a problem and you have to make some changes. And now imagine you released this stuff on a Friday, it’s Saturday, you are sitting in your living room with your loved ones and your boss calls: “…we have to fix this now, it is costing us a lot of money…”. Yes, I’ve been there in the living room, I’ve been there way too often. Stuck with problems I or my team didn’t cause, stuck with problems sometimes nobody could have foreseen. But never the less stuck with problems I had to fix. Believe me, there are more fun things than making hotfix releases on the weekend.
And there’s an easy way around it, don’t release on Fridays.
And yes, I know you can add Feature toggles to easily turn released features on and off, or add other mechanisms like that. Still, there will be a case you did not anticipate and you have to get up from your couch to fix.
You should be ready to release at any time, even if you have to release a fix on a Friday. Create an environment where you can do it with confidence that technically everything will work. But, whenever possible don’t schedule releases on a Friday. Your developers and your ops will thank you for it.