- 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 Documentation I Wrote Six Months Ago
About Post
Six months ago, I wrote some documentation. I remember feeling good about it. Responsible, even. The kind of developer who documents things.
Today I opened it to set up the project on a new machine. Past me and present me are no longer on speaking terms.
If you've ever read your own README and thought "who wrote this, and why do they hate me?", this one's for you.
Exhibit A: the README
❌ "Setup is the usual steps." Which steps? Usual for whom? Past me knew. Past me has left the building.
❌ "Run npm start." The project moved to Docker four months later. The README did not get the memo. It still lists a Node version that would be politely described as historic.
❌ "Copy .env.example to .env and fill in the values." Twelve of the values are self-explanatory. One is called SYNC_MODE, it accepts three options, and only one of them doesn't quietly break the queue.
Exhibit B: the comments
❌ // TODO: explain this properly later. Later never came. Later is now. Later has questions.
❌ // Don't change this. No reason given. Is it load-bearing? Is it a workaround for a bug that was fixed years ago? The comment has the energy of a warning sign at an abandoned building.
❌ // increment i above $i++, faithfully documenting the one line that never needed it, right next to a forty-line method that documents nothing.
Exhibit C: the confident wiki page
❌ A page titled "How deployments work", last edited before two infrastructure changes. Every step is clear, detailed and wrong.
❌ "See the diagram below." There is no diagram below. There was a diagram. It lived in someone's personal drive.
The worst part isn't that the docs are missing. Wrong docs are worse than no docs, because you trust them. You follow them carefully, step by step, all the way off a cliff.
Why this keeps happening
When you write docs, you're the person who needs them least. Everything is fresh in your head, so every gap fills itself in as you read. "The usual steps" genuinely feels complete when you did them ten minutes ago.
And docs that live far away from the code (a wiki, a shared drive, a forgotten Notion page) don't get updated when the code changes, because nobody sees them during the change.
What actually helps
✅ Write for future you, who has forgotten everything. Picture yourself after six months on a different project, on a fresh laptop, slightly tired. That person is your reader. They need commands, not vibes.
✅ Show examples, not descriptions. "Configure the sync mode appropriately" helps nobody. SYNC_MODE=queue with one sentence on when you'd use the others helps everybody. A copy-pasteable command beats a paragraph every time.
✅ Keep docs near the code. The README in the repo, a short README inside a tricky module's folder, comments next to the weird line. Docs that live in the same pull request as the code get reviewed with it.
✅ Explain why, not what. The code already says what it does. The comment should say why it's like this: // Gateway rejects amounts with more than 2 decimals, so round before sending. Now future you knows whether it's still needed.
✅ Update docs in the same PR. Changed the setup? The README change belongs in that pull request. Make it a line in your PR template so it becomes a habit rather than a good intention.
✅ Test your docs. Once in a while, clone the repo fresh and follow the README exactly, no shortcuts from memory. Every place you get stuck is a bug in the docs. New team members are brilliant at this, so ask them to fix what they trip over.
✅ Write down decisions. A short note on why you chose this queue driver or that date format saves the same debate a year later. One file per decision is plenty.
The test: could someone who has never seen this project get it running from the README alone, without messaging you? If not, the README isn't finished.
A small bonus from the AI era
Good docs now have a second reader. AI coding tools read your README and instruction files to understand the project. Stale docs mislead them exactly the way they mislead people, just faster and with more confidence. Which is a pretty good reason to keep them honest.
Past me wasn't lazy. Past me just assumed present me would remember. Present me does not. Present me is writing things down now, mostly out of spite.
What's the most unhelpful line you've found in your own old documentation?

Be first to comment it...