Human runtime
Engineering, judgment, and remembering to take breaks
/status / human-runtime
Report an issueMatteo / Human Platform
No active incidents.
The preceding 90 complete UTC days plus today so far. Degraded and critical time are weighted differently. Live status is checked every minute.
Engineering, judgment, and remembering to take breaks
Cloud native, platforms, and developer experience
Repositories, upstream pull requests, and community work
Talks, articles, workshops, and too many explanations
The numbers come from the incident durations. Open a period to inspect them.
| Period | Incidents | Critical | Degraded | Counted downtime | Availability |
|---|---|---|---|---|---|
| through Oct 26, 2026 | 13 | 52 min | 3,951 min | 2,027.5 min | 98.436% |
| through Jul 28, 2026 | 14 | 1,890 min | 653 min | 2,216.5 min | 98.290% |
| through Apr 29, 2026 | 12 | 922 min | 2,000 min | 1,922 min | 98.517% |
| Current 90-day window | 13 | 52 min | 3,951 min | 2,027.5 min | 98.436% |
What broke, why it broke, and what I actually did about it.
Resolved Degraded
The live demo lost its remote dependencies. The talk could continue, which was a pleasant surprise.
I prepared the demo. The venue prepared a network that did not want to participate.
The captive portal expired the session in the middle of the demo. Very enterprise.
Switched to the local demo and explained the failure instead of pretending the loading spinner was part of the presentation.
Finished the walkthrough locally, restored connectivity, and checked the remote example before sharing it with the audience.
Bring a local fallback. Test it with Wi-Fi off, not just with a different browser tab.
Resolved Degraded
API responses and internal tools slowed down while database CPU and connection queues stayed saturated. Requests still completed, eventually.
A report went from taking seconds to taking everybody else down with it. Nice query.
An unbounded report scanned a growing table without the required index. Retries created more connections, because apparently the database was not busy enough.
Stopped the report, limited its concurrency, and checked active queries and query plans instead of throwing a bigger instance at it.
Built the missing index concurrently, bounded the query, and put the connection pool back within the database budget. Verified query latency, lock waits, and replica lag under load.
Check query plans with representative data. A report that works on twelve rows does not prove anything.
Resolved Degraded
Replies waited. Running software kept running, as it should.
I stepped away from the keyboard for three minutes. Somehow the company survived.
Humans need breaks. I know, inconvenient design.
Left the work in a safe state and stopped pretending that sitting down longer would fix the problem.
Break completed. Came back, checked the work, and continued where I left off.
Take breaks. Build systems that do not require a person to stare at them all day.
Resolved Critical
The automated workflow stopped while I checked the output and repaired the integration.
The agent said the job was done. I checked. Breaking news, it was not.
The agent invented an API parameter and reported success without checking the result. Confidence is not an exit code.
Stopped the workflow and reproduced the request with the documented API. No more guessing.
Fixed the request, checked the response, and ran the complete workflow with a human reviewing the result. Added the failing case to the evaluation set.
Validate tool inputs and outputs. Keep permissions scoped. Read the diff before celebrating the agent.
The longer version of this complaint.Resolved Degraded
The new video and its preview stayed unavailable while the existing articles and videos remained accessible.
Recording finished. Upload finished. Processing was still thinking about its life choices.
A high-resolution recording hit a serial transcode queue with insufficient CPU. Restarting the worker just restarted the same expensive job.
Paused duplicate jobs, gave the worker the resources it needed, and processed a smaller preview separately.
Completed the original transcode, verified audio sync and playback, and published the checked result. Set explicit worker concurrency and resource limits.
Test the publishing pipeline with the files I actually record. A tiny test clip is not a capacity plan.
Resolved Degraded
Code reviews and replies got slower. I could still work, but I would not call it peak performance.
I opened the cupboard. No coffee. Great start.
I finished the coffee yesterday and assumed someone would refill it. I am that someone.
Got coffee and reread the patch before merging anything. Good thing I did.
Coffee made, patch corrected, review completed. We did not need Kubernetes for this one.
Keep spare coffee. The resilience plan should not depend on finding an open cafe.
Resolved Degraded
Implementation and written answers waited while everybody explained why they needed more meetings.
A quick alignment call became a discussion about when to have the next alignment call. I wish I was joking.
No agenda, no decision to make, and nobody willing to end the call.
Asked what we were actually deciding. Put the unanswered questions in an issue and assigned owners.
Ended the call. The issue has the context, the decision, and who does what. People can go back to writing software.
If there is no decision or concrete problem, write it down first. My calendar is not your project management system.
Yes, I have an opinion about the ceremonies too.Resolved Degraded
Kubernetes evicted CI runners and delayed release and provisioning jobs. Work on healthy nodes continued.
Builds got faster with the cache. Then the cache used all the disk. Builds got considerably slower after that.
Container layers and unbounded build logs filled node storage. Replacement runners landed on the same pressured capacity.
Cordoned the affected nodes, moved queued jobs to healthy capacity, and reclaimed unused images and rotated logs without touching workload volumes.
Restored disk headroom, bounded cache retention and ephemeral storage, and reran interrupted jobs. Checked node conditions and eviction counts before uncordoning.
Budget node disk as well as CPU and memory. A cache without a retention limit is just a delayed outage.
Resolved Degraded
Reviews, decisions, and replies slowed down. I postponed consequential changes rather than pretending sleep was optional.
The same alert woke me up several times. By morning I knew the alert very well and understood everything else a bit less.
An alert watched a noisy infrastructure metric without checking user impact. Every spike became somebody else waking me up.
Handed over coverage, checked the actual service objectives, and removed the unactionable page through the normal review process.
Got some sleep, checked the alert change with the team, and resumed the paused work. The replacement only pages for actionable user impact.
Protect on-call sleep. If a page has no useful action, fix the alert instead of training people to ignore it.
Resolved Degraded
Platform calls and repository jobs stalled as cached DNS answers expired. Connections using existing addresses kept working.
The DNS pods were ready. Application lookups timed out. Apparently those are different checks.
A new NetworkPolicy blocked UDP port 53 from application pods. The diagnostic check used TCP and missed the blocked path.
Restored scoped access to the cluster DNS endpoints and tested lookups from the affected namespaces over both UDP and TCP.
Corrected the namespace and pod selectors, checked service and external lookups, and verified the policy still blocked unrelated traffic.
Run network checks from the workload namespace. A ready CoreDNS pod cannot answer traffic the policy never lets it receive.
Resolved Degraded
Technical explanations got louder and considerably less useful. Conference talks remained queued.
The offsite karaoke session was supposed to be over. Then somebody found another song. Been there, done that.
We kept saying one last song. Apparently none of us knew what last meant.
Closed the song queue and moved the important conversation somewhere without a microphone.
Microphone returned. Normal speaking volume restored. The team still had fun, which was the point.
Keep karaoke at the offsite. Keep architecture decisions out of the chorus.
Resolved Degraded
Remote sessions and recordings needed an alternate audio path while the normal setup stayed unreliable.
The audio meter moved. The audience heard nothing. That meter was having a great day.
A virtual audio device became the default input after an update. The recording application and call application used different routes.
Selected the physical input explicitly and tested with a second participant rather than trusting the local meter.
Fixed the saved routing, checked a complete recorded session, and verified the call setup after restarting both applications.
Run the sound check from the listener side. Watching my own input level proves less than I would like.
Resolved Critical
API calls and repository connections failed during name resolution. Restarting the application did absolutely nothing.
The service was healthy. Nobody could find it. Ah, yes.
A DNS record still pointed at the old endpoint after the migration.
Corrected the record and checked authoritative answers before blaming the cache again.
Verified the new endpoint through the configured resolvers and reran the API and repository checks. Both passed.
Check name resolution as part of the migration. A green pod is not proof that anybody can reach it.