Security
Most breaches aren't clever. They're a reused password, an open storage bucket, an API that trusts whatever the client tells it, or a key that's been sitting in git history for a year. Here's what genuinely moves the needle before launch, and what can wait.

“Secure by design” gets used as a slide in a lot of pitch decks and a lot less as an actual engineering habit. The gap between the two is where most incidents live. Industry breach data year after year points to the same small set of causes, not some novel attack nobody saw coming:
| Cause | What it looks like | Why it keeps happening |
|---|---|---|
| Credential abuse | A reused, weak, or phished password gets someone into an account that has more access than it should | Still the single most common way in, because most products don't enforce multi-factor authentication by default |
| Cloud misconfiguration | A storage bucket, database, or admin panel left reachable from the public internet | Defaults are permissive, and nobody re-audits them after the first deploy |
| API authorization flaws (BOLA/IDOR) | An endpoint checks that you're logged in, not that you own the specific record you're asking for | The happy path works perfectly in testing, so it's rarely caught before it ships |
| Hardcoded secrets | An API key or token committed to the repo, sometimes years earlier, by someone who's since left | Once it's in git history it's effectively permanent unless someone actively rotates it |
| Known vulnerable dependencies | A library with a public, patched vulnerability that was simply never updated | Nobody owns dependency upgrades until the day something breaks because of one |
None of these require a sophisticated attacker. Most are found by automated scanners within hours of something being exposed, which is exactly why they're the ones worth closing first.
You don't need a security team to get the basics right. You need five specific habits, built in from the start rather than bolted on after an incident:
Authentication tends to get the attention, because it's the front door and it's easy to picture. Authorization is the harder, less visible problem, and it's where I see real products actually get hurt. A classic example: an endpoint like `/api/invoices/1234` correctly checks that you're logged in, returns the invoice, and everyone moves on. Nobody tried `/api/invoices/1235` and noticed it belongs to a different customer entirely, and nothing stopped it being returned.
This class of bug (broken object-level authorization, BOLA, sometimes called IDOR) is consistently one of the most common API vulnerabilities found in production, and it's almost invisible in normal testing because the happy path, the one test case everyone runs, works fine. The fix isn't exotic: every endpoint that takes an identifier needs an explicit “does this caller actually own this record” check, applied consistently, not assumed from the fact that they're logged in at all.
Verizon's annual breach report has repeatedly found that the median time to remediate a leaked secret, once it's known about, sits around three months. Three months is a long time for a live API key to sit exposed, and the gap usually isn't technical difficulty, it's that nobody owns the rotation, or the key is wired into enough places that rotating it feels risky. Treating secrets rotation as a routine, low-drama habit (the same way you'd treat rotating a house key after losing a copy) is what closes that gap. Treating it as a rare, scary event is what stretches it to three months.
Not everything needs to happen before launch, and treating security as all-or-nothing is how teams end up doing none of it. A reasonable sequence:
If you're building something that will handle real money or real health data, talk to us before the architecture is locked in, the basics above are far cheaper to design in than to retrofit. See also how we think about launching a regulated fintech product and building for the NHS.
Koori
Koori works on security for products handling real money or real health data, and has strong opinions about which parts of “secure by design” are real and which are a slide in a pitch deck.
Turn an idea into a product, brand, or campaign, with one team from strategy to launch.
start a project
Engineering
Good QA was never about finding every bug. It's about deciding, on purpose and out loud, which bugs are allowed to ship. Here's how that decision actually gets made when the launch date isn't moving.
27 Sep 2026 · 9 min read

Brand & Marketing
When a landing page underperforms, the instinct is to rewrite the headline. Nine times out of ten the real problem is further down the page: an unclear offer, proof that shows up too late, or friction right before the button. Fix those first.
20 Sep 2026 · 9 min read

Engineering
The best tech stack for a first build is a boring one: proven, well-documented, and easy to hire for. Here's what “boring” actually means in 2026, the traps that sink second years, and a sensible default to start from.
11 Sep 2026 · 10 min read