<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://toolforge-3et.pages.dev/</id>
  <title>Toolforge</title>
  <subtitle>New and updated guides: how the tools that run the internet actually work.</subtitle>
  <link rel="self" type="application/atom+xml" href="https://toolforge-3et.pages.dev/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/"/>
  <updated>2026-10-26T06:46:26.000Z</updated>
  <author><name>Sepuri Sai Krishna</name><uri>https://github.com/SEPURI-SAI-KRISHNA</uri></author>
  <rights>CC BY 4.0</rights>
  <entry>
    <id>https://toolforge-3et.pages.dev/dns/01-what-and-why/</id>
    <title>DNS</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/dns/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Foundations"/>
    <summary type="html">The oldest distributed database still running, and the one every request starts with. Delegation down a tree of zones, caches that only obey themselves, a protocol still shaped by a 512-byte packet — and why nothing ever &quot;propagates&quot;.</summary>
    <content type="html">&lt;p&gt;The oldest distributed database still running, and the one every request starts with. Delegation down a tree of zones, caches that only obey themselves, a protocol still shaped by a 512-byte packet — and why nothing ever &quot;propagates&quot;.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/01-what-and-why/&quot;&gt;1. What DNS is, and why it exists&lt;/a&gt; — A distributed database older than the web, answering one question billions of times a second — what delegation bought, what caching cost, and why it is still the first thing every request does.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/02-the-namespace/&quot;&gt;2. The namespace&lt;/a&gt; — Labels, the trailing dot, case-insensitivity that is not quite case-insensitivity, what a zone actually is, where delegation cuts the tree, and the names that are special.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/03-the-architecture/&quot;&gt;3. The architecture&lt;/a&gt; — Stub, recursive and authoritative servers — what each actually does, the root servers that are not thirteen machines, anycast, and the software that implements each role.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/04-records/&quot;&gt;4. Records&lt;/a&gt; — The record types that matter — A, AAAA, CNAME, MX, TXT, SRV, CAA and the rest — what each is for, the CNAME rules everybody breaks, and the apex problem.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/05-a-lookup-traced/&quot;&gt;5. A lookup traced&lt;/a&gt; — One getaddrinfo call followed through every cache and server — the stub, the resolver, the root, the TLD, the authority, and what happens the second time.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/06-caching-and-ttl/&quot;&gt;6. Caching and TTL&lt;/a&gt; — The bargain that makes DNS scale — who caches what, negative caching and the SOA minimum, why nothing ever propagates, and how to actually perform a migration.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/07-the-wire-protocol/&quot;&gt;7. The wire protocol&lt;/a&gt; — The message format, the 512-byte limit that still shapes everything, EDNS0 and the 1232-byte compromise, TCP fallback, name compression, and the amplification problem.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/08-zones-and-delegation/&quot;&gt;8. Zones and delegation&lt;/a&gt; — The SOA fields and what each one actually controls, AXFR and IXFR, NOTIFY, TSIG, dynamic updates, and keeping the parent and child in step at a zone cut.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/09-dnssec/&quot;&gt;9. DNSSEC&lt;/a&gt; — What DNSSEC actually signs, the chain of trust from the root down, proving a name does not exist, the key ceremony, and the operational failures that take domains offline.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/10-encrypted-dns/&quot;&gt;10. Encrypted DNS&lt;/a&gt; — DoT, DoH, DoQ and ODoH — what they encrypt, what still leaks, how they differ operationally, the centralisation argument, and what they mean for a corporate network.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/11-service-discovery/&quot;&gt;11. DNS as service discovery&lt;/a&gt; — Round-robin, GeoDNS, latency routing and health-checked failover — what DNS can and cannot do as a load balancer, and what Kubernetes, Consul and CoreDNS actually build on top of it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/12-operating-a-zone/&quot;&gt;12. Operating a zone&lt;/a&gt; — Registrars and registries, the apex problem in practice, zone-as-code, split-horizon, subdomain takeover, and the changes that take a company off the internet.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — Resolver sizing and cache hit rates, prefetching, stub timeouts, authoritative capacity and RRL, the metrics worth watching, and where the real latency actually is.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — The incidents DNS actually produces — SERVFAIL that is really DNSSEC, works-for-me caching, exactly-5-second timeouts, dangling CNAMEs, and a diagnostic order that works.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/15-choosing-a-setup/&quot;&gt;15. Choosing a setup&lt;/a&gt; — Managed or self-hosted, one provider or two, which resolver to run, whether to sign, and an honest account of what each choice costs.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dns/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Record types, flags, response codes, dig recipes, SOA fields, TTL policy, special names, a diagnostic order — everything from this guide on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/cassandra/01-what-and-why/</id>
    <title>Cassandra</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/cassandra/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Databases"/>
    <summary type="html">The opposite bet: no leader, no failover, every node writable. The ring, the LSM tree, tombstones, compaction, quorum arithmetic, and why the data model is permanent.</summary>
    <content type="html">&lt;p&gt;The opposite bet: no leader, no failover, every node writable. The ring, the LSM tree, tombstones, compaction, quorum arithmetic, and why the data model is permanent.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/01-what-and-why/&quot;&gt;1. What Cassandra is, and why it exists&lt;/a&gt; — The problem that a single-writer database cannot solve, where Cassandra came from, and the trades it makes to solve it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/02-the-ring/&quot;&gt;2. The ring&lt;/a&gt; — Consistent hashing, tokens, virtual nodes, replica placement, gossip, and how a cluster with no leader agrees on anything.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/03-storage-engine/&quot;&gt;3. The storage engine on disk&lt;/a&gt; — The commit log, memtables, and SSTables — the LSM tree that makes writes fast and reads complicated.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/04-the-data-model/&quot;&gt;4. The data model&lt;/a&gt; — Partition keys, clustering columns, and query-first design — the chapter that decides whether your cluster works.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/05-write-path/&quot;&gt;5. A write, traced end to end&lt;/a&gt; — From the client through the coordinator to the replicas, into the commit log and memtable, and out to an SSTable.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/06-read-path/&quot;&gt;6. A read, traced end to end&lt;/a&gt; — Bloom filters, caches, the partition index, merging SSTables by timestamp, and why reads are the hard part of an LSM tree.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/07-timestamps-and-tombstones/&quot;&gt;7. Timestamps and tombstones&lt;/a&gt; — Last-write-wins conflict resolution, why a delete writes data, gc_grace_seconds, zombie rows, and the tombstone patterns that kill clusters.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/08-compaction/&quot;&gt;8. Compaction&lt;/a&gt; — The four strategies, what each optimises for, how to choose, and how to tell when compaction is losing.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/09-consistency-levels/&quot;&gt;9. Consistency levels&lt;/a&gt; — The R + W &amp;gt; RF arithmetic, every level and what it costs, and why QUORUM across data centres is the classic expensive mistake.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/10-anti-entropy/&quot;&gt;10. Anti-entropy — hints, read repair, and repair&lt;/a&gt; — The three mechanisms that make replicas converge, why repair is a scheduled operational duty, and what happens if you skip it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/11-lwt-batches-counters/&quot;&gt;11. Lightweight transactions, batches, and counters&lt;/a&gt; — Paxos-backed compare-and-set, why BATCH is not a transaction, and the one data type that breaks all the rules.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/12-multi-dc-and-backups/&quot;&gt;12. Multi-datacenter, topology, and backups&lt;/a&gt; — Snitches, adding a data centre live, active-active deployment, snapshots, incremental backups, and restore.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/13-tuning-and-operations/&quot;&gt;13. Tuning and day-to-day operations&lt;/a&gt; — JVM and garbage collection, the settings that matter, what to monitor, rolling upgrades, and schema changes without breaking the cluster.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/14-failure-modes/&quot;&gt;14. Failure modes and war stories&lt;/a&gt; — The twelve ways Cassandra actually goes wrong — what each looks like, why it happens, how to fix it now, and how to prevent it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/15-when-to-use/&quot;&gt;15. When to use Cassandra — and when not to&lt;/a&gt; — The honest boundaries. What Cassandra is genuinely best at, the workloads it suits, and the six cases where you should use something else.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cassandra/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Every command, setting, and rule of thumb from this guide, on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/clickhouse/01-what-and-why/</id>
    <title>ClickHouse</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/clickhouse/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Databases"/>
    <summary type="html">The other direction entirely: columns, not rows. Sparse indexes over granules, compression that changes the economics, MergeTree, and aggregations over billions of rows in under a second.</summary>
    <content type="html">&lt;p&gt;The other direction entirely: columns, not rows. Sparse indexes over granules, compression that changes the economics, MergeTree, and aggregations over billions of rows in under a second.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/01-what-and-why/&quot;&gt;1. What ClickHouse is, and why it exists&lt;/a&gt; — OLTP versus OLAP, why a row store cannot win at analytics, where ClickHouse came from, and the trades it makes.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/02-columns-and-compression/&quot;&gt;2. Columns and compression&lt;/a&gt; — The files on disk, how a column becomes compressed blocks, the codecs that matter, and why sorting is what makes compression work.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/03-mergetree/&quot;&gt;3. MergeTree — parts, granules, and the sparse index&lt;/a&gt; — The engine everything is built on — immutable data parts, background merges, granules of 8192 rows, and a primary index that fits in memory.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/04-mergetree-family/&quot;&gt;4. The MergeTree family&lt;/a&gt; — Replacing, Summing, Aggregating, Collapsing and VersionedCollapsing — the engines that do work during merges, and the FINAL trap.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/05-keys-partitions-ttl/&quot;&gt;5. The ordering key, partitions, and TTL&lt;/a&gt; — The most consequential decision in ClickHouse — how to choose ORDER BY, how PARTITION BY differs from it, and how TTL moves and deletes data automatically.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/06-an-insert-traced/&quot;&gt;6. An insert, traced — and why batching is mandatory&lt;/a&gt; — From INSERT to a part on disk, why one row at a time destroys a cluster, async inserts, and the truth about UPDATE and DELETE.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/07-a-query-traced/&quot;&gt;7. A query, traced end to end&lt;/a&gt; — Index analysis, PREWHERE, parallel reading, vectorised execution, and how to read EXPLAIN and the query log.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/08-types-and-dialect/&quot;&gt;8. Types and the SQL dialect&lt;/a&gt; — Why Nullable costs you, integers sized properly, arrays and Map, Enum and LowCardinality, and the ClickHouse-specific SQL worth knowing.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/09-aggregation/&quot;&gt;9. Aggregation, combinators, and states&lt;/a&gt; — How GROUP BY actually runs, the combinator suffixes that multiply every function, approximate aggregates, and the memory limits.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/10-joins-and-dictionaries/&quot;&gt;10. Joins and dictionaries&lt;/a&gt; — Why the right table goes in memory, join order being your job, distributed join pitfalls, and why dictionaries are usually the better answer.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/11-materialized-views/&quot;&gt;11. Materialised views and projections&lt;/a&gt; — The insert trigger that is not a view, the AggregatingMergeTree rollup pattern end to end, refreshable views, and projections.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/12-distributed/&quot;&gt;12. Distributed ClickHouse&lt;/a&gt; — Shards and replicas, ReplicatedMergeTree and Keeper, the Distributed engine, sharding keys, and the shared-storage model.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — The system tables that tell you everything, memory and quota limits, backups, upgrades, and the settings actually worth changing.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — Ten things that actually go wrong in production ClickHouse — the symptom, the cause, the diagnosis, and the fix.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/15-when-to-use/&quot;&gt;15. When to use ClickHouse — and when not to&lt;/a&gt; — What it is genuinely best at, the six cases where you want something else, and how it compares to DuckDB, Druid, Pinot, Snowflake and Elasticsearch.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/clickhouse/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — The one-page reference — the numbers, the system tables, the DDL template, and the decisions that matter.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/cockroachdb/01-what-and-why/</id>
    <title>CockroachDB</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/cockroachdb/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Databases"/>
    <summary type="html">Postgres SQL and serializable transactions, spread across machines that are allowed to die. Ranges and per-range Raft, write intents, clocks that disagree on purpose, and the retry error you have to write code for.</summary>
    <content type="html">&lt;p&gt;Postgres SQL and serializable transactions, spread across machines that are allowed to die. Ranges and per-range Raft, write intents, clocks that disagree on purpose, and the retry error you have to write code for.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/01-what-and-why/&quot;&gt;1. What CockroachDB is, and why it exists&lt;/a&gt; — The gap between a database that is always right and a database that is always up, what it costs to stand in it, and the promises CockroachDB makes you.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/02-the-architecture/&quot;&gt;2. The architecture&lt;/a&gt; — One binary, five layers, symmetric nodes — and why the machine you connect to is almost never the machine holding your row.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/03-ranges-and-the-key-space/&quot;&gt;3. Ranges and the key space&lt;/a&gt; — How a SQL row becomes a key, how the key space is cut into ranges, and why your primary key decides the shape of your cluster's load.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/04-replication-and-raft/&quot;&gt;4. Replication and Raft&lt;/a&gt; — One consensus group per range, why the leaseholder is separate from the Raft leader, and how the allocator decides where copies of your data live.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/05-transactions/&quot;&gt;5. Transactions&lt;/a&gt; — Write intents, the transaction record, parallel commits — and the retry error your application has to be written around.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/06-mvcc-and-clocks/&quot;&gt;6. MVCC and clocks&lt;/a&gt; — Hybrid logical clocks, the uncertainty interval, and the garbage-collection window that decides how far back you can see.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/07-a-write-traced/&quot;&gt;7. A write traced&lt;/a&gt; — One INSERT followed from the client socket through the gateway, the leaseholder, Raft and Pebble — and back, with the milliseconds accounted for.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/08-reads/&quot;&gt;8. Reads&lt;/a&gt; — Why a read is usually one local lookup, and how follower reads, closed timestamps and bounded staleness keep a query inside its own region.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/09-sql-and-the-optimizer/&quot;&gt;9. SQL and the optimizer&lt;/a&gt; — A cost-based planner whose costs include network hops, distributed execution, the join types that matter, and how to read a plan.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/10-schema-and-indexes/&quot;&gt;10. Schema and indexes&lt;/a&gt; — Primary keys as physical decisions, covering and partial indexes, hash sharding, foreign keys, and schema changes that never take the table offline.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/11-multi-region/&quot;&gt;11. Multi-region&lt;/a&gt; — Survival goals, table localities, and the latency arithmetic of a quorum that spans oceans — the feature people actually buy this database for.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/12-backups-and-changefeeds/&quot;&gt;12. Backups and changefeeds&lt;/a&gt; — Getting data out — incremental backups that depend on the GC window, restores you have practised, and change data capture that comes with the database.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — What to watch, what to set, and how to find the one query, one range or one row that is hurting the whole cluster.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — The specific ways a CockroachDB cluster goes wrong — what each looks like from the outside, why it happens, and what to do.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/15-when-to-use/&quot;&gt;15. When to use it&lt;/a&gt; — The honest comparison — against PostgreSQL, Vitess, Spanner, Yugabyte and DynamoDB — and the cases where the answer is plainly no.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/cockroachdb/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Commands, settings, SQL, metrics, thresholds and error messages — everything from this guide on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/dynamodb/01-what-and-why/</id>
    <title>DynamoDB</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/dynamodb/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Databases"/>
    <summary type="html">Predictable latency bought by refusing to do anything unpredictable. Partition keys that decide everything, capacity units as the unit of thought, single-table design, and a bill that is a direct function of your access patterns.</summary>
    <content type="html">&lt;p&gt;Predictable latency bought by refusing to do anything unpredictable. Partition keys that decide everything, capacity units as the unit of thought, single-table design, and a bill that is a direct function of your access patterns.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/01-what-and-why/&quot;&gt;1. What DynamoDB is, and why it exists&lt;/a&gt; — A database that refuses to do anything whose cost it cannot predict — where that principle came from, what it buys, and what it takes away.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/02-tables-keys-and-items/&quot;&gt;2. Tables, keys and items&lt;/a&gt; — The data model in detail — primary keys, attribute types, item collections, and the hard limits that shape every design decision you will make.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/03-partitions/&quot;&gt;3. Partitions and the storage layer&lt;/a&gt; — How a key becomes a machine — hashing, partition splits, replication across three availability zones, and the throughput ceiling behind every hot-key story.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/04-reads-and-writes/&quot;&gt;4. Reads and writes&lt;/a&gt; — The whole API surface — GetItem, Query, Scan, the write operations, expressions, conditional writes, and the consistency choice you make on every read.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/05-a-request-traced/&quot;&gt;5. A request traced&lt;/a&gt; — One PutItem and one Query followed from the SDK through authentication, routing and replication — with the milliseconds and the capacity units accounted for.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/06-capacity-and-cost/&quot;&gt;6. Capacity and cost&lt;/a&gt; — RCUs and WCUs, on-demand versus provisioned, throttling and bursts — and how to predict the bill from your access patterns before you build.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/07-secondary-indexes/&quot;&gt;7. Secondary indexes&lt;/a&gt; — Local and global indexes — what each one really is, what they cost on every write, and the backpressure that turns a throttled index into a table-wide outage.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/08-single-table-design/&quot;&gt;8. Single-table design&lt;/a&gt; — Modelling from access patterns instead of entities — overloaded keys, adjacency lists, hierarchical sort keys, and an honest account of when not to bother.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/09-transactions-and-consistency/&quot;&gt;9. Transactions and consistency&lt;/a&gt; — Conditional writes, TransactWriteItems, optimistic locking and idempotency — what is guaranteed, what it costs, and what you still have to build.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/10-streams-and-events/&quot;&gt;10. Streams and event-driven patterns&lt;/a&gt; — Change data capture built into the table — record formats, Lambda triggers, ordering guarantees, and the patterns that make a key-value store the centre of an architecture.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/11-global-tables-and-backups/&quot;&gt;11. Global tables and backups&lt;/a&gt; — Active-active multi-region replication and its last-writer-wins arithmetic, point-in-time recovery, on-demand backups, and exporting to S3 for the queries DynamoDB will not run.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/12-operations-and-ecosystem/&quot;&gt;12. Operations and the ecosystem&lt;/a&gt; — IAM down to the item level, encryption, DAX, local development, infrastructure as code, and the tools that make the rest of this guide practical.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — The levers that actually change latency and cost — item size, key sharding, pagination, batching, capacity mode — and the checklist to run before you ship.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — Throttles, hot keys, silent truncation, index backpressure and cost explosions — what each looks like from the outside, and what to do about it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/15-when-to-use/&quot;&gt;15. When to use it&lt;/a&gt; — The honest comparison — against PostgreSQL, Cassandra, MongoDB, Redis and the managed alternatives — plus the lock-in question, stated plainly.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dynamodb/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Limits, capacity arithmetic, expressions, CLI commands, metrics and error messages — everything from this guide on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/debezium/01-what-and-why/</id>
    <title>Debezium</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/debezium/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Streaming &amp; messaging"/>
    <summary type="html">The tool that noticed your database already writes down every change it makes — and that reading that log solves a problem no amount of careful code can.</summary>
    <content type="html">&lt;p&gt;The tool that noticed your database already writes down every change it makes — and that reading that log solves a problem no amount of careful code can.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/01-what-and-why/&quot;&gt;1. What Debezium is, and why it exists&lt;/a&gt; — The dual-write problem, why reading a database's log beats asking it questions, and an honest account of what change data capture costs.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/02-the-log-per-database/&quot;&gt;2. The log, per database&lt;/a&gt; — WAL, binlog, oplog, capture tables and redo — what each database actually exposes, what it demands in return, and where the sharp edges are.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/03-deployment-shapes/&quot;&gt;3. Deployment shapes&lt;/a&gt; — Kafka Connect, Debezium Server, the embedded engine and the Kubernetes operator — four ways to run it, and the constraint all four share.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/04-the-change-event/&quot;&gt;4. The change event&lt;/a&gt; — The envelope, the operation codes, tombstones, and the type-mapping surprises that turn a decimal into a base64 string.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/05-snapshots/&quot;&gt;5. Snapshots&lt;/a&gt; — How the existing rows get out, why the initial snapshot is the worst part of CDC, and the incremental snapshot that fixed it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/06-a-change-traced/&quot;&gt;6. A change traced&lt;/a&gt; — One UPDATE followed from COMMIT through the WAL, logical decoding, the connector, the converter and Kafka — and back again to advance the slot.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/07-offsets-and-delivery/&quot;&gt;7. Offsets and delivery&lt;/a&gt; — What a restart actually replays, why at-least-once is the default, and what it takes to make consumers safe.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/08-topics-and-routing/&quot;&gt;8. Topics and routing&lt;/a&gt; — Naming, partitioning, retention and the routing decisions that determine what every downstream consumer can and cannot rely on.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/09-transformations/&quot;&gt;9. Transformations&lt;/a&gt; — Single message transforms — the unwrap everybody uses, masking and filtering, and the point at which you should stop and use a stream processor.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/10-the-outbox-pattern/&quot;&gt;10. The outbox pattern&lt;/a&gt; — Publishing the events you designed instead of the table rows you happen to have — with the same transactional guarantee and none of the schema coupling.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/11-schema-changes/&quot;&gt;11. Schema changes&lt;/a&gt; — What happens when the captured table is altered — the history topic that makes it survivable, and the migrations that break four teams at once.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/12-consumers-and-sinks/&quot;&gt;12. Consumers and sinks&lt;/a&gt; — What actually reads a change stream — sink connectors, stream processors and services — and the upsert-by-key pattern every one of them converges on.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — Keeping the source database safe, the metrics that matter, throughput tuning, and the runbook you need before the first incident.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — The specific ways CDC pipelines go wrong — the two that take down the source database, and the many that are silently wrong for months.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/15-when-to-use/&quot;&gt;15. When to use CDC, and when not&lt;/a&gt; — An honest comparison against polling, triggers, application events, Fivetran and the managed services — and the question that decides it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/debezium/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Source setup, connector config, the event shape, signals, SMTs and diagnostics — the whole guide on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/duckdb/01-what-and-why/</id>
    <title>DuckDB</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/duckdb/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Processing &amp; query engines"/>
    <summary type="html">The engine that noticed one machine is far bigger than anyone assumed — a whole analytical database inside your process, with no server at all.</summary>
    <content type="html">&lt;p&gt;The engine that noticed one machine is far bigger than anyone assumed — a whole analytical database inside your process, with no server at all.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/01-what-and-why/&quot;&gt;1. What DuckDB is, and why it exists&lt;/a&gt; — The analytical database that runs inside your process — where it came from, the gap it noticed, and why a laptop turned out to be bigger than the industry assumed.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/02-the-embedded-model/&quot;&gt;2. The embedded model&lt;/a&gt; — What actually disappears when a database has no server — the process boundary, zero-copy data exchange, and the four things you give up in return.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/03-storage/&quot;&gt;3. The storage layer&lt;/a&gt; — What is inside a .duckdb file — blocks, row groups, column segments, the compression that runs per segment, and the write-ahead log that makes it durable.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/04-the-execution-engine/&quot;&gt;4. The vectorised execution engine&lt;/a&gt; — Why 2048 rows is the right batch size, how push-based pipelines differ from pull, and morsel-driven parallelism — the three ideas that make one machine fast.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/05-files-as-tables/&quot;&gt;5. Reading files in place&lt;/a&gt; — Parquet, CSV, JSON, globs, Hive partitioning and object storage — the feature that removes the import step, and the details that decide whether it is fast.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/06-the-sql-dialect/&quot;&gt;6. The SQL dialect&lt;/a&gt; — Friendly SQL — the deliberate small kindnesses, the nested types, and the join and window features that make DuckDB's dialect a genuine reason to choose it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/07-a-query-traced/&quot;&gt;7. A query traced end to end&lt;/a&gt; — One query over 41 million rows in Parquet, followed from the string you typed through parser, binder, optimiser, pipelines and morsels to the answer, with timings.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/08-the-optimizer/&quot;&gt;8. The optimizer&lt;/a&gt; — Cardinality estimation, join ordering, the rewrite passes that run before them, and how to read EXPLAIN ANALYZE when the plan is wrong.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/09-extensions/&quot;&gt;9. Extensions and federation&lt;/a&gt; — The extension system, the ones worth knowing, and the honest account of how much work gets pushed into Postgres, Iceberg or S3 rather than pulled back to you.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/10-larger-than-memory/&quot;&gt;10. Joins, aggregation and larger than memory&lt;/a&gt; — How hash joins, aggregations and sorts spill to disk, what it costs, and the specific cases where DuckDB still cannot finish a query that does not fit.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/11-concurrency/&quot;&gt;11. Concurrency and transactions&lt;/a&gt; — What &amp;quot;one writer&amp;quot; actually means, how many readers you can have, the optimistic conflict rules, and the four patterns for getting concurrent work done anyway.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/12-clients-and-ecosystem/&quot;&gt;12. The clients and the ecosystem&lt;/a&gt; — Python and the zero-copy Arrow path, the CLI, WebAssembly in the browser, dbt-duckdb, MotherDuck — and where the zero-copy claim stops being true.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — The settings that actually matter, memory sizing in containers, backup, and running DuckDB in CI, Docker, Kubernetes and Lambda.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — Fourteen ways DuckDB goes wrong in practice — the symptom, the mechanism, the immediate fix and the permanent one.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/15-when-to-use/&quot;&gt;15. When to use DuckDB, and when not&lt;/a&gt; — The one question that decides it, honest comparisons against ClickHouse, Polars, SQLite, Postgres, Spark, Trino and a warehouse, and the four ways it is misused.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/duckdb/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Settings, SQL, file reading, diagnostics, extensions and troubleshooting — the whole guide on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/docker/01-what-and-why/</id>
    <title>Docker</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/docker/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Containers &amp; orchestration"/>
    <summary type="html">The layer under everything above. Namespaces and cgroups, layers and copy-up, the Dockerfile line by line, a build traced through its cache, PID 1 and the ten-second stop, and volumes that survive.</summary>
    <content type="html">&lt;p&gt;The layer under everything above. Namespaces and cgroups, layers and copy-up, the Dockerfile line by line, a build traced through its cache, PID 1 and the ten-second stop, and volumes that survive.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/01-what-and-why/&quot;&gt;1. What Docker is and why it exists&lt;/a&gt; — The problem Docker actually solved — which was not isolation, because Linux already had that. Why VMs were the wrong shape, what Docker invented, and the four different things people call &amp;quot;Docker&amp;quot;.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/02-what-a-container-is/&quot;&gt;2. What a container actually is&lt;/a&gt; — Namespaces, cgroups, capabilities and the root filesystem pivot — built by hand, without Docker, so you can see there is no magic and no container object anywhere in the kernel.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/03-images-and-layers/&quot;&gt;3. Images, layers and registries&lt;/a&gt; — Overlayfs from the bottom up, why deleting a file makes the image bigger, content addressing, what a manifest really contains, multi-arch images, and how a registry deduplicates the world.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/04-the-architecture/&quot;&gt;4. The architecture&lt;/a&gt; — CLI, dockerd, containerd, the shim and runc — what each piece is for, why the shim exists, what Kubernetes actually removed in 2020, and why the Docker socket is root on your machine.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/05-the-dockerfile/&quot;&gt;5. The Dockerfile&lt;/a&gt; — The most important chapter in this guide — every instruction, which ones create layers, the ENTRYPOINT and CMD table everyone gets wrong, ARG versus ENV, COPY versus ADD, and the ordering rule that decides your build times.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/06-a-build-traced/&quot;&gt;6. A build, traced&lt;/a&gt; — What happens between pressing enter on docker build and having an image — the context tar, the LLB graph, the exact cache key rule, layer creation, and the manifest that lands on disk.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/07-buildkit-and-caching/&quot;&gt;7. BuildKit, caching and multi-stage builds&lt;/a&gt; — Cache mounts that make dependency installs instant, secret mounts that do not leak, multi-stage patterns that cut images by 90 percent, and how to give a fresh CI runner a warm cache.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/08-running-containers/&quot;&gt;8. Running containers&lt;/a&gt; — The lifecycle from created to dead, PID 1 and the signal problem that makes every deploy ten seconds slower, zombie reaping, exit codes decoded, restart policies, and exec versus attach.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/09-storage/&quot;&gt;9. Storage and volumes&lt;/a&gt; — Why the writable layer is not storage, named volumes versus bind mounts versus tmpfs, the permission problem everyone hits once, the empty-directory surprise, and how to back any of it up.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/10-networking/&quot;&gt;10. Networking&lt;/a&gt; — veth pairs and the bridge, why publishing a port is just a NAT rule, the embedded DNS server that only exists on user-defined networks, host and none and macvlan, and reaching the host from inside.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/11-security/&quot;&gt;11. Security&lt;/a&gt; — The socket is root, what --privileged really removes, rootless and user namespaces, the capability set worth dropping, read-only roots, and an honest view of image scanning and CVE noise.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/12-compose/&quot;&gt;12. Compose&lt;/a&gt; — The file, the networks and volumes it creates for you, healthchecks and dependency ordering, profiles and overrides, watch mode — and the exact point where Compose stops being the right tool.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — Making images small and builds fast, the disk that always fills up, log rotation you must configure yourself, daemon settings worth setting on day one, and why Docker Desktop is slow on macOS.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — The complete catalogue — what each failure looks like, what actually causes it, and the fix. Signal handling, cache misses, permission denied, exec format error, no space left, DNS, and the ones that only appear in production.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/15-when-to-use/&quot;&gt;15. When to use Docker and when not&lt;/a&gt; — An honest assessment — where containers are clearly right, where they are a tax you should not pay, and the real alternatives from Podman and Buildpacks to Nix, Firecracker and just shipping a binary.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/docker/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Every command, flag, Dockerfile pattern, exit code and diagnostic from this guide, on one page you can keep open.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/argocd/01-what-and-why/</id>
    <title>Argo CD</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/argocd/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Containers &amp; orchestration"/>
    <summary type="html">Deployment with the arrow reversed. Why your CI system should not hold production credentials, sync status versus health, and the deletions that were not meant to happen.</summary>
    <content type="html">&lt;p&gt;Deployment with the arrow reversed. Why your CI system should not hold production credentials, sync status versus health, and the deletions that were not meant to happen.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/01-what-and-why/&quot;&gt;1. What Argo CD is, and why it exists&lt;/a&gt; — Push versus pull deployment, what GitOps actually claims, the drift problem nobody had a good answer to, and the four things Argo CD is genuinely for.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/02-architecture/&quot;&gt;2. The architecture&lt;/a&gt; — Five components, what each one actually does, why Redis is not optional, where the state lives, and how a change gets from a repository to a cluster.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/03-the-application/&quot;&gt;3. The Application resource&lt;/a&gt; — Every field that matters, source and destination, sync policy, the difference between managed and tracked resources, and the labels that decide what Argo CD believes it owns.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/04-manifest-generation/&quot;&gt;4. Manifest generation&lt;/a&gt; — What the repo server actually does with Helm, Kustomize and plain YAML, why Argo CD never runs helm install, the caching that makes it fast, and config management plugins.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/05-the-loop-traced/&quot;&gt;5. The reconciliation loop traced&lt;/a&gt; — One commit followed from git push to a healthy pod — every step, what triggers it, how long each takes, and where the delay you are complaining about actually is.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/06-diffing/&quot;&gt;6. Diffing&lt;/a&gt; — The three-way merge, normalisation, why an Application shows OutOfSync forever, the annotation size limit, and when server-side apply is the real fix.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/07-sync/&quot;&gt;7. Sync&lt;/a&gt; — Waves, hooks, prune, selective sync, the ordering rules that make complicated deployments work, and the database migration pattern everyone eventually needs.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/08-health/&quot;&gt;8. Health&lt;/a&gt; — The five health states, how each resource kind is assessed, writing custom Lua checks for custom resources, and why an Application aggregates to the worst thing in it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/09-repositories-and-credentials/&quot;&gt;9. Repositories and credentials&lt;/a&gt; — Private repositories over HTTPS and SSH, GitHub Apps, credential templates, Helm and OCI registries, and the cluster credentials that decide your blast radius.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/10-multi-cluster-and-tenancy/&quot;&gt;10. Multi-cluster and tenancy&lt;/a&gt; — AppProjects as the real security boundary, RBAC and SSO, sync windows, apps in any namespace, and the blast-radius question nobody asks until it is too late.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/11-applicationsets/&quot;&gt;11. ApplicationSets and app-of-apps&lt;/a&gt; — Generating Applications instead of writing them, every generator that matters, the app-of-apps bootstrap pattern, and the deletion behaviour that has caught everyone once.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/12-secrets-and-images/&quot;&gt;12. Secrets and image updates&lt;/a&gt; — The problem Argo CD deliberately does not solve, the four ways people solve it compared honestly, and the image-tag question that GitOps makes awkward.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — Sharding the application controller, the settings that matter at scale, resource exclusions, webhooks, notifications, upgrades and what to monitor.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — Stuck syncs, permanent OutOfSync, self-heal fighting an incident, the Argo CD that cannot fix itself, and the deletions nobody meant to happen.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/15-when-to-use/&quot;&gt;15. When to use Argo CD, and when not&lt;/a&gt; — Argo CD versus Flux, versus pushing from CI, versus Terraform, the honest costs of GitOps, and when the friction is not worth it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/argocd/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Commands, annotations, sync options, settings, metrics and procedures — everything from this guide on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/consul/01-what-and-why/</id>
    <title>Consul</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/consul/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Coordination &amp; secrets"/>
    <summary type="html">Turning a hand-edited list of addresses into a query. Gossip that scales where heartbeats do not, and the fencing token a distributed lock is not a lock without.</summary>
    <content type="html">&lt;p&gt;Turning a hand-edited list of addresses into a query. Gossip that scales where heartbeats do not, and the fencing token a distributed lock is not a lock without.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/01-what-and-why/&quot;&gt;1. What Consul is, and why it exists&lt;/a&gt; — Four products in one binary — service discovery, health checking, a key-value store and a service mesh. Why the hardcoded IP list stopped working, and what the licence change means.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/02-architecture/&quot;&gt;2. Agents, servers and datacentres&lt;/a&gt; — What runs where — the client and server agent split, the catalog, anti-entropy, datacentres and WAN federation, and why every application talks to localhost.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/03-gossip/&quot;&gt;3. Gossip and failure detection&lt;/a&gt; — The SWIM protocol in detail — why nodes probe each other instead of heartbeating a server, indirect probes, the suspicion mechanism, and what makes it scale.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/04-raft-and-consistency/&quot;&gt;4. Raft and consistency modes&lt;/a&gt; — What the servers agree on, the three read modes and what each actually costs, autopilot, and the leader election that decides whether writes work at all.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/05-services-and-the-catalog/&quot;&gt;5. Service registration and the catalog&lt;/a&gt; — Service definitions, the four ways to register, tags and metadata, multiple instances per node, and the anti-entropy sync that puts back what you deleted.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/06-health-checks/&quot;&gt;6. Health checks&lt;/a&gt; — The seven kinds of check, hysteresis so one bad probe does not remove an instance, TTL checks and the pattern they enable, and the cascade that takes down a whole dependency graph.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/07-service-discovery/&quot;&gt;7. Service discovery&lt;/a&gt; — The DNS interface and where its convenience betrays you, the HTTP API with blocking queries, prepared queries with failover, and choosing between them.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/08-a-lookup-traced/&quot;&gt;8. A lookup, traced end to end&lt;/a&gt; — One DNS query from the resolver call to the answer, the HTTP version with a blocking query, and what happens the moment an instance dies.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/09-the-kv-store/&quot;&gt;9. The key-value store&lt;/a&gt; — Check-and-set, sessions, distributed locks and leader election — plus the fencing token that a lock is not a lock without, and the limits that make it a coordination store rather than a database.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/10-service-mesh/&quot;&gt;10. The service mesh&lt;/a&gt; — Sidecar Envoy proxies, mTLS from a built-in CA, intentions as deny-by-default authorisation, transparent proxy, and an honest account of what adopting it costs.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/11-traffic-management/&quot;&gt;11. Traffic management&lt;/a&gt; — The three configuration entries that shape traffic — resolvers, splitters and routers — the order they apply in, and the canary deploy they add up to.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/12-acls-and-security/&quot;&gt;12. ACLs and security&lt;/a&gt; — Tokens, policies and roles, the default-allow to default-deny migration, gossip encryption and TLS, auth methods, and the bootstrap you can lock yourself out of.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — Sizing servers, the settings that actually matter, upgrades without an outage, backups you have tested, and the metrics that warn you before anything breaks.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/14-failure-modes/&quot;&gt;14. Failure modes and war stories&lt;/a&gt; — The gossip key rotation that split the cluster, the service that came back after you deleted it, the DNS that kept returning a dead address, and thirteen more.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/15-when-to-use/&quot;&gt;15. When to use Consul, and when not to&lt;/a&gt; — An honest comparison with etcd, Kubernetes, Istio, Linkerd and the cloud registries — the five cases where it clearly wins, and what the BUSL licence means for the decision.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/consul/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Every command, configuration block, API path, DNS form and metric from this guide, on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/ansible/01-what-and-why/</id>
    <title>Ansible</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/ansible/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Infrastructure &amp; automation"/>
    <summary type="html">Write down what the machine should look like. No agent, no server, nothing to bootstrap — and the honest answer to the charge that all this is convergent, not reproducible.</summary>
    <content type="html">&lt;p&gt;Write down what the machine should look like. No agent, no server, nothing to bootstrap — and the honest answer to the charge that all this is convergent, not reproducible.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/01-what-and-why/&quot;&gt;1. What Ansible is, and why it exists&lt;/a&gt; — The fleet problem, why agentless push over SSH won, the honest answer to the charge that configuration management is convergent rather than reproducible, and the four jobs Ansible is genuinely good at.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/02-inventory/&quot;&gt;2. Inventory&lt;/a&gt; — Where the list of machines comes from, why groups are the real unit, how group_vars and host_vars work, and the dynamic sources that mean you never maintain a list at all.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/03-the-execution-model/&quot;&gt;3. The connection and execution model&lt;/a&gt; — What agentless actually costs — the payload copied per task, why the default is five hosts at a time, the Python interpreter problem, and the two settings that make everything several times faster.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/04-playbooks-and-handlers/&quot;&gt;4. Playbooks, plays and handlers&lt;/a&gt; — The anatomy of a play, the four task sections and the order they run in, and handlers — which do not run when you expect, do not run at all if something fails, and are worth the trouble anyway.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/05-modules-and-idempotence/&quot;&gt;5. Modules and idempotence&lt;/a&gt; — What &amp;quot;changed&amp;quot; really means, why command and shell can never be idempotent, the keywords that let you tell Ansible the truth, and the module vocabulary worth memorising.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/06-variables-and-precedence/&quot;&gt;6. Variables and precedence&lt;/a&gt; — The twenty-two levels of variable precedence in the order that actually matters, why defaults and vars in a role are at opposite ends of it, facts, magic variables, and the scoping rules that generate most confusion in Ansible.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/07-templating/&quot;&gt;7. Templating with Jinja2&lt;/a&gt; — The language doing the work inside every variable, every when clause and every template file — the filters worth memorising, the whitespace controls, and why everything comes out as a string.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/08-loops-and-error-handling/&quot;&gt;8. Loops, conditionals and error handling&lt;/a&gt; — Loops and what they do to registered results, block/rescue/always, the retry pattern, and the include-versus-import distinction that quietly changes how tags and conditions behave.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/09-roles-and-collections/&quot;&gt;9. Roles and collections&lt;/a&gt; — The directory layout that makes a role work with no configuration, the difference between a dependency and an import, and what changed when Ansible split itself into collections.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/10-a-play-traced/&quot;&gt;10. A play traced end to end&lt;/a&gt; — One playbook followed from the command line to the final recap — parsing, inventory, variable merging, fact gathering, the per-task loop, handler flushing, and where every second actually goes.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/11-orchestration/&quot;&gt;11. Orchestration and rolling updates&lt;/a&gt; — The thing Puppet cannot do — serial batches, draining a load balancer, delegation, running once, and the safe rolling deployment written out in full.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/12-secrets-and-vault/&quot;&gt;12. Secrets and Ansible Vault&lt;/a&gt; — Encrypting files and single values, vault IDs for multiple environments, the four ways a secret leaks anyway, and when to stop using Vault and fetch from a real secret store instead.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/13-testing-and-operations/&quot;&gt;13. Testing, tuning and operations&lt;/a&gt; — The idempotence test that catches most bad playbooks, linting, Molecule, tags, and the settings that turn a twenty-minute run into a three-minute one.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — The twelve things that actually go wrong — the variable that will not change, the handler that never runs, the playbook that succeeds and does nothing, and the second run that reports twenty changes.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/15-when-to-use/&quot;&gt;15. When to use Ansible — and when not to&lt;/a&gt; — An honest comparison against images, Terraform, Puppet, Salt and shell scripts — the cases where each clearly wins, and the one question that decides most of it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/ansible/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Every command, keyword, precedence rule and gotcha from the guide on one page — including the settings that make Ansible fast and the twenty rules worth following.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/airflow/01-what-and-why/</id>
    <title>Airflow</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/airflow/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Infrastructure &amp; automation"/>
    <summary type="html">Scheduling a graph instead of guessing at times. Why &lt;code&gt;ds&lt;/code&gt; is not today, the top-level code that slows every installation, and the database that quietly stops keeping up.</summary>
    <content type="html">&lt;p&gt;Scheduling a graph instead of guessing at times. Why &lt;code&gt;ds&lt;/code&gt; is not today, the top-level code that slows every installation, and the database that quietly stops keeping up.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/01-what-and-why/&quot;&gt;1. What Airflow is, and why it exists&lt;/a&gt; — Where cron stops working, what a DAG buys you, why Airflow is a scheduler and not a data processor, and the four jobs it is genuinely for.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/02-architecture/&quot;&gt;2. The architecture&lt;/a&gt; — Scheduler, executor, workers, the DAG processor, the triggerer and the metadata database — what each does, and the Airflow 3 change that stopped tasks talking to the database.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/03-writing-dags/&quot;&gt;3. Writing DAGs&lt;/a&gt; — The TaskFlow API, the top-level code mistake that slows every installation that makes it, dynamic DAG generation, dynamic task mapping, and how to test a DAG.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/04-scheduling/&quot;&gt;4. Scheduling and the data interval&lt;/a&gt; — Why ds is not today's date, the data interval explained properly, catchup and the backfill that surprised everyone, timetables, and asset-driven scheduling.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/05-a-run-traced/&quot;&gt;5. A DAG run traced end to end&lt;/a&gt; — One run followed from the scheduler loop through queueing, dispatch, execution and state — every state transition named, with where the time actually goes.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/06-operators-and-sensors/&quot;&gt;6. Operators, sensors and hooks&lt;/a&gt; — The building blocks, providers, the operators worth knowing, the sensor mode that quietly consumes your worker pool, and why KubernetesPodOperator solves the dependency problem.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/07-executors/&quot;&gt;7. The executors&lt;/a&gt; — Local, Celery, Kubernetes and Edge compared honestly — the startup-cost trade, queues, autoscaling, and how to choose without guessing.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/08-state-and-dependencies/&quot;&gt;8. State, dependencies and retries&lt;/a&gt; — Trigger rules and the join-after-branch surprise, retries and backoff, idempotency as a correctness requirement, clearing tasks, and what &amp;quot;success&amp;quot; actually means.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/09-xcoms/&quot;&gt;9. XComs and passing data&lt;/a&gt; — What XComs are for, the size limit that decides everything, custom backends, and the rule that Airflow should move control rather than data.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/10-the-metadata-database/&quot;&gt;10. The metadata database&lt;/a&gt; — The bottleneck in almost every large Airflow installation — how it grows, why the scheduler is database-bound, db clean, and the sizing that keeps it healthy.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/11-deferrable-operators/&quot;&gt;11. Deferrable operators and the triggerer&lt;/a&gt; — How a task waits for six hours without occupying anything, what a trigger actually is, writing one, and the operational properties of the triggerer.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/12-connections-and-secrets/&quot;&gt;12. Connections, variables and secrets&lt;/a&gt; — Where credentials live by default, why the Fernet key is not what people think, secrets backends, and the Airflow 2 problem that let any DAG read everything.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — Every concurrency knob and how they interact, pools, DAG distribution, logging, monitoring, alerting on data rather than tasks, and upgrades.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — The DAG that never appears, tasks stuck in scheduled or queued, the accidental catchup, zombies, OOM, and the database that quietly stopped keeping up.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/15-when-to-use/&quot;&gt;15. When to use Airflow, and when not&lt;/a&gt; — Airflow versus Dagster, Prefect, Temporal, Argo Workflows, dbt and plain cron — an honest account of where each wins and where Airflow's age shows.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/airflow/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Commands, settings, states, template variables, metrics and procedures — everything from this guide on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>https://toolforge-3et.pages.dev/dbt/01-what-and-why/</id>
    <title>dbt</title>
    <link rel="alternate" type="text/html" href="https://toolforge-3et.pages.dev/dbt/01-what-and-why/"/>
    <updated>2026-10-26T06:46:26.000Z</updated>
    <category term="Infrastructure &amp; automation"/>
    <summary type="html">The tool that decided a SQL transformation is software — and that one function call, &lt;code&gt;ref()&lt;/code&gt;, should build the whole dependency graph.</summary>
    <content type="html">&lt;p&gt;The tool that decided a SQL transformation is software — and that one function call, &lt;code&gt;ref()&lt;/code&gt;, should build the whole dependency graph.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/01-what-and-why/&quot;&gt;1. What dbt is, and why it exists&lt;/a&gt; — The tool that turned SQL transformations into software — where it came from, the one idea it is built on, and an honest account of what it does not do.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/02-the-project/&quot;&gt;2. The project&lt;/a&gt; — dbt_project.yml, profiles.yml, the directory layout, adapters and targets — the scaffolding every dbt project has, and what each piece is actually for.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/03-models-and-refs/&quot;&gt;3. Models and ref()&lt;/a&gt; — How a SELECT becomes a table, why one function call builds the whole dependency graph, and the difference between ref and source.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/04-materializations/&quot;&gt;4. Materializations&lt;/a&gt; — View, table, incremental, ephemeral and materialized view — the DDL each one compiles to, what each costs, and how to choose.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/05-incremental-models/&quot;&gt;5. Incremental models&lt;/a&gt; — The strategies, unique_key, late-arriving data and schema drift — how incremental models save hours and how they silently lose rows.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/06-sources-seeds-snapshots/&quot;&gt;6. Sources, seeds and snapshots&lt;/a&gt; — Freshness checks on raw data, small CSVs in version control, and how snapshots capture history that the source overwrites.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/07-a-run-traced/&quot;&gt;7. A dbt run traced&lt;/a&gt; — One command followed end to end — config resolution, parsing, the manifest, Jinja's two passes, graph selection, the thread pool, materialization macros and the artifacts that come out.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/08-jinja-and-macros/&quot;&gt;8. Jinja and macros&lt;/a&gt; — The templating layer — the context dbt gives you, writing macros, running queries at compile time, cross-adapter dispatch, and knowing when to stop.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/09-tests-and-contracts/&quot;&gt;9. Tests and contracts&lt;/a&gt; — Generic tests, singular tests, unit tests and enforced contracts — what testing data actually means, and how much of it is enough.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/10-documentation-and-lineage/&quot;&gt;10. Documentation and lineage&lt;/a&gt; — Descriptions, doc blocks, the catalog, exposures and the generated site — documentation that stays true because it lives next to the code.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/11-configuration-and-precedence/&quot;&gt;11. Configuration and precedence&lt;/a&gt; — Where config can live, the order it resolves in, how schemas and names are actually computed, and the places dbt genuinely surprises people.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/12-state-and-slim-ci/&quot;&gt;12. State, artifacts and slim CI&lt;/a&gt; — Using a production manifest to build only what changed — state selection, defer, retry, and the CI pipeline that makes large projects reviewable.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/13-tuning-and-operations/&quot;&gt;13. Tuning and operations&lt;/a&gt; — Where the time and money actually go, structuring a project that grows to thousands of models, orchestration, and the practices that keep it healthy.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/14-failure-modes/&quot;&gt;14. Failure modes&lt;/a&gt; — The specific ways dbt projects go wrong — what each looks like from the outside, why it happens, and how to stop it happening again.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/15-when-to-use/&quot;&gt;15. When to use dbt, and when not&lt;/a&gt; — An honest comparison against SQLMesh, Spark, orchestrators, warehouse-native tooling, GUI ETL and writing it yourself — and the one question that decides it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://toolforge-3et.pages.dev/dbt/16-cheat-sheet/&quot;&gt;16. Cheat sheet&lt;/a&gt; — Commands, selection syntax, configs, Jinja context, incremental strategies, tests and troubleshooting — the whole guide on one page.&lt;/li&gt;&lt;/ol&gt;</content>
  </entry>
</feed>
