- Knowledge
- technology
- OOP
- Tips
- Programming
- Tips
- Tutorial
- SEO
- Ranking
- Knowledge
- Special Day
- Seo
- Bug
- Data science
- Seo
- artificial intelligence
- Machine Learning
- Robotics
- happyNewYear2021
- newYearEve
- 2021
- Automation
- Smart Home
- Career
- Best Practices
- Git
- Logging
- Web Fundamentals
- DNS
- HTTPS
- Performance
- AI Tools
- ChatGPT
- Claude
- Gemini
- Laravel
- Eloquent
- MySQL
- HTTPS
- TLS
- Web Security
- Certificates
- Developer Life
- Debugging
- Docker
- DevOps
- Transactions
- Queues
- LLMs
- AI
- AI Coding
- Developer Tools
- React Native
- Expo
- Kate PMS
- Mobile Apps
- Laravel
- Authentication
- Sanctum
- Cookies
- API Design
- Payments
- Idempotency
- DeepSeek
- Open Source AI
- LLMs
- AI News
- Git
- Version Control
- AI Coding
- Prompting
- PHP
- Checklist
- MCP
- AI Agents
- OpenAI
- Architecture
- Microservices
- Modular Monolith
- Estimation
- Developer Life
- Project Planning
- Humour
- OAuth
- OpenID Connect
- Authentication
- Embeddings
- Vector Search
- RAG
- pgvector
- OpenAI
- GPT-4.1
- Codex CLI
- Events
- Testing
- Clean Code
- Maintainability
- Code Review
- Webhooks
- API
- Security
- Claude Code
- Workflow
- AI
- LLM
- Prompt Injection
- Mobile
- React
- Networking
- TCP
- UDP
- HTTP/3
- CLAUDE.md
- AWS
- Cloud Security
- Backups
- PHPUnit
- Software Engineering
- Leadership
- Communication
- RAG
- Embeddings
- AI Engineering
- IT Infrastructure
- Networking
- Access Control
- CI/CD
- GitHub Actions
- Gemini CLI
- Claude Code
- JavaScript
- Async/Await
- Node.js
- Promises
- Security
- Cryptography
- Passwords
- MySQL
- Database
- Vibe Coding
- Software Quality
- DNS
- Code Reading
- Onboarding
- Productivity
- Background Jobs
- Developer Humour
- Estimates
- Dev Life
- JWT
- o3-mini
- DeepSeek R1
- Rate Limiting
- Kate PMS
- E-Signing
- Audit Trail
- REST
- GraphQL
- API Design
- Laravel 12
- Upgrade Guide
- Open Source
- Self-Hosting
- Task Scheduling
- Cron
- Secrets
- CORS
- PHP
- PHP-FPM
- OPcache
- GitHub Copilot
- Software Architecture
- Engineering
- TypeScript
- JavaScript
- Type Safety
- AI Security
- React Native
- Product Design
- AI Agents
- Kiro
- Queues
- Redis
- RabbitMQ
- AWS SQS
- Nginx
- Apache
- GPT-5
- gpt-oss
- Clean Code
- Architecture
- Naming
- Documentation
- Career
- ADR
- Teamwork
- Supply Chain
- Kate HRM
- HR Software
- Permissions
- System Design
- Pagination
- SSH
- Linux
- Big O
- Databases
- Laravel Boost
- MCP
- Developer Skills
- Validation
- Databases
- Indexes
- Code Quality
- Deployment
- Developer Humour
- Feature Flags
- Code Review
- Pull Requests
- Docker
- Cursor
- Authorization
- RBAC
- Gemini
- Long Context
- PHP 8.4
- Caching
- Dependency Injection
- Web Performance
- Browser
- CSS
- Database
- Migrations
- ChatGPT
- AI for Developers
- Monitoring
- On-Call
- REST
- Backend
- SQL
- NoSQL
- Database Design
- Coding Agents
- Claude 4
- API Resources
- REST API
- Load Balancing
- Scaling
- AWS
- AI Tools
- Claude
- Sora 2
- CTE
- 2FA
- TOTP
- Programming Languages
- Prompts
- Developer Workflow
- API Gateway
- APIs
- Passport
- API Auth
- Learning
- Burnout
- Developer Growth
- Web Development
- SEO
- Kate Mall
- ChatGPT Atlas
- Agent Skills
- Middleware
- Laravel 12
- Collections
- Context Window
- Monitoring
- Commit Messages
- Self Review
- Growth
- Regex
- Programming Basics
- Text Processing
- Database Design
- Normalization
- Linux
- Server Security
- Linux Foundation
- Open Standards
- Legacy Code
- Documentation
- AI Workflow
- File Uploads
- Test Data
- Hashing
- Performance
- Caching
- Enums
- Scope Creep
- Estimation
- Codex
- Gemini CLI
- Timezones
- Carbon
- Bugs
- PHP 8.5
- Gemini 3
- GPT-5.1
- Data Integrity
- Event Loop
- Async
- Opus 4.5
- AI Models
- React
- Forms
- Frontend
- Backups
- AI Images
- DALL-E
- Midjourney
- Race Conditions
- Concurrency
- Legacy Code
- Refactoring
- Senior Engineer
- Scope
- LLM
- CDN
- Web
- Sub-Agents
- Soft Deletes
- Audit Log
- Concurrency
- AI Learning
- NestJS
- AI Evals
- Policies
- SPF DKIM DMARC
- Unicode
- UTF-8
- Knowledge Graph
- Value Objects
- Technical Debt
- Feature Flags
- Laravel Pennant
- Deployment
- Copilot
- Composer
- Dependencies
- Artisan
- Automation
- AWS S3
- Object Storage
- Cloud
- Small Language Models
- Ollama
- Production
- Sessions
- HTTP
- Mentoring
- SQL
- Virtual Machines
- Web Development
- HTTP/2
- QUIC
- Web Performance
- AI Integration
- LLM API
- SOLID
- OOP
- Hosting
- Serverless
- Merge Conflicts
- Temperature
- AI Development
- Reverse Proxy
- Nginx
- Infrastructure
- Verification
- Passkeys
- WebAuthn
- Teams
- Communication
- Stakeholders
- Monorepo
- CI/CD
- Versioning
- JSON Schema
- Livewire
- Inertia
- Meetings
- Distributed Systems
- Privacy
- Full-Stack
- T-Shaped Skills
- Money
- Notifications
- Web Security
- HTTP Headers
- CSP
- Function Calling
- Load Testing
- k6
- Data Extraction
- Debugging
- WebSockets
- SSE
- Real-Time
- Laravel Reverb
- Infrastructure as Code
- Terraform
- Side Projects
- Laravel Pint
- OpenAPI
- Swagger
- UX
- Multimodal
- Jest
- Pair Programming
- APIs
- Rate Limiting
- Resilience
- Dev Humour
- Design Tokens
- JWT
- API Keys
- Sessions
- PHPStan
- Rector
- Incidents
- Reporting
- Dashboards
- Zero Trust
- IAM
- Search
- Laravel Scout
- Junior Developers
- Mentoring
- Images
- WebP
- AVIF
- Bug Reports
- Let's Encrypt
- Design Docs
- Software Design
- Observers
- Replication
- Accountability
- Data Structures
- Reliability
- LLM Memory
- Error Handling
- Payments
- Payment Gateway
- Webhooks
- PCI DSS
- Observability
- OpenTelemetry
- Personal Brand
- Writing
- Conventions
- Dates
- Scheduling
- Disaster Recovery
- Compression
- Brotli
- Deadlines
- Developer Habits
- State Machines
- Tech Roles
- UUID
- ULID
- Horizon
- Planning
- Engineering Culture
- Ownership
- Soft Skills
- Socialite
- Cost Control
- Collations
- Unicode
- Octane
- PostgreSQL
Me vs the 3 AM Production Alert: Why Bad Alerting Hurts More Than Bugs
About Post
Your phone lights up the bedroom. Then it lights up again. And again. By the time you've found your glasses, the lock screen is a waterfall of red.
Welcome to the 3 AM production alert, the only meeting in the calendar that nobody scheduled and everybody attends.
A short play in five timestamps
03:04. "CRITICAL: CPU above 80% on web-2." You stare at it. Is 80% bad? Was it 79% yesterday? Nobody knows. The person who set the threshold left the team some time ago.
03:05. Same alert again. And again. Each check sends a fresh notification, so the alert is now mostly an alarm clock with opinions.
03:09. Laptop open. You find the logs. The relevant line says: Something went wrong. That's it. No user, no request, no job, no hint.
03:20. You remember there was a document explaining what to do. It's in a wiki. Somewhere. Under a page called "Misc (new)".
03:31. The CPU drops back to normal on its own. Nothing was broken for users. You did all of this for a scheduled report that runs at 3 AM every night. You go back to bed and lie awake thinking about your life choices.
What went wrong (spoiler: not the server)
❌ The alert fired on a cause (high CPU), not a symptom (users getting errors or slow pages).
❌ It woke a human for something that didn't need a human at all.
❌ It repeated itself instead of grouping into one notification.
❌ It didn't say what to do, or link to anything that did.
❌ The logs had a message but no context, so finding the cause meant guessing.
❌ The "runbook" was buried, out of date, and written for a server that no longer exists.
Notice that none of these is a code bug. The system was fine. The alerting was broken, and broken alerting has a real cost: people learn to ignore it. And the night the alert really matters, it's just one more red notification in the pile.
What actually fixes it
✅ Page on symptoms, log the causes. Wake someone up for "error rate is high", "checkout is failing", "the queue has stopped draining". High CPU, a full-ish disk or a slow query can go to a dashboard or a daytime ticket.
✅ Every page must be actionable. If the honest response to an alert is "wait and see", it shouldn't be a page. Either make it actionable or downgrade it.
✅ Two levels, not ten. "Wake me up" and "look at it in the morning". Anything in between tends to get treated as one or the other anyway.
✅ Group and deduplicate. One incident, one notification, with updates in the same thread.
✅ Put the runbook link in the alert itself. What this alert means, how to confirm it's real, the first three things to check, and who to call if you're stuck. Short, and next to the alert, not three clicks away.
✅ Log with context. A log line without context is a riddle. Attach a request ID and the user to every log line automatically, so you can follow one request from start to finish. Laravel's Context facade (added in Laravel 11) makes this almost free, and the data even follows the request into queued jobs:
class AddRequestContext
{
public function handle(Request $request, Closure $next): Response
{
Context::add('request_id', (string) Str::uuid());
Context::add('user_id', $request->user()?->id);
return $next($request);
}
}
// Later, anywhere: the context is attached to the log entry automatically
Log::error('Payment webhook rejected', ['reason' => $reason]);
✅ Review every page afterwards. After each out-of-hours alert, ask one question: should this have woken someone up? If not, change the alert that week, while the pain is fresh.
The 3 AM test: if an alert fires at 3 AM, the person who reads it should know within a minute whether users are affected and what to do first. If they can't, fix the alert before you fix anything else.
The happy ending
Good alerting is boring. Your phone stays quiet most nights, and when it does buzz, you trust it, because it has never cried wolf. The alert tells you what's wrong, the link tells you what to do, and the logs tell you exactly which request failed.
That's the dream. Most of us are somewhere between that and the waterfall of red.
What's the most useless alert that has ever woken you up? I'll start the bidding with "CPU above 80%, no further details".

Be first to comment it...