<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tech on Sang's Blog</title><link>https://sangtd.net/tags/tech/</link><description>Recent content in Tech on Sang's Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://sangtd.net/tags/tech/rss.xml" rel="self" type="application/rss+xml"/><item><title>The on-call rotation is a social contract, not a schedule</title><link>https://sangtd.net/the-on-call-rotation-is-a-social-contract-not-a-schedule/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/the-on-call-rotation-is-a-social-contract-not-a-schedule/</guid><description>An on-call rotation is the only place where engineering decisions are tested against real-world consequences at three in the morning. Code review tests assumptions. Automated tests verify behavior. Staging environments simulate load. But on-call is the exam — the moment when a design choice made six months ago wakes someone up, demands an answer, and refuses to wait until morning. Everything else is preparation.
This is why the way an organization structures its on-call rotation reveals more about its engineering values than any mission statement ever will.</description></item><item><title>From Property to Permission</title><link>https://sangtd.net/from-property-to-permission/</link><pubDate>Sun, 05 Jul 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/from-property-to-permission/</guid><description>The Constitution of the United States, Article I, Section 8, Clause 8, grants Congress the power &amp;ldquo;to promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries.&amp;rdquo; The phrase &amp;ldquo;limited Times&amp;rdquo; was not an afterthought. It was the central bargain. The government grants a temporary monopoly — fourteen years, renewable once for a total of twenty-eight — and in exchange, the work enters the public domain for everyone to build upon.</description></item><item><title>Standards are infrastructure, not merchandise</title><link>https://sangtd.net/standards-are-infrastructure-not-merchandise/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/standards-are-infrastructure-not-merchandise/</guid><description>On June 17, 2026, the Society of Motion Picture and Television Engineers made an announcement that should not have been news. SMPTE, the 110-year-old organization that defines the technical standards behind everything from film reel dimensions to digital cinema projection, declared that its entire catalog of more than eight hundred standards documents would now be freely available to anyone, anywhere, without a paywall. The announcement was treated as a significant event.</description></item><item><title>Tokenmaxxing and the price of a token</title><link>https://sangtd.net/tokenmaxxing-and-the-price-of-a-token/</link><pubDate>Sun, 14 Jun 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/tokenmaxxing-and-the-price-of-a-token/</guid><description>The term &amp;ldquo;tokenmaxxing&amp;rdquo; entered the tech vocabulary sometime in 2025, born from a peculiar practice: companies publishing leaderboards of how many AI tokens each employee consumed, tying performance reviews to token burn, and sometimes spending more on API calls than on salaries. The reaction was predictable. The tech press called it Tulip Mania. Executives defended it as necessary to force adoption. Engineers called it the stupidest metric ever devised. Both sides had evidence for their position, and neither was entirely wrong.</description></item><item><title>Lack of Self-Reliance on AI Models Is a Disaster</title><link>https://sangtd.net/lack-of-self-reliance-on-ai-models-is-a-disaster/</link><pubDate>Sat, 13 Jun 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/lack-of-self-reliance-on-ai-models-is-a-disaster/</guid><description>On 10 June 2026, Anthropic released Fable 5, their most powerful model yet. Three days later, the Trump administration imposed export controls, forcing Anthropic to stop providing Fable 5 and Mythos 5 to users worldwide. This marked the first instance in history where the United States restricted the export of a commercially deployed AI model — not chips or hardware, but software. The government cited a security breach that could threaten national security.</description></item><item><title>The database convergence is already here</title><link>https://sangtd.net/the-database-convergence-is-already-here/</link><pubDate>Sun, 07 Jun 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/the-database-convergence-is-already-here/</guid><description>For about a decade, the standard narrative about databases has been fragmentation. The relational monolith cracked. NoSQL shattered the consensus. Now there are hundreds of specialised engines, each optimised for one shape of data, and the era of one database to rule them all is over. This narrative felt true because it was true, roughly from 2010 to 2018. But the real story of the past five years is the opposite: databases are converging, and the convergence is happening so fast that the question of which engine to use is becoming less interesting than the question of who is going to run it.</description></item><item><title>Go, Rust, and Zig</title><link>https://sangtd.net/go-rust-and-zig/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/go-rust-and-zig/</guid><description>For most of computing history, the debate about programming languages was really a debate about one thing: who is responsible for making sure the program does not break. At one extreme was C, which trusted the programmer completely and gave them absolute control over the machine. At the other extreme was Java, which trusted the programmer not at all and wrapped every operation in a runtime that mediated every memory allocation, every thread, and every type cast.</description></item><item><title>Search engines are broken</title><link>https://sangtd.net/search-engines-are-broken/</link><pubDate>Sat, 23 May 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/search-engines-are-broken/</guid><description>Search used to be simple. You typed words into a box, and a machine gave you a list of pages that contained those words, ranked by how many other pages linked to them. You clicked a result, left the search engine, and read what someone else had written. The search engine was a map. The web was the territory. That arrangement is gone. Google does not want to send you to a website anymore.</description></item><item><title>Database HA without Kubernetes</title><link>https://sangtd.net/database-ha-without-kubernetes/</link><pubDate>Sun, 17 May 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/database-ha-without-kubernetes/</guid><description>A production database must survive failures. The server crashes, the network partition occurs, the datacenter loses power. When Kubernetes is in the stack, the answer is an operator — the StatefulSet restarts the pod, the PersistentVolumeClaim re-attaches the volume, the service routes traffic to the new instance. The database is treated as cattle, and the operator translates infrastructure failures into pod lifecycle events.
But not every environment runs Kubernetes. On bare metal, on virtual machines in a private datacenter, on a three-node cluster behind a jump server, the tools are different and the abstractions are thinner.</description></item><item><title>Iroh, Less Net Work for Networks</title><link>https://sangtd.net/iroh-less-net-work-for-networks/</link><pubDate>Sat, 16 May 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/iroh-less-net-work-for-networks/</guid><description>It is surprisingly difficult to connect two devices directly over the internet. NAT boxes on home routers block inbound connections. Firewalls drop unfamiliar protocols. Dynamic IP addresses can change without warning. Personal devices do not have domain names. The internet was designed for clients to talk to servers with known addresses, not for peers to find each other across hostile middleboxes. Workarounds such as STUN, TURN and UPnP, as well as port forwarding, have made this possible, but it has never been simple.</description></item><item><title>Site-to-site VPN: connecting infrastructure across boundaries</title><link>https://sangtd.net/site-to-site-vpn-connecting-infrastructure-across-boundaries/</link><pubDate>Sun, 10 May 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/site-to-site-vpn-connecting-infrastructure-across-boundaries/</guid><description>Two networks need to communicate. One sits behind a NAT gateway in a cloud VPC, the other behind a firewall in a colocation facility. There is no direct fiber between them. The internet is the only path, and the traffic must be encrypted because it crosses untrusted infrastructure. A site-to-site VPN is the standard answer: an encrypted tunnel between two gateways that makes the two networks behave as one.
The scenario repeats across every infrastructure team.</description></item><item><title>From VPN to Zero Trust: the perimeter is no longer real</title><link>https://sangtd.net/from-vpn-to-zero-trust-the-perimeter-is-no-longer-real/</link><pubDate>Sat, 09 May 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/from-vpn-to-zero-trust-the-perimeter-is-no-longer-real/</guid><description>An engineer connects to the corporate VPN from a coffee shop. The VPN client authenticates, the tunnel comes up, and the laptop receives an IP address from the internal subnet. From that moment, the laptop can reach any server on the corporate network — the ERP system, the CI/CD pipeline, the production database, the internal wiki, the monitoring dashboard, the Git repository, the entire internal attack surface. The VPN tunnel is encrypted, so the link between the coffee shop and the corporate gateway is secure.</description></item><item><title>Cloud providers, the lock-in curve</title><link>https://sangtd.net/cloud-providers-the-lock-in-curve/</link><pubDate>Sun, 03 May 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/cloud-providers-the-lock-in-curve/</guid><description>Managed services reduce operational burden. A managed database eliminates backup and replication management. Object storage eliminates disk capacity management. Serverless functions eliminate scaling management. The cloud provider handles the infrastructure, and the team focuses on business logic. The result is agility, scalability, and efficiency.
Then the first large bill arrives. The breakdown shows charges for data transfer between services, API requests, storage IOPS, provisioned capacity that is not being used. Estimating next month&amp;rsquo;s bill is impossible because the pricing model is too complex.</description></item><item><title>Anonymous networks, from VPN to Tor to Freenet</title><link>https://sangtd.net/anonymous-networks-from-vpn-to-tor-to-freenet/</link><pubDate>Sat, 02 May 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/anonymous-networks-from-vpn-to-tor-to-freenet/</guid><description>The internet is not private. Each time you visit a website, your IP address is logged. Your internet provider can see every domain you connect to. The websites themselves can see your approximate location. Advertising networks compile behavioural profiles of your browsing across sites. Governments and corporations perform deep packet inspection on backbone traffic. The default state of being online is to be watched. You can either accept this or push back.</description></item><item><title>DNS is the phonebook of the internet</title><link>https://sangtd.net/dns-is-the-phonebook-of-the-internet/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/dns-is-the-phonebook-of-the-internet/</guid><description>Every time you open a website, your computer asks a question you never see. It translates the domain name you typed into the IP address of the server that hosts the page. The Domain Name System handles this translation, and it does so through a hierarchy: your computer checks its cache first, then contacts a resolver — typically run by your internet provider — which queries the root servers, the top-level domain servers and finally the authoritative name servers for the specific domain.</description></item><item><title>AI Models Are Compression Engines, and Memory Is the Workaround</title><link>https://sangtd.net/ai-models-are-compression-engines-and-memory-is-the-workaround/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/ai-models-are-compression-engines-and-memory-is-the-workaround/</guid><description>Ask an AI model about the history of the Roman Empire and it will give you a lecture spanning centuries. Ask it about quantum mechanics and it will walk you through wave functions and Bell inequalities. But ask it what you told it yesterday about your project, and it stares back blankly. It knows everything and remembers nothing. This is not a bug. It is the direct consequence of what these models actually are: compression engines.</description></item><item><title>DNS records for email, reputation takes time</title><link>https://sangtd.net/dns-records-for-email-reputation-takes-time/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/dns-records-for-email-reputation-takes-time/</guid><description>A mail server is configured. Postfix is set up, TLS is enabled, user accounts are created. A test email is sent to a Gmail account. It arrives in spam. The logs show everything is fine. The email was sent, the connection was successful. SPF, DKIM, and DMARC records are added to DNS. A day passes. Another test email is sent. Still spam. The headers show &amp;ldquo;SPF: pass,&amp;rdquo; &amp;ldquo;DKIM: pass,&amp;rdquo; &amp;ldquo;DMARC: pass.</description></item><item><title>Replication and sharding, consistency at scale</title><link>https://sangtd.net/replication-and-sharding-consistency-at-scale/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/replication-and-sharding-consistency-at-scale/</guid><description>A database cannot handle the load. Queries are slow, writes are blocking, connections are timing out. Replication offers a solution: create read replicas, route read traffic to them, and suddenly there is 10x the read capacity. The implementation works—for a while.
Then a user updates their profile, but when they refresh the page, the old data is still there. They refresh again, and now it is updated. The read replica is lagging behind the primary.</description></item><item><title>Privacy is not security</title><link>https://sangtd.net/privacy-is-not-security/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/privacy-is-not-security/</guid><description>There is a mistake that privacy-focused communities make so consistently that it has become almost invisible. It is the assumption that a product marketed as privacy-respecting is also more secure. This assumption is not just wrong. It is dangerous. Privacy and security are different properties, they require different organisational capabilities, and they frequently conflict in ways that leave users worse off than if they had never switched at all.
The distinction is not subtle once you state it plainly.</description></item><item><title>Linux and the Linux Foundation: open source that shaped the world</title><link>https://sangtd.net/linux-and-the-linux-foundation-open-source-that-shaped-the-world/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/linux-and-the-linux-foundation-open-source-that-shaped-the-world/</guid><description>In 1991, Linus Torvalds posted to the comp.os.minix newsgroup that he was writing a free operating system — not a big project, just a hobby. He said it would never be &amp;ldquo;professional&amp;rdquo; like GNU. Thirty-five years later, the Linux kernel runs on 100% of the top 500 supercomputers, on the majority of smartphones through Android, on every major cloud provider&amp;rsquo;s servers, and on billions of embedded devices from routers to Teslas.</description></item><item><title>Building infrastructure from bare metal</title><link>https://sangtd.net/building-infrastructure-from-bare-metal/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/building-infrastructure-from-bare-metal/</guid><description>A rack of servers arrives. Four nodes, each with two CPUs, 128GB of RAM, four network ports, and four hard drives. The task is to turn them into a private cloud: virtual machines for databases, Kubernetes nodes, storage, monitoring, and development environments. There is no cloud provider to abstract the hardware, no API to provision resources, no managed service to handle the network. Everything must be built from scratch, one layer at a time, and each layer constrains the layers above it.</description></item><item><title>ELK — logs tell stories, not facts</title><link>https://sangtd.net/elk-logs-tell-stories-not-facts/</link><pubDate>Sun, 08 Mar 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/elk-logs-tell-stories-not-facts/</guid><description>Logs are narrative, not data. A search for an error message returns ten thousand results. Filtering by service yields five thousand. Filtering by time range yields five hundred. An hour is spent scrolling through irrelevant entries. By the time the relevant log is found, the original question is forgotten.
This is the problem with treating logs as data. When everything is logged, facts are collected without context. &amp;ldquo;Request received.&amp;rdquo; &amp;ldquo;User logged in.</description></item><item><title>Message queues, delivery ≠ processing</title><link>https://sangtd.net/message-queues-delivery-processing/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/message-queues-delivery-processing/</guid><description>Message queues guarantee delivery, but delivery is not the same as processing. The queue ensures the message arrives; the application must ensure it is processed correctly.
Service A sends a message. The queue holds it. Service B consumes it, processes it, and acknowledges it. The system works—until Service B crashes after processing but before acknowledging. The queue redelivers the message. Service B processes it again. Now there is duplicate data in the database.</description></item><item><title>Tracking apps, the escape hatch from data lock-in</title><link>https://sangtd.net/tracking-apps-the-escape-hatch-from-data-lock-in/</link><pubDate>Sat, 28 Feb 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/tracking-apps-the-escape-hatch-from-data-lock-in/</guid><description>You know you should stop using platforms that exploit your data. You want to. But you cannot, because all your history is locked inside them. Ten years of Spotify playlists. Five hundred books logged on Goodreads. A decade of watched films on Netflix. These are not just lists. They are a record of your tastes, your memories, your identity as a consumer of culture. Leaving the platform means losing all of that.</description></item><item><title>Monitoring, three questions, three pillars</title><link>https://sangtd.net/monitoring-three-questions-three-pillars/</link><pubDate>Sun, 22 Feb 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/monitoring-three-questions-three-pillars/</guid><description>The monitoring dashboard shows CPU at 90%, memory at 85%, and error rate at 5%. Something is wrong, but what? The logs contain thousands of entries. The services all seem healthy. There are metrics, there are logs, but the question remains unanswered: why is the system slow?
This is the observability gap. Data without understanding is not observability. Something is wrong, but why it is wrong or where it is happening cannot be seen.</description></item><item><title>Maintain, risk compounds silently</title><link>https://sangtd.net/maintain-risk-compounds-silently/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/maintain-risk-compounds-silently/</guid><description>Risk compounds silently. Every day maintenance is deferred, the risk increases. A security vulnerability discovered today might have been patched last month if dependencies had been updated. A bug that causes a production outage might have been fixed in a newer version of the library. The cost of inaction is not static; it grows over time.
A security audit reveals the application is running a version of lodash with a known prototype pollution vulnerability.</description></item><item><title>CI/CD, the cost of change curve</title><link>https://sangtd.net/ci/cd-the-cost-of-change-curve/</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/ci/cd-the-cost-of-change-curve/</guid><description>The cost of fixing a problem increases exponentially as it moves through the pipeline. A syntax error caught by the compiler costs minutes to fix. A logic error caught by tests costs hours. A configuration error caught by staging costs days. A performance issue caught in production costs weeks.
CI/CD pipelines exist to catch problems at the cheapest possible point. Every stage is a feedback loop. Every feedback loop reduces the cost of change.</description></item><item><title>GitOps, pull vs push</title><link>https://sangtd.net/gitops-pull-vs-push/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/gitops-pull-vs-push/</guid><description>Traditional CI/CD pipelines push changes to infrastructure. The pipeline watches Git, builds artifacts, and executes commands against the cluster. It holds credentials, it knows the cluster endpoint, it has write access. The pipeline is the orchestrator, and the deployment is a one-way street: Git to cluster.
GitOps inverts this relationship. Instead of the pipeline pushing changes to the cluster, a controller inside the cluster pulls changes from Git. The controller watches the Git repository.</description></item><item><title>Infrastructure as code, drift is inevitable</title><link>https://sangtd.net/infrastructure-as-code-drift-is-inevitable/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/infrastructure-as-code-drift-is-inevitable/</guid><description>Drift is the gap between what the code says should exist and what actually exists in the infrastructure. It is the bane of Infrastructure as Code, and it is inevitable.
A security group rule is added at 2 AM to fix a production issue. It is a temporary fix, the promise goes. The code will be updated tomorrow. Tomorrow comes, and the fix is forgotten. A week later, terraform plan shows a diff.</description></item><item><title>Kubernetes, the reconciliation problem</title><link>https://sangtd.net/kubernetes-the-reconciliation-problem/</link><pubDate>Sat, 24 Jan 2026 00:00:00 +0700</pubDate><guid>https://sangtd.net/kubernetes-the-reconciliation-problem/</guid><description>Kubernetes uses a reconciliation loop to maintain desired state. The desired state is described in a YAML file, and the control plane continuously works to make reality match that description. No scripts, no deployment pipelines, no manual steps. Just a document and a loop that closes the gap between current state and desired state.
The abstraction is clean. The system is told what is wanted, not how to get it, and the system figures out the rest.</description></item></channel></rss>