Notes from the night shift
The Night Shift
Dispatches from an independent software studio — what we learn while we build small, useful things, mostly after dark.
Engineering
The camera moved, the world didn't
The simplest way to find motion in a video is to subtract one frame from the next: whatever changed, moved. It works beautifully until the camera itself moves — a traffic cam pans, a webcam gets bumped, wind leans a pole — and then everything changed, so by that logic everything moved. The whole frame lights up and the one car actually crossing the intersection is lost in a field of false alarms. Thyseus reads public cameras it doesn't control and can't hold still, so before it can trust that something moved, it has to work out how much of the change was the world and how much was the lens. The fix is to measure the camera's own motion first, cancel it, and only then ask what's left.
Read the essay
In this issue
02–41- 02
Design
The front page was a map. The phone made it a line.
The Drudge Report is a wall, not a stream — three columns and a siren, where an editor says what matters by where he puts it and how big he sets it. Position is the ranking. A phone can't hold three columns, so a mobile mirror has to flatten that two-dimensional map into a single one-dimensional scroll — and the obvious way to flatten it, column by column, buries the lead under a stack of also-rans. DReader flattens along the other axis: it reads the arrangement the way the editor built it and lays it back out in the order he ranked it, so the story he set biggest is still the first thing your thumb meets. The wall becomes a line without becoming a different front page.
6 min read - 03
Engineering
The page you didn't count
The portal says 'no more than ten pages,' and yours comes back rejected at twelve — even though you wrote exactly ten. A page limit isn't a byte limit: there's no slider that squeezes twelve pages down to ten, and the pages that put you over are almost always ones you never tallied — a cover sheet the template prepended, a signature page a tool appended, a blank verso your export left behind. Preflight counts the file the way the gate does, before the gate does: it reads the real page count, tells you exactly how many over you are, marks the blank pages that are safe to drop, and never touches the original — so the page you didn't count doesn't cost you the whole submission.
6 min read - 04
Engineering
Up in total, down in every part
You ship a change, and conversion climbs nine percent. Then someone splits the number by cohort and finds the truth: new users converted worse, returning users converted worse, every segment converted worse. The total rose anyway — because the release quietly changed who showed up, not how well the product worked. It's Simpson's paradox, and it's the trap a single headline metric is built to walk you into. code-results reads the number the only way that can't lie to you: split, and weighted by the mix that actually moved.
6 min read - 05
Engineering
The lock nobody set
You never typed a password, but the submission portal calls your PDF 'secured' and turns it away. The lock was there before you touched the file — set by a scanner, an export preset, or a download you forgot was protected — and it lives in a dictionary your reader honors silently, so the file opens fine and looks done while quietly refusing to be read by anything automatic. Preflight reads that dictionary before the gate does: it names the lock, tells you exactly what it forbids, and — if the file is yours — hands you a clean copy while leaving the original untouched.
6 min read - 06
Detection
The dial only moves the mistake
A detector doesn't just say 'car' — it says 'car, 0.62,' and then you get one knob: keep everything scored above some line. Turn it down and the map fills with ghosts; turn it up and real cars vanish with them. Because a faint car scores exactly where a bold ghost does, no setting of that knob is clean. The threshold never removes the error. It only chooses which kind you'd rather have — and why Thyseus stops trying to win that argument with the dial.
6 min read - 07
Research
The middle never booked
Classic user research hears from whoever agrees to a call, and the people who agree are almost never a cross-section — they're the two loud ends: the fans who want to gush and the furious who want to vent. The quiet middle, the users for whom the product mostly just works, has no reason to give up an afternoon for a stranger's questions, so they don't. A sample built entirely from the willing reads as two camps with nothing between them — but that shape isn't your users, it's your recruiting. AI User Interviews drops the cost of answering to near zero, so the middle can finally answer without booking anything, and the two camps turn back into the tails of a distribution whose real mass was the people you were never hearing from.
6 min read - 08
Engineering
Smaller, not better
Every compressor you've ever used returns a smaller file, and smaller feels like success — so nobody checks what the bytes came off of. They come off the parts that made it a document: the selectable text flattened to a picture, the crisp vectors rasterized, the trim box nudged a hair. You find out at the far end, when someone can't select a word or the print shop finds the page moved. Preflight treats a pass that breaks one of those seals as a failure, not a win. If it can't hit the target while keeping the text selectable, the geometry exact, and the result independently verifiable, it refuses — and hands you back your untouched original instead of a smaller file that's quietly ruined.
6 min read - 09
Engineering
Two changes, one window
Ship one thing on a quiet afternoon and the number that moves after it is yours to read. Ship two things twenty minutes apart and the lift has no owner — it belongs to both changes and neither, and any clean split you draw between them is a number you made up. The honest move isn't to guess which deploy earned the win. It's to notice that, for now, the question can't be answered — and to say so out loud instead of picking a winner.
6 min read - 10
Engineering
The headline changes, the link doesn't
Look at the Drudge Report at nine, then again at nine-forty, and the whole wall looks new. Most of it isn't. The same stories get reworded, resized, and shuffled through the day, and the page never tells you which lines are genuinely new and which just changed clothes. The trick to reading it the way a person wishes they could is knowing that the headline is a costume and the link underneath it is the name — so that's what DReader diffs.
6 min read - 11
Engineering
Select all, select nothing
Two PDFs sit side by side on your screen, pixel for pixel identical. One is a real document; the other is a photograph of one. You can't tell them apart by looking — until you press Cmd+A and one of them selects nothing at all. That gap between what a page looks like and what's actually under it is where filings get bounced, citations go missing, and a finished document quietly fails a requirement no one showed you. Preflight reads the layer, not the picture.
6 min read - 12
Engineering
The form doesn't round
You finish the document, you go to submit it, and a box you never think about turns you away: the file is 5.31 MB and the limit is 5.00. All the work is done and the last obstacle is arithmetic. The reason it stings is that the upload form deals in exact bytes while every tool you reach for deals in vibes — 'compress,' 'reduce size,' a hopeful slider. Preflight is built to close that gap: it measures the file against the exact ceiling, builds a copy that provably fits, and never once touches the original.
6 min read - 13
Philosophy
Seen, not identified
A map built from public cameras runs straight at a line most surveillance quietly crosses: the difference between knowing something is there and knowing who it is. Thyseus is built to stop on the near side of that line on purpose. It counts the car and places the person, and it never learns a face or a plate — not because it can't reach them, but because the reach is exactly the thing we designed out. The blind spot is the feature.
6 min read - 14
Engineering
The change that moved nothing
Ship a change, watch the metric, and sometimes the line just… doesn't move. Most tools treat that as a non-event — no green arrow, nothing to celebrate, nothing to file. But a confirmed 'no effect' is a real result, and burying it is how a team pays twice: once to build the thing, and again to relearn that it did nothing. code-results stamps the flat line as a finding, not a gap.
6 min read - 15
Research
The clean answer was the wrong one
Ask 'so that was frustrating, right?' and nine people out of ten will agree, and you'll walk away with a tidy, confident number that measures nothing but the shape of your own question. A leading follow-up doesn't read the room — it moves it. The honest answer is messier, lower, and true, and the whole discipline of an AI interviewer is asking the question that lets it stand.
6 min read - 16
Engineering
You can't map what no one is watching
A map stitched from strangers' browser tabs covers exactly the ground someone happens to be pointing a tab at — and nothing else. The tempting bug is to smooth over the gaps, to let a quiet block read as a clear one. Thyseus does the opposite: it draws its blind spots as blind spots, because a dark square that means 'unwatched' is honest and a dark square that means 'clear' is a lie the map can't back up.
6 min read - 17
Detection
One thing, seen twice
A live map built from overlapping public cameras has a problem nobody warns you about: the same car lands in two frames, and a map that just draws what it's told shows two vehicles where there's one. Worse, it double-counts loudest exactly where the street is busiest. The quiet, load-bearing half of Thyseus isn't spotting the car — it's deciding that two detections are one thing, and merging them before the map ever counts.
6 min read - 18
Research
The script was never the interview
A survey asks its questions and stops. An interview hears the answer and asks the one nobody wrote down — why? — and keeps asking until the reason underneath stops moving. The finding almost never lives in the scripted answer; it lives two or three follow-ups down, in the part that never scaled because a person asking for the hundredth time can't. AI User Interviews is built so the improvised part is the part that scales.
6 min read - 19
Engineering
A door, not a room
Almost every content app is a room — furniture arranged to keep you sitting in it, measured by how long you stay. The Drudge Report is the opposite: an index whose entire purpose is to send you somewhere else. So DReader's real product was never the page you look at. It's the round trip — out to the story fast, and back to the exact spot you left, so the next headline is one tap away.
6 min read - 20
Engineering
The number you weren't watching
A change is a trade, not a gift. You ship to move one metric, you watch that metric, it moves, and you call it a win — while the number you never instrumented quietly moves the other way. The bill goes unread because it was never on the screen. code-results reads every deploy against the whole handful a business would notice, so the win and the cost arrive together, on the same board.
6 min read - 21
Research
No one lives at the average
Talk to six users and you'll be tempted to average them into one tidy 'typical' person — and build for them. Talk to a hundred and the average dissolves: two real groups appear with an empty valley between, and the mean turns out to describe someone who doesn't exist. The distribution was the finding all along. AI User Interviews is built so you can afford to see it.
6 min read - 22
Engineering
The map is always a little late
A live map reads like a snapshot of one instant. Thyseus's never is — it's stitched from strangers' browser tabs, each on its own delayed clock, reporting what they saw seconds apart and out of order. The honest half of a live map isn't drawing the dots; it's manufacturing a *now* out of many moments, and admitting the picture is always a little bit in the past.
6 min read - 23
Engineering
The result has a half-life
The answer to 'did it work?' isn't worth the same on Monday as it is three weeks later. Not because the number changes — because you do. The reason you shipped, the alternatives you weighed, the file you were nervous about: all of it decays out of memory on a curve. A verdict that arrives after the why is gone is a fact you can't act on. code-results is built to catch the answer while the reason is still lit.
6 min read - 24
Engineering
The size was the story
The Drudge Report says what matters not in its words but in its type — one headline set enormous, another flashed red, the rest filed small. That ranking is the editor's whole opinion, and it's the first thing a feed reader throws away. DReader's real job isn't fetching the links. It's carrying the emphasis across.
6 min read - 25
Engineering
A pixel is not a place
A detector can tell you there's a car in the frame and draw a tidy box around it. That box is a claim about pixels, not about the world — column 412, row 380 is not a street corner. The interesting half of Thyseus is the geometry that turns a spot in a camera frame into a coordinate on a map, and why we run it in the same browser tab that saw the car.
6 min read - 26
Research
The interviewer was the variable
Two people answer the same research question differently, and everyone reads it as a finding. But a human interviewer never actually asks the same question twice — the wording drifts, the tone leads, the tenth session is wearier than the first. AI User Interviews holds the one instrument nobody thought to control still, so the variation that's left is the respondent's, not the asking's.
5 min read - 27
Engineering
The news was the lightest thing on the page
A modern news page makes you download a few megabytes to read a paragraph of headlines. The words — the thing you actually came for — are a rounding error in the bytes. DReader is what's left when you ship only the rounding error, and why that isn't a diet you can apply to the heavy page but a different object entirely.
5 min read - 28
Research
Enough is a shape you can see
Every research plan quietly dodges the same question: how many interviews is enough? The honest answer — keep going until you stop hearing new things — was useless for decades, because nobody could afford to run that far. AI User Interviews turns saturation from a hunch you defend into a shape you watch arrive.
5 min read - 29
Engineering
The number moved. Was it you?
Sign-ups are up since you shipped. That feels like a win — but 'up' is a level, and a level is the one thing that can't tell you whether your change did anything. The real question is whether the line broke where your deploy landed, and that's a question of alignment, not analytics.
5 min read - 30
Engineering
The map has to agree with itself
A live map drawn by strangers' laptops has an obvious problem: why trust any single detection? A cheap model watching a rainy feed will call a truck a bus. Thyseus doesn't answer that by building a better observer. It answers it the way a newsroom does — by corroboration — and turning agreement into confidence is the part that makes the map real.
6 min read - 31
Process
What happens when you can afford to ask
Drop the cost of a user interview far enough and you don't just get more interviews — you get a different thing entirely. Research stops being an event you schedule and becomes an instrument you leave running. That shift, not the raw count, is what AI User Interviews is really for.
5 min read - 32
Engineering
There is no feed. There never was.
The Drudge Report has no RSS, no API, no app, and no intention of adding any. It is hand-edited HTML that changes dozens of times a day. DReader has to read it the way a person does — by looking at the page — and that constraint, not the styling, is the whole engineering problem.
5 min read - 33
Design
The bottleneck was never the questions
Teams don't run too few user interviews because they've run out of things to ask. They run too few because every interview has to be scheduled, sat through, and written up by a person — and that cost, not curiosity, is what caps the research. AI User Interviews is built to move the cap.
5 min read - 34
Engineering
The map is made of open tabs
The usual way to build a live map of the physical world is to buy sensors and rent servers to watch them. Thyseus does neither. It turns cameras that already exist and browser tabs that are already open into a sensor network nobody had to install — and that inversion is the whole product.
6 min read - 35
Engineering
You shipped it. Did it work?
Most teams can tell you exactly what they shipped last quarter and almost nothing about whether it mattered. The feedback loop dies at the merge button — and that's the loop code-results is built to close.
5 min read - 36
Guides
Gantt chart, kanban board, or to-do list?
Three shapes a plan can take, and how to pick the right one — a plain-English decision guide based on the one question that actually matters: does time drive your work, or does order?
5 min read - 37
Guides
How to turn a plain-English plan into a Gantt chart
A practical guide to going from 'here's roughly what we're doing' to a timeline people can actually follow — the four things every plan needs, how to write them down, and the fastest ways to get the chart made.
6 min read - 38
Studio
In defense of small software
Big software promises everything and demands your whole workflow in return. We think there's a better trade: tools that do one thing, respect your attention, and get out of the way.
4 min read - 39
Engineering
The fastest page is the one that's already there
Our homepage used to hide its own headline behind 312KB of JavaScript. We rebuilt it to ship zero client-side JS — same animations, same design, visible before any script runs. Here's how, and why a tiny studio cares.
5 min read - 40
Design
The ten minutes before the meeting
Most tools are designed for the hours you spend in them. ganttchart.ai is designed for the ten minutes before a meeting — and picking one moment to serve changed every decision we made.
4 min read - 41
Studio
Why we only build what we run
No client work, no handoffs, no 'v1 and vanish.' Everything we ship, we operate — and that single constraint shapes how we plan, build, and support our products.
3 min read
New dispatches go to press whenever the trolls learn something worth writing down. Prefer definitions to essays? Try the plain-English glossary.