Как планировать спринт, если во время спринта всплывают критичные баги от пользователей?
Лучше - сильно сократить поток багов, чтобы не нужно было делить разработчиков. Нет смысла фигачить новые фичи, если уже сделанные либо кривые, либо неполные, либо плохо сделаны - этим вы роете себе яму.
Когда поток багов небольшой, то они укладываются в ваш фокус-фактор. Если нужно срочно что-то фиксить (например, клиент не готов ждать окончания спринта), то лучше использовать смешанный процесс, например, скрамбан.
делить разработчиков - ничем не обоснованная мысль - вы не сможете грамотно сбалансировать нагрузку между ними, всегда будет часть разработчиков простаивать - всегда будут кто-то кто медленнее или быстрее будет делать часть работ, больше делений, больше таких вещей. 
опять же уверен, лучше всего баги править тому кто делал этот функционал, ему по крайней мере не надо объяснять что там и как работает. 
========
По поводу спринтов и фикса багов. 
Баги будут всегда, начните разрабатывать продукт предполагая что во всех узлах и модулях уже есть баги (так оно на самом деле и бывает), это сразу поменяет подход к разработке - перейдя на схемы в которых продукт работает независимо от сбоя и багов в отдельных модулях.
В итоге вы получите всегда рабочий продукт независимо от багов, в котором вы можете в любой момент начать отдельные спринты по повышению качества его работы (снижению уровня багов).
В текущем спринте вы работает только над текущими поставленными задачами - это закон (ничего другого не берете). Срок спринта фиксирован - что успели то успели, все остальное переносится или на другой спринт, или вообще выкидывается. 
В этом вся суть, иначе какой вообще смысл в этих спринтах если вы просто там сидите и над какими-то багами из прошлых этапов ковыряетесь.