Blog
Developer Diary
Notes from the process of building a git-native feature flag platform.
Developer Diary: Quonfig SDKs are 1.0.0
Every Quonfig SDK and OpenFeature provider is now 1.0.0 and semver-stable. Here's the full surface that's ready for your production workloads — nine SDKs, seven OpenFeature providers, multi-region delivery, and a local-first dev loop that needs no account.
Developer Diary: May 24, 2026
Datadir auto-reload across every backend SDK, a fully-local no-account workflow, qfg serve for browser SDKs, a clean version matrix after thirteen releases, and a pile of CLI papercuts knocked out during a live migration.
Developer Diary: May 17, 2026
A full chaos-testing pass across every SDK, the LaunchDarkly migrator landing with a real conversion report, pack-push CLI shipped end-to-end, and fit-and-finish on the eval charts. Running out of things to add — which is exactly where I want to be.
Developer Diary: May 10, 2026
First real customer migrations off Launch, a Cmd-K palette that gets you to any flag in two keystrokes, the Java SDK is back, and metered billing wired end-to-end through Stripe.
Developer Diary: May 3, 2026
Customer dress-rehearsal migrations, atomic push-conflict detection, multi-org CLI auth, restore-from-tombstone in the UI, and a hardened CI matrix on every SDK. Ready to try.
Developer Diary: April 26, 2026
A two-host delivery split, load tests holding 9k concurrent connections, self-serve workspace creation from the CLI, dev overrides, Slack, and the close-out of the Launch migrator — all aimed at letting people try Quonfig on May 1.
Developer Diary: April 19, 2026
ForceRank.it in production on Quonfig, load testing to 8k SSE, a real qfg migrate CLI, Ruby client bootstrapping, OpenFeature reasons, and one-click restore for deleted flags.
Developer Diary: April 12, 2026
A quick weekly update on observability, OpenFeature, code generation, the Python client, the React SDK, and a lot of product polish.
Why Quonfig: A Developer Diary
I spent years building a feature flag platform backed by a database. Then I tore it all down and rebuilt it on git. Here's where things stand.
Dynamic Logging in FastAPI with Python
Change python logging levels for uvicorn and FastAPI without restarting the server
Our Experience using Fastly's Streaming Miss feature For Server Sent Events (SSE)
Our Experience using Fastly's Streaming Miss feature For Server Sent Events (SSE) (push messaging)
A Faster Google Tag Manager
Google Tag Manager serves a useful purpose, but it's fundamentally not as fast as you'd like. Dynamic configuration can fix that.
Modeling Usage Based Billing with Stripe
Real example of breaking down a pricing page and modeling the prices and products in stripe for a usage based products with code examples.
Usage Based Billing with the new Stripe Meters
Stripe launches Meters for improved usage based billing. What problems does it solve and how does it work.
Dynamic Ruby Log Levels With Semantic Logger
Refactoring dynamic logging to use the excellent SemanticLogger gem so you can change ruby and rails logs without restarting.
A Ruby on Rails OOM Mystery: The Case of the Hungry Hippo
Explore the interaction of rails, puma, workers and kubernetes as we track down some 137 oomkilled kubernetes errors
LSP: What Language Should I Choose For Writing a Language Server?
If you're just starting the LSP, you might wonder what language to build your Language Server (LS) with. This article will help you pick the right language.
Change Log Levels Instantly In Node
How can you change log levels in your express app? Debugging functions is much easier if you can get debug output, but how can we enable that? Dynamic logging is the answer.
Towards Better Configuration & Environment Variables
A better way to manage environment variables for apps in local development, staging, and production. Particular for microservices or with multiple languages.
9 Things I Hate About Environment Variables
ENV Vars were great, but we can do better. A better way to manage environment variables for apps in local development, staging, and production
Before You Lograge
Better alternatives to lograge for rails logging gems in 2024. Comparing Lograge to dynamic logging and Semantic Rails Logger.
LSP: Writing a Language Server in Bash
Implementing a language server is so easy that we're going to do it in Bash.
TL;DR: Origin Response Headers In Fastly Logs
How to break down CDN usage by customer. Getting a stream or response headers from Fastly CDN logs
Structured Logging for Ruby and Rails
How to use structured logging in Ruby or Rails for logs that are easy to search and analyze
TL;DR: Targeting Datadog Slack Alerts to Different Channels By Environment
How to target different slack channels for datadog alerts from different environments
Hands-On LSP Tutorial: Configuration
Continuing in our LSP series, learn how to provide configuration to your language server from your editor.
Hands-On LSP Tutorial: Building a Custom Auto-Complete
Learn how to build a Language Server using the Language Server Protocol (LSP) with this getting started tutorial. The example will make dynamic links to our github issues. Learn how to integrate with your language server with editors like VS Code and Neovim, and dynamically link to GitHub issues and PRs.
Let's talk Tagged Logging vs Structured Logging in Ruby or Rails
Tagged Logging and Structured Logging or structlog and how to use them in Ruby or Rails
Dynamically Changing log4j or logback log levels in Java
Change log4j, log4j2 or logback log levels dynamically without restarting
Making Front End Logging Useful
How to get meaningful signal from front-end logging with transports, context, and dynamic targeting -- without paying for an avalanche of noise.
Time-traveling Ruby Logger
Build a Ruby logger that captures debug-level detail but only writes it when a request fails — by deferring the log level decision until the end.
Friends Don't Let Friends Use PostgreSQL Dialect Google Spanner
Google Spanner comes in two flavors, GoogleSQL(an ANSI-compliant SQL) and PostgreSQL. We've found that GoogleSQL is the better choice.
Gem install sassc is always going to be slow. Your Docker builds don't have to be.
An open issue has made gem install sassc slow to compile for years. Here's a trivial Dockerfile change that keeps it from wrecking your Docker layer cache and saves minutes per build.
From Debug to Panic - Comparing Log Levels Across Top Languages
A lighthearted tour of the log levels available in Java, Go, Elixir, Node, Ruby, Python, PHP, C#, Rust, Kotlin, Swift, Scala and more — comparing their quirks and similarities.
Log Levels Are Useless, Or Are They…
What should you log, and at what level? The classic answer assumes changing log levels is painful. When it isn't, the whole debate changes.
Changing Log Levels At Runtime - Rails
Change the log level of a running Rails application dynamically, with targeting, and without an SSH-and-restart dance.
Micrometer Gauges, Datadog and Kubernetes
Why a Micrometer gauge flaps between values when multiple Kubernetes pods report the same metric to Datadog — and how to fix it with per-pod common tags.