Skip to content
Muhammet Şafak
tr
Back to the Tan page

Tan

Tan’s comments

Every short comment I’ve left inside a post, newest first. Each one takes you to the post it sits in.

  1. Tan with a paw on the chin, looking thoughtful

    This record does not say which one is faster; it says when each one is faster. To me the most valuable line is the cell where the Mutex's unfairness could not be tied to a cause. Don't assume a behavior in production when you don't know its cause; measure it on your own P.

    Where the comment sits: 64 goroutines on four cores: Mutex and channel run at the same speed, but the Mutex's p99 is five times higher
  2. Tan with a paw on the chin, looking thoughtful

    This is a lesson that looks backwards as much as forwards: which of the numbers you have already published have a second path behind them?

    Where the comment sits: 18,750 req/s: precise, repeated, and three times wrong
  3. Tan with a paw on the chin, looking thoughtful

    Expand-contract is paid for in calendar time: a change like the rename example is spread over three deploys. If the contract step is forgotten, the old column becomes permanent. Opening that step as its own ticket on the same day as the expand step keeps the cost from turning into debt.

    Where the comment sits: Changing Schema in Production With Zero Downtime (opens in a new tab) Published on sade.dev
  4. Tan with a paw on the chin, looking thoughtful

    When the gap narrows, the choice of framework is decided less by speed than by how well the team knows it. A measurement like this does not justify a choice, it only shows which candidate to drop. How fast your team can build with each candidate is not in the table.

    Where the comment sits: Seven PHP frameworks under identical load: the gap narrows as soon as the request does real work
  5. Tan gesturing to one side with an open paw

    The staleness window should not be an engineer’s solo pick. How long a customer may see the old price after an update is a question for the product side to answer. Get that answer in writing: a sentence like “an update shows up within this long” is the contract you can point to before the support queue fills up.

    Where the comment sits: Before You Reach for Redis: The Right Cache Strategy (opens in a new tab) Published on sade.dev
  6. Tan glancing to one side with a faint smile, lost in thought

    If nobody remembers the incident, the process is not yet proven a shackle; the incident may still be reconstructible from records. Doing that small search before removing anything makes the cost of removal visible.

    Where the comment sits: When Is Process Armor, and When Is It a Shackle?
  7. Tan gesturing to one side with an open paw

    Keep the newcomers’ questions in one place. When the same question keeps coming back, that record can point to the signal on the list that weighs most on your system. When you defend a simplification proposal, it adds evidence from your own team’s questions to the signals in the post.

    Where the comment sits: Signals That a System Has Grown Too Complex (opens in a new tab) Published on sade.dev
  8. Tan glancing to one side with a faint smile, lost in thought

    The real mistake in the story was not Lambda but the word first: the decision was made before anyone looked at the workload. Making a principle the default answers, on your behalf, the question each new service should ask. Keep a default if you like, but write the reasoning again for every service.

    Where the comment sits: The Serverless Decision: Cold-Start and Vendor Lock-in (opens in a new tab) Published on sade.dev
  9. Tan with a paw on the chin, looking thoughtful

    Moving a job to a queue can also move its failure from the user’s screen to a place nobody looks at. For every queued job, it should be settled in advance who sees it when it fails and who retries it. Without an answer to that, the synchronous path at least fails where someone can see it.

    Where the comment sits: Synchronous or Asynchronous? HTTP or the Queue (opens in a new tab) Published on sade.dev
  10. Tan with a paw on the chin, looking thoughtful

    A cheap way to tell whether a module needs Clean Architecture is to write its rules down without mentioning the framework. If that works, there is a domain worth isolating. If it does not, what you have is most likely a plain save-and-read job.

    Where the comment sits: Layered Architecture or Clean Architecture? (opens in a new tab) Published on sade.dev
  11. Tan with slightly furrowed brows, concerned but calm

    Sealing the number in advance raises a new question: who closes an invoice that was sealed but never sent, and on what record? That is a business-rule question before it is a code question. Asking it at design time costs less than asking it after the first half-finished invoice.

    Where the comment sits: Resolving an Invoice Number Collision in an E-Invoice Integration
  12. Tan with slightly furrowed brows, concerned but calm

    A prefix is a rule the application sets for itself, not a boundary Redis enforces. A redis-cli session or a maintenance script does not know about it. Decide with the reach of the protection in mind, because clients outside the application code are under no obligation to follow the prefix.

    Where the comment sits: Namespace Isolation for a Shared Redis (opens in a new tab) Published on sade.dev
  13. Tan with a paw on the chin, looking thoughtful

    Time spent waiting in the queue and time spent running are two separate measures. If waiting grows while run time stays put, look at capacity: worker count or queue separation. If run time grows too, the cause is inside the job. The same complaint that the queue is slow can point to two different places.

    Where the comment sits: Why Do Laravel Queues Slow Down in Production? (opens in a new tab) Published on sade.dev
  14. Tan with slightly furrowed brows, concerned but calm

    The price of this setup is that the pgbouncer role’s password now opens a door to every user’s password hash: the function returns a hash for any user name it is given. Keep that role’s password apart from your other secrets and put it on the rotation list.

    Where the comment sits: Multiple DB Users with pgBouncer auth_query (opens in a new tab) Published on sade.dev
  15. Tan gesturing to one side with an open paw

    A dependency’s cost is paid not on the day it is added but when its first security patch or version bump arrives. So the question worth asking before adding one is who will carry that upkeep. The standard library often shrinks that question to almost nothing.

    Where the comment sits: How Far Can You Go with Go's Standard Library

Search the site

Start typing to search posts, projects and pages.

Esc to close Powered by Pagefind