TT Lab
Blog

한국어 English 日本語 中文

Get started
Blog

Blog

Common Lessons Extracted from a Week of Incidents: Defaults, Green Lights, Human Responsibilities, and Locking in Fixes with Tests

Status: Published (2026-10-16). Compiled based solely on the facts verified in the previous five posts. The evidence and limitations for each part can be found in their respective posts.

Table of Contents

1. Invisible Labels and Defaults

Four out of the five incidents started from values that no one explicitly configured.

Incident What Quietly Changed Behavior Who Set It?
Public Access Control plane exclude-from-external-load-balancers label Automatically set by kubeadm during installation
GPU Auto-updates enabled, auto-reboots disabled Default setting in Ubuntu unattended-upgrades
DNS of the initial policy, and matchPattern: "*", and the rule that * does not cross the dot Initial design / Cilium pattern rule
Bundle Gate \b matches after the comma Regex engine

Their commonality is that they are not visible on the screen. Labels are not shown in the default node list output, update logs do not mention "do not reboot," policies look plausible at a glance, and regex patterns are short. Therefore, whenever you select something (advertised nodes, patterns, regexes), you need the habit of inspecting its labels and default rules first. kubectl get nodes --show-labels, commented-out defaults in configuration files, the "wildcards" section in product documentation, and regex boundary rules constitute that "inspection."

2. "Green Lights" and Actual State

보인 신호와 실제 상태 사고 보인 신호 실제 공인 접속 안에서 게이트웨이 200 밖에서 닿지 않음 GPU 노드 Ready, 갱신 성공 모듈과 라이브러리 어긋남 DNS apply: unchanged 클러스터는 옛 정책 자격증명 보안 게이트 통과 평문 값이 여러 곳 묶음 게이트 「범인 없음」 재시도 같은 실패가 26번 공통점: 신호를 낸 쪽이 보는 범위가 실제 문제보다 좁았다.
Figure: Signals and Actual States Observed in the Five Incidents

In each incident, there was a signal saying "everything is fine." And those signals were not lying. They simply had a narrow field of view.

During the same week, we saw something similar in the deployment tool's documentation. The ArgoCD documentation stated that CronJob tasks report a status of "Progressing" while running, but the built-in health check reported "Healthy" during that time. We raised an issue regarding the discrepancy between the documentation and reality, which was closed as completed on 2026-10-15 — argoproj/argo-cd#30209. If you do not know what a green light is observing, the green light tells you nothing.

Therefore, we decided to operate as follows: Verify from the output side. Verify whether deployment occurred not via pipeline green lights, but through operational files produced; whether policies changed not via apply output, but through values re-read from the cluster; and whether websites open from the outside, not the inside.

3. The Boundary Between Human Tasks and Automation

Most places where work stalled this week were boundaries.

Task Why It's a Human Task What Stalled at the Boundary
GPU Node Reboot Disconnects other services on the same node. Humans must decide the timing and impact. No one knew for three days
Applying Lab DNS Policy Cluster modification. May break lab environments. Sat in the repository for a month
Credential Rotation All integrations using the values must be updated together. Historical values remain active until rotation
Assessing Bundle Gate Failures "Unknown culprit" cannot be concluded by a machine. The machine retried 26 times

Automation should not take over human responsibilities, but accurately handing off human responsibilities to humansis the job of automation. Hand-offs that proved effective this week took this shape: a single-line cause, copy-pasteable commands, a list of affected items, and a read command to verify whether it was done. Conversely, changes that proved ineffective were those that simply ended upon being committed to the repository—the DNS policy spent a month without anyone assigned to apply it to the cluster or commands to check if it had been applied. Handed-off tasks must be accompanied by verification commands and deadlines, and unverified hand-offs must remain visibly tracked as "Pending Application."

4. Locking in Fixes with Tests

The way to ensure fixes do not break again is through tests. However, this week also demonstrated that tests can also be wrong.

In summary, whenever adding a test, we verify three things: ① Is it red before the fix? ② Is it green after the fix? ③ Is it green on examples that must not be caught?

5. Checklist for the Next Incident

A Word from Titti: After stumbling five times, I realized we tripped over similar things every time: invisible defaults, narrow green lights, unclaimed tasks, and surface-level tests. Next time, let's open the checklist first before we start!

References

All materials were accessed on 2026-10-16.

Sign in to like

Comments

No comments yet.

Sign in to leave a comment