Skip to content
Mohammed Kharbotli

~/blog

Blog

Notes on backend engineering, distributed systems, databases, and running software in production.

9 posts · rss

2026

  • The Hidden Cost of `flush()` in a Symfony Application

    Doctrine’s flush() can affect much more than the entity a repository appears to save. This article looks at Unit of Work behavior, transaction boundaries, lifecycle listeners, batch processing, failed flushes, and how to make persistence boundaries easier to understand and operate safely.

    #php #symfony #doctrine #database #software-architecture

  • The First Refactor I Make in a Legacy PHP Application

    A practical approach to the first refactor in a legacy PHP application: isolate important behavior, preserve existing semantics, add focused tests, and create a safer starting point for future changes.

    #php #legacy #refactoring #software-architecture #testing #maintainability

  • The Most Dangerous Button in an Admin Panel Is “Retry”

    A practical look at why retrying a failed operation can be dangerous. This article explores uncertain outcomes, stable operation identities, concurrent retries, multi-step workflows, safe recovery actions, and how to test the failure cases that matter.

    #php #software-architecture #reliability #idempotency #distributed-systems