I am dealing with similarly sized project for last 13 years. Our workflow is different though. We have continuous updates (no batch updates) when it comes to bug fixing. We use our in-house Project Management system.
- Client sends a request/bug report, our team creates new Task in our PM and
- assigns it to department/programmer
- programmer fixes it, tests it on Devel version puts the task to QC status
- QC team tests described problem and greenlights deployment
- programmer deploys/merges the fix into the live version and puts the task to Completed
- QC team re-tests live version and notifies client of completed task
Although there are few levels of fixes
- trivial - we skip the QC status/QC test in the middle, programmer fixes it, tests it and deploys it with setting it to Completed which trigers QC team test and client's notification (really super trivial fixes, text typos etc.)
- complex - when developing complex new features we freeze the deployment (blocking task) of other patches while the complex task is in QC status to avoid any conflicts during subsequent deployment - QC status ensures that the problem is tested by QC team in exact state it will be deployed and there will not be competing patches deployed before this one. But it blocks other patches. This one has high priority in our PM and gets fast-tracked before every other patch.
There are many draw backs of every scenario but we try to keep healthy balance between speed/flexibility and super-stability. This yields good results. But the PM (project management) with good prioritization and tracking features is essential. It solves the problems with deployment/testing...