- 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
A Developer's Year in Commit Messages (From "feat" to ".")
About Post
Some people keep a diary. Developers don't need one. We have git log, and it tells the story of our year with brutal honesty, one tired sentence at a time.
So as the year wraps up, here's a completely fictional, deeply relatable developer year, told only through commit messages. Any resemblance to your repository is purely coincidental. Probably.
January: new year, new me
feat(auth): add password reset flow with expiring tokens
Tokens expire after 60 minutes and are single-use.
Closes #112.
Look at that. A scope. A body. An issue reference. January-you writes commit messages like they'll be read aloud at an awards ceremony.
February: still going strong
refactor: extract invoice totals into InvoiceCalculator
Still respectable. A little shorter. The body has quietly disappeared, but we don't talk about that.
March: the first crack
fix
fix again
actually fix
Three commits, nine minutes apart. The bug was a missing !. Nobody will ever know which of the three commits contains it.
April: the vague era begins
update
changes
stuff
wip
The commit message equivalent of answering "how was your day?" with "fine". Technically true. Completely useless.
June: the deadline
final
final 2
final FINAL
final-final-use-this-one
Developers mocked designers for naming files logo_final_v3_REAL.psd for years. Then we got Git and did exactly the same thing, but with timestamps.
August: the Friday deploy
small change, should be safe
revert "small change, should be safe"
please
"Should be safe" is the most dangerous phrase in software. "Please" is the only honest commit message ever written.
October: the confession
remove console.log
remove the other console.log
remove debug code I definitely did not push to production
November: the AI era
Refactor and enhance the robust implementation of the
comprehensive user management module to improve
maintainability, scalability and overall code quality
The commit changed one variable name. Generated messages can be genuinely helpful, but only if you read them before you press Enter.
December: acceptance
.
A single full stop. The year has won.
Why any of this matters
It's funny until you're the one running git blame on a strange line of code at 11 p.m. and the only clue is "fix again". Commit messages are the one piece of documentation that's attached to the exact lines it explains, forever. The person who most often reads them is future you, with no memory of why you did it.
Here's what actually makes a commit message useful, without turning it into homework.
Commit messages future you will thank you for
✅ Write the subject as a command. "Add late fee to overdue invoices", not "added" or "adding". A good test: it should complete the sentence "If applied, this commit will…".
✅ Keep the subject short. Around 50 characters, no full stop. It has to fit in git log --oneline, in GitHub's list view and in your terminal.
✅ Explain the why in the body. The diff already shows what changed. The body is for the reason, the trade-off, or the thing you tried that didn't work. Leave a blank line after the subject.
✅ One logical change per commit. If the message needs the word "and", it's often two commits. Small commits are easier to review, revert and bisect.
✅ Squash the noise before merging. "fix", "fix again" and "actually fix" are fine on your branch. Squash or tidy them before they reach main, so the history tells a story instead of a struggle.
✅ Pick a convention as a team. Conventional Commits (feat:, fix:, refactor:) is popular and works well with changelog tools, but the best convention is the one everyone actually follows.
fix(payments): prevent double charge on retried requests
The mobile app retries after a timeout even when the first
request succeeded. Requests now carry an idempotency key,
and duplicates return the original response.
Thirty seconds to write. Saves an hour of archaeology a year from now.
The one rule: write every commit message as if the next person to read it is debugging production and has never met you. Sometimes that person is you.
Now be honest: what's the worst commit message in your repository's history? Mine might be a lone full stop.

Be first to comment it...