Upgrade Triggers: Mandatory, Locking, Opportunity
A Dependabot PR, an EOL notice and a CVE bulletin share one queue but not one urgency. Sort signals into three types and give each a response time.
Engineering
About Muhammet Şafak and the Engineering section — why it exists, where it is going, what gets written here and what does not.
How every piece is built
Notes, system write-ups and essays in one stream, newest first.
A Dependabot PR, an EOL notice and a CVE bulletin share one queue but not one urgency. Sort signals into three types and give each a response time.
The real payoff of unit and integration tests: which one actually prevents production bugs, and where to spend your testing budget.
A PHP 7.1 → 8.2 upgrade was put off because "it works." The bill came later: a dependency lock, batched breaking changes, and bugs spread over months.
Test coverage is not a target, it's a byproduct. The cost of tests written to push the number up that catch no bugs at all
The security, maintenance, and supply-chain cost of adding a dependency for a small function — and when writing it yourself is cheaper
Separating read and write models: the clarity CQRS buys in a complex domain, and the dead weight it adds to plain CRUD
Separating old records that bloat the live table: partitioning, cold storage, and keeping query access while you archive
Most big-data problems are really bad modeling or a missing index; before moving to a distributed system, ask whether the data is actually big
On a queue table, an index and an autovacuum threshold that grow with the table scale wrong; the measured case for sizing both to the pending jobs
Is the ORM making us lazy, or actually protecting us? The balance of safety, readability, and performance between the two approaches
A missing index slows the query; too many indexes make every write expensive. Striking the right balance by measurement, not by guesswork
Running migrations without causing downtime in production: backward-compatible steps, multi-phase column changes, and avoiding table locks
Articles that develop one topic part by part.
Keeping a single PostgreSQL cluster healthy in production: connection pooling, backups, read/write splitting, zero-downtime migrations and restore testing.
5-part series
Treating runtime, framework and dependency upgrades as a risk decision: triggers, inventory, decision matrix, rollout and the decision not to upgrade.
2-part series
Developer tools that run entirely in your browser.
Encode and decode text as Base64, with a URL-safe variant and full UTF-8 support. Runs in your browser; your text is never sent anywhere.
Format JSON with 2-space, 4-space or tab indentation, or minify it; invalid JSON gets an error message. Runs in your browser; your data never leaves it.
Decodes a JWT header and payload and shows the exp and iat claims as ISO timestamps. It does not verify the signature; the token stays in your browser.
Cryptographically secure password generator: set the length and character classes, and optionally exclude look-alike and shell characters. Runs in your browser.
What Turkish technical writing is missing is not another introduction; it is a reference an engineer can return to when the same decision lands on their desk. That is where the Engineering section is going: an archive of decisions that still show which constraint produced them, years after they were made.
I measure that three ways. A piece cited as a source in Turkish engineering conversations. An engineer who arrived for a tool staying for the writing. A site that opens like documentation rather than like a marketing page.
The notebook will get larger. It will not get faster.