Brandur Leach
Software engineer at River, previously at Stripe, Heroku and Snowflake; writes about APIs, infrastructure and software design at brandur.org.
Brandur Leach did not write this page.
We collected these quotes from things they published elsewhere, and every quote links to where it was said. They have no account here and have not endorsed this site. Quotes are word for word; the short line under each one is our own restatement, not their wording. Their own site. Is this you? Claim it or ask us to remove it. Or tell us what is wrong here.
-
Their wordsWhile LLMs have made software considerably cheaper to build, they haven't brought it to zero. Good LLM-built systems still involve a feedback loop, where an operator has the model work for a while, makes adjustments based on results, asks for another pass, refines further, and so on
↗The Minimum Viable Unit of Saleable Softwarebrandur.org 1st of 2 in this piece
-
Their wordsI'm contending (and/or hoping) that for a software package of arbitrary complexity, there's a zone of viability in which when priced within reason, it'll make sense to buy over build, even given the existence of the powerful LLMs that've become our daily companions
↗The Minimum Viable Unit of Saleable Softwarebrandur.org 2nd of 2 in this piece
- 2 months earlier
-
Their wordsThe convention of the future will be human language, fed into what looks a lot like a terminal, and fulfilled via API.
↗The Second Wave of the API-first Economybrandur.org 1st of 2 in this piece
-
Their wordsAs this mode of operation gets more popular, expect the availability of an API to be a competitive edge that differentiates a service from its competitors.
↗The Second Wave of the API-first Economybrandur.org 2nd of 2 in this piece
- 22 months earlier
-
Their wordsThis practically invisible problem is probably number two to only forgotten indexes as the most common reason for poor performance of web apps around.
↗Eradicating N+1s: The Two-phase Data Load and Render Pattern in Gobrandur.org 1st of 2 in this piece
-
Their wordsDespite Go's ad nauseum verbosity, it's no less susceptible to N+1s than a language heavy in metaprogramming like Ruby.
↗Eradicating N+1s: The Two-phase Data Load and Render Pattern in Gobrandur.org 2nd of 2 in this piece
- 3 weeks earlier
-
Our reading
Postgres listen/notify is an incredible feature that is useful in all kinds of situations.
Their wordsListen/notify in Postgres is an incredible feature that makes itself useful in all kinds of situations.
↗The Notifier Pattern for Applications That Use Postgresbrandur.org 1st of 2 in this piece
-
Our reading
Postgres connections are still somewhat of a precious, limited resource that should be conserved.
Their wordsDespite optimizations over the years, connections in Postgres are still somewhat of a precious, limited resource, and should be conserved.
↗The Notifier Pattern for Applications That Use Postgresbrandur.org 2nd of 2 in this piece
- 1 day earlier
-
Their wordsIt's a feature that's not needed every day, but it's easy to implement, and the day it is, it'll save hours worth of time and frustration.
↗Web APIs: Enriched DX By Disallowing Unknown Fieldsbrandur.org 1st of 2 in this piece
-
Their wordsA common place where DisallowUnknownFields should not be applied are webhook receive endpoints.
↗Web APIs: Enriched DX By Disallowing Unknown Fieldsbrandur.org 2nd of 2 in this piece
- 5 months earlier
-
Their wordstransactions are really just a really good idea. Maybe the best idea in robust service design.
↗River: a Fast, Robust Job Queue for Go + Postgresbrandur.org 1st of 2 in this piece
-
Their wordsdependency minimization is great. I've written previously about how at work we run a single dependency stack. No ElastiCache, no Redis, no bespoke queueing components, just Postgres. If there's a problem with Postgres, we can fix it.
↗River: a Fast, Robust Job Queue for Go + Postgresbrandur.org 2nd of 2 in this piece
- 3 months earlier
-
Their wordsAs some packages grow to be large, parallel testing will keep them fast, and annotating tests with t.Parallel() from the beginning is a lot easier than going back to add it to every test case and fix parallelism problems later on.
↗On Using Go's `t.Parallel()`brandur.org 1st of 2 in this piece
-
Their wordsOur tests use goleak to detect any accidentally leaked goroutines, a practice that I'd recommend since leaking goroutines without realizing it is easily one of Go's top footguns.
↗On Using Go's `t.Parallel()`brandur.org 2nd of 2 in this piece
- 13 months earlier
-
Their wordsThe first is that soft deletion logic bleeds out into all parts of your code.
↗Soft Deletion Probably Isn't Worth Itbrandur.org 1st of 2 in this piece
-
Their wordsAs far as I'm aware, never once, in ten plus years, did anyone at any of these places ever actually use soft deletion to undelete something.
↗Soft Deletion Probably Isn't Worth Itbrandur.org 2nd of 2 in this piece