For SaaS (software as a service), when using a lean or agile development process with short sprints/iterations (e.g. 1 to 3 weeks), which approach produces better quality: deploying/releasing features...
- during the sprint in which they are developed, or
- after the sprint (possibly much later if limited alpha/beta release or feature flags are used)?
I call out "features" specifically because with SaaS, we may need to release hot fixes at any moment, 24/7.
What criteria may help determine which choice is better?
Some strawman advantages for deployment (1) during the sprint:
- Gets the entire development team more focused on ushering features all the way through to deployment
- Slightly earlier and possibly more predictable schedule for delivery to downstream consumers (customers, product management)
- If you have a "demo day", you can demo deployed features
...and for (2) after:
- If the release process requires fewer resources than development and testing, then pipelining in this way can lead to higher throughput because development and testing can continue until later in the sprint
- Precise deployment timing can possibly be more flexibly controlled, e.g. for limited alpha/beta releases (but maybe we just say it's "deployed" when it's in alpha/beta), feature flags (ditto last comment), marketing communications
- If release engineering resources are insufficient (e.g. due to illness), release does not have to wait another full sprint but can instead occur as soon as resources are available (of course, the during alternative does not absolutely preclude this)
- Meh, why not? You should be able to release SaaS anytime anyway, right? (A bit tongue-in-cheek there.)