この記事は「SRE Advent Calendar 2022」の13日目の記事です!ポエムです!
本題
割り込みタスクの扱いが難しい
— Ryuichi@Gurasan:|| (@ryuichi_1208) 2022年12月25日
スプリント計画で出たタスク以外のタスクの扱いが難しい。障害対応やアラート対応やユーザからの問い合わせ対応、たまにあったのは忙しいプロジェクトのお手伝い(テスターとか構築作業とか)と多岐にわたる。スプリントは、あくまでもスクラムという作る側のプロセスであって、スプリントに合わせて世の中が動いているわけではないので割り込み完全になくすことは出来ないと思う。システムは落ちるし問い合わせは来る。
来るからと言って何もしないとどうなるかを考えてみる。チームで作業をする上でタスクの優先度が決まっていればそれに沿ってスプリントタスクよりも優先して対応するかを決めて対応していくのがよさそうに思える。スプリントタスクに影響が出ないくらいの割り込みタスクの量であればバッファを計画時に持たせることで対応が出来るだろう。
一方で割り込みタスクが増えつづた場合はどうなるだろう?毎日障害対応やセキュリティ対応やユーザー問い合わせ対応をするくらいの割り込みが入るとする。こうなると一切スプリント計画で出たタスクが進まないという状態になってしまう。いわゆる目の間に現れたタスクを日々こなしていく状態となる。この状態は短期的に見ればサービスの信頼性を守るという観点では悪ではないと思う。じゃあ長期的に見た場合どうだろうと考えてみる
割り込みタスクを毎日こなす日々が長く続くと
割り込みタスクの方がスプリントタスクより優先度が高いものばかりだと割り込みタスクを消化していく日々になる。優先度の付け方次第だが優先度が高い作業を日々こなせていればチームとして健常な状態に見えそうである。
じゃあそれが正しいかというとそうでないと私は考える。なぜかというとそのような優先度の高い割り込み作業への対応の多くはジャストアイディアだったりアドホックな対応で将来を見据えて対応できていなかったりある程度再発を許容した対応になっていたりする。対応するためのソフトウェアを実装したり設計やアーキテクチャを変えるような大きな対応が必要な場合でも割り込みタスクをこなす日々では時間を取って対応することが難しい。
そうなってくるとさらに同じような割り込みが発生していくというようなスパイラルに陥ってしまう恐れがある。チームは日々タスクをこなし健常に見えているが実は同じことを繰り返してしまっているということが発生し得るのではないだろうか。
後は割り込みのタイミングも気になる。例えばコーディング中とかの割り込みは個人的には結構しんどくてコンテキストスイッチが大変。CPUみたいに(人間と比べて)高速に行えるようになっていればよいがそうはなっていないのだった。基本的に、同時並列で色々対応すると集中できない。
じゃあどうすれば良いんだ
ちょっと思いついていないので考え中。。
今考えているのは許容出来る割り込みタスクを定義してその数値を計測していき閾値を超えたらスプリントを止めてでも割り込みタスクを減らす活動をしていくようなエラーバジェット的な考えなのかなぁとか考えている。
SRE本の29章では割り込みについて書かれている。「顧客とともに自分も尊重する」ことが重要で有ることが書かれている。あとは割り込み対策として、緊急の割り込み作業のみを受け付ける役割(オンコール)やチケット割り当てのローテーションなどが紹介されている。
割り込みタスクの可視化は以下のブログでも取り上げられていた。Focus Factorは面白そうだなあと思う。
感想
割り込みは悪ではないがそれが続くことで心身への影響は無視できないものというのはすごく納得した。
ちなみに個人的には「緊急度の高いタスクが割り込みで入ってくる」のは好きである。なんか祭りっぽいので。