The blog post discusses the N+1 query problem in software development, particularly in Go codebases, and introduces the two-phase data load and render pattern as a solution. It explains how the pattern works, provides examples of ...
The blog post discusses the notifier pattern for applications using Postgres, explaining how to optimize the use of listen/notify feature to conserve Postgres connections. It details the implementation of a notifier to hold a sing...
The blog post discusses how Go's JSON library provides the DisallowUnknownFields option to improve the developer experience in web APIs by catching errors when decoding JSON objects with unknown fields. It also covers the caveats ...
The author discusses the benefits of using a job queue in Postgres, the challenges faced with non-transactional data stores, and the development of River, a job queue project built specifically around Postgres and Go. River is des...
The blog post discusses the use of Go's `t.Parallel()` feature to run tests in parallel, reducing test suite runtimes significantly. It also covers challenges faced with parallel testing, such as deadlocks and logging issues, and ...
The blog post discusses the concept of soft deletion in databases, highlighting its downsides such as code leakage, losing foreign keys, and difficulty in pruning data. The author argues that undeletion is rarely done in practice ...
The blog post discusses the advantages of using boundless text over constrained character types like char and varchar in Postgres. The author shares experiences from working at Stripe and emphasizes the importance of setting reaso...
The blog post discusses the author's experience with using sqlc/pgx for Postgres in Go code, comparing it to other popular options in the ecosystem. Sqlc is praised for its ability to map queries back into structs without boilerpl...
The author discusses the limitations of traditional analytics tools like Google Analytics and the benefits of using more accurate and privacy-friendly alternatives like Goatcounter, GoAccess, and AWS Athena/SQL. By analyzing log f...
Large databases tend to become messy over time due to various reasons such as technological limitations, stability concerns, cost/effort issues, and convenience. This leads to the loss of important features like transactions, refe...
The blog post discusses how SortSupport works in Postgres to speed up sorting on large data types like inet and cidr by generating abbreviated keys. It explains the anatomy of network types, the sorting rules in Postgres, and the ...
The blog post discusses the centralization of content on major platforms like Facebook and YouTube, and the importance of creating content outside of these 'walled gardens'. The author is running a photography and writing project ...
The author discusses building a live reloading feature for a website using WebSockets and Go, highlighting the ease of implementation and the benefits for writing and design. The process involves detecting file changes, handling e...
The blog post discusses the trade-offs involved in optimizing software, focusing on the SortSupport technique in Postgres that localizes data for faster sorting. It explains how SortSupport works, its benefits, and the implementat...
The blog post discusses the challenges of managing database connections efficiently in Postgres, focusing on the limitations of connection slots, the impact of memory constraints, and the use of techniques like connection pools an...
Postgres 11 introduces a change that makes adding columns with default values faster and more efficient, eliminating the need for a full table rewrite and reducing the impact on ongoing operations. This improvement allows for stro...
The blog post discusses an experiment in creating autonomous software that can tweet for 10,000 years, inspired by the design principles of the 10,000 year clock. The author details the challenges and risks faced by the software o...
The blog post discusses the current state of GraphQL in the API world, highlighting its benefits such as reducing payload size, establishing explicit contracts between client and server, and providing automatic introspection. It a...
The blog post discusses how Stripe's rate limiters were migrated from a single Redis instance to a 10-node Redis Cluster to handle high-traffic loads. It explains the limitations of Redis, the benefits of Redis Cluster's sharding ...
The author discusses the benefits of using Rust for building web services, highlighting the advantages of its strict compiler, type system, and ownership rules in preventing bugs and edge cases. They delve into their experience us...