Nine ways to shoot yourself in the foot with PostgreSQL
Previously on Extreme Learning,
I discussed
all the ways I've broken production using healthchecks.
In this post
I'll do the same for PostgreSQL.
Read more
Existing by coincidence, programming deliberately
Previously on Extreme Learning,
I discussed
all the ways I've broken production using healthchecks.
In this post
I'll do the same for PostgreSQL.
Read more
One reason I like working at startups is
you get to wear many hats.
Of course,
by "wear many hats" I really mean
"suffer occasional periods of extreme stress when things fail
and there are no grownups you can go to for help".
I like to think of it as Extreme Learning.
Read more
As engineers we spend a lot of our time debugging problems,
yet it's rarely taught as a skill in its own right.
Some bugs are difficult enough
that they can seem borderline impossible to solve,
especially for devs toward the junior end of the spectrum.
There's no worse feeling than being stuck
on a hard problem,
not knowing how to proceed.
Of course,
the right thing to do if you're stuck like that
is ask for help;
from your team,
from other engineers in your org or social circle,
from random strangers on the internet.
As a random stranger on the internet then,
this post is my attempt to help get you unstuck
if you find yourself in that situation.
Read more
There's nothing earth-shattering here,
but I can recall that each of these principles
were not obvious to me at some point in time.
Perhaps some of them are not obvious to you right now.
Read more
Automating your release process
saves time,
eliminates tedious busywork
and reduces the likelihood of mistakes
when cutting a new release.
There are plenty of off-the-shelf solutions available,
but this post will show
how easy it is to build your own release script
and why the end result can be better
than using a generic, third-party option.
Throughout the post
I'll use the case study
of some recent work we did
to automate the release process
for FxA,
to provide concrete examples
of what I'm talking about.
Read more
Historically,
the Firefox Accounts (FxA) codebase
was organised as separate repositories
because it's deployed as separate microservices
in production.
However,
that arrangement caused us
some nagging issues
as developers,
so we decided to migrate the code
to a monorepo instead.
This post discusses
why and how we did that,
and how things turned out
in the end.
Read more
About a month ago,
we had an outage
caused by a slow-running query in MySQL.
This particular slow query
wasn't spotted when it was deployed
because it depended on data
inserted by client browsers
and the related preference in Firefox
was not enabled at that point.
A few weeks after it shipped,
the client pref was flipped on
and as the table grew,
it slowed down MySQL increasingly
until the whole of Firefox Accounts
became unresponsive.
And of course,
because Sod's Law
is one of the fundamental forces of nature,
this happened late on a Friday night.
There were some complicating factors
that slowed down diagnosis,
but it's also fair to say
we could have caught it at source
with an EXPLAIN of the offending query
during code review.
Because of that,
I decided to try and automate
EXPLAIN checks for our MySQL queries.
Read more
"Bad performance hurts user engagement"
is a sentiment that feels intuitively true
but can be hard to sell in product conversations.
The best way to persuade a non-believer
is to point them at hard evidence
and for that you need
to do a few things
with your performance data.
Read more