The Top Step

Nobody writes assembly anymore. Somebody still has to say what they want.

Eric Garcia, PhD

Eric Garcia, PhD

October 15, 2026 · 9 min read

A stepped pyramid of pale sandstone blocks against the deep navy starfield, carved and read from the bottom up: "WHERE THE NUMBER GOES", "SENTENCES", "BORROWING", and on top two smaller blocks side by side reading "WHAT SHOULD THIS DO?" and "HOW WILL I KNOW IT DID?" A small pale robot with a boxy vintage monitor head and two glowing rectangular eyes stands on the top step, one thin arm raised, holding a white hand-lettered sign that reads "I FILLED IN THE REST."
The machine will tell you it filled in the rest. The real one won't.

Every staircase has a top step. Most people climbing one don't think about that.

I. In the beginning

A slab of pale sandstone against the deep navy starfield, carved with a four-column table headed "SMALL (8-BIT) INTEGER BIT REPRESENTATIONS FOR BOTH POSITIVE AND NEGATIVE NUMBERS." The leftmost column is headed "VALUE" and the other four are "TWOS-COMPLEMENT", "SIGN-MAGNITUDE", "ONES-COMPLEMENT" and "EXCESS-128." Rows run down from 127, 126, 125, an ellipsis, 3, 2, 1, 0, then 0 again and down the negative side to 125, 126, 127, 128, each row giving the same value written as eight ones and zeros four different ways. Several cells read "no rep." instead of a number, where that scheme cannot write that value.
The same number, spelled four ways. The machine has already picked one.

I studied computer engineering in the early two-thousands. In the first year they taught us to count.

Not like that. In binary. Ones and zeros.

Then they taught us to count in binary again, a different way. And again. This table is four of those ways. Every column writes the same numbers. They disagree about how you write a negative one, and about whether zero gets written twice.

I had to know all four. Not because four is useful. Because the machine underneath you has picked one, and if you're wrong about which, your number is quietly somebody else's number.

A slab of pale sandstone against the deep navy starfield, carved with a dense circuit schematic. Across the top, boxes labeled "INPUT DATA B" over bit labels "B7 B6 B5 B4 B3 B2 B1 B0" and "INPUT DATA A" over "A7 A6 A5 A4 A3 A2 A1 A0", with "STATUS FLAGS" and a legend reading "V = Overflow has occurred, N = Negative Result, Z = Zero Result, C = Carry Out." Dozens of engraved wires run down into boxes labeled "MUX 1", "MUX 2", "MUX 3", "ALU", "SHIFT", "GATE/LOGIC" and "ROTATE MODE SELECT", and out to a box labeled "RESULT (2’S COMPLEMENT NOTATION)" over bit labels "Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0." Along the bottom a table headed "CONTROL WORDS" lists "ADD + CARRY (A+B+Cin)", "SUBTRACT (A-B)", "NEGATE (2’s Comp)", "INCREMENT (A+1)", "DECREMENT (A-1)", "SHIFT LEFT (with carry)", "ROTATE LEFT (with carry)" and "ROTATE RIGHT", each against an eight-digit binary code, beside three numbered instructions: "1. Load binary input data as required. 2. Set up Control Word. 3. Click CK button for result."
A calculator, drawn one wire at a time. It adds two numbers.

That drawing is a calculator. It adds. It subtracts.

I had to design one. Not use one. Draw it — every wire, every gate, and work out what each one does when the voltage on it goes high.

The two numbers you're adding are those voltages, on those wires, written in one of the four spellings from the last picture. And the thing that tells it to add rather than subtract is another row of voltages, down in the corner, called a control word. Add is one pattern. Subtract is a different pattern. You look them up.

Drawing that calculator took me a semester. It adds two numbers.

A slab of pale sandstone against the deep navy starfield, carved with a diagram headed "Simplified model of x86 CPU." On the left, under "Instruction stream", a column of assembly instructions in monospace, beginning and ending with an ellipsis: "movl $0, %eax", "addl %eax, %ebx", "popl %eax", a label "looptop:", then an arrow pointing at "imul %edx", then "andl $0xFF, %eax", "cmpl $100, %eax", "jb looptop", "leal 4(%esp), %ebp", "movl %esi, %edi", "subl $8, %edi", "shrl %cl, %ebx" and "movw %bx, -2(%ebp)." On the right, under "General-purpose registers", eight stacked boxes labeled "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi" and "edi", with a double-headed arrow beneath them marked "32 bits."
Eight boxes, and the whole job was getting each number into the right one.

One step up from those wires, the job looked like this. Each line in the left column moves one number into one spot, or adds two of them, or asks whether one is smaller than another.

The boxes on the right are the spots. There are eight of them. That isn't a simplification for the picture — there were eight.

So the work was getting the number you wanted into the right box, in the right spelling, before the line that needed it. Then doing it again.

I wrote code like this. Not much of it, and not well. Enough to know what it cost.

A slab of pale sandstone against the deep navy starfield, carved with a panel headed "Plotting a Cosine Wave in Python." On the left, nine lines of Python in monospace, with comments: "# Import Python libraries", "import matplotlib.pyplot as plt", "import numpy as np"; "# x-axis: Creates an array of 100 evenly spaced values between 0 and 10", "x = np.linspace(0, 10, 100)"; "# y-axis: Calculates the cosine of each x value", "y = np.cos(x)"; "# Plot the (x,y) values on a graph", "plt.plot(x, y)"; "# Add in graph title and labels", "plt.title(‘Cosine Wave’)", "plt.xlabel(‘x-axis’)", "plt.ylabel(‘y-axis’)", "plt.show()". On the right, the graph those lines produce: a cosine curve titled "Cosine Wave", starting at 1.0, falling to a trough near 3, rising to a peak near 6 and falling again near 9, with "x-axis" below and "y-axis" beside it.
Nine lines, and most of the work in them was somebody else's.

Nine lines. Two of them just say: use somebody else's work.

Those nine lines get you a hundred numbers, the cosine of every one, and a picture of the answer. I didn't write the cosine. I didn't write the part that draws. I didn't write the part that decides which box each number goes in.

Nobody asked me to. That work was done, and given away, and it sat there waiting under an import line.

Same machine underneath. Same wires. Same eight boxes.

A stepped pyramid of pale sandstone blocks against the deep navy starfield, each step carved with a label, read from the bottom up: "HARDWARE", "MACHINE LANGUAGE", "ASSEMBLY LANGUAGE", "HIGH-LEVEL LANGUAGE", then a row of three smaller blocks side by side reading "Java", "C++" and "Fortran", then a row of two blocks reading "OPEN SOURCE LIBRARIES" and "PYTHON", and at the top two separate small blocks side by side reading "WHAT DOES THIS DO?" and "HOW WILL I KNOW IF IT DID?"
Every step up says the same thing in fewer words.

Here is the whole thing, squashed into one picture.

The bottom is the hardware — the wires I just drew. Above it, machine language: the numbers that pick which wires. Above that, assembly, which is names for those numbers. Above that, a language you can almost read out loud, and then the ones I actually learned. Above those, everything somebody else already built and gave away.

Each step up is the same work, said in fewer words. I started at the bottom of this picture. Almost nobody starts there now.

The two on top we will get to.

It's the picture this piece opened with: the same shape, with new words on it.

Where the number goes is the wires and the instruction. Sentences is the language you can almost read. Borrowing is everything somebody else already built.

The two on top are still waiting.

II. The staircase

Three times now, somebody has built a machine that took over a whole step of that staircase.

Start at the bottom, with the oldest one.

A single block of warm sandstone stands alone on dark ground against a deep navy starfield, with a band of the Milky Way at the upper right. The front face of the block carries a label incised in bold dark capitals: "WHERE THE NUMBER GOES." Nothing stands above or beside the block, and most of the frame is empty sky. No other text appears in the image.
Where it starts: one number, one spot, all day.

There used to be a job where you told the computer where to put a number.

Not what the number was for. Not what to do if the number turned out to be wrong. Just: put this number in that spot. Then put the next one in the next spot. One at a time, in the order the machine would do them, all day.

The job was hard. It took years to get good at. People built whole careers out of it.

A tall upright standing stone of pale sandstone is planted in dark sand against a deep navy starfield, with the four-step staircase small and far behind it. Incised into its face in dark capitals: "THE JOB" above a thin rule, and beneath the rule, larger, "THAT JOB IS GONE, AND NOBODY MISSES IT."
A job can disappear by getting small.

The job is gone. A few people still do it, and they're experts now. Fifty years ago it wasn't an expert's job. It was just part of the work.

The job didn't vanish, exactly. The job got small, and it stopped being where anything happens. And nobody misses it.

The thing that took that job away is the thing people are scared of now.

Two blocks of pale sandstone against the deep navy starfield, the smaller set on top of the larger and stepped back to the right. The lower block is carved in dark sans-serif capitals "WHERE THE NUMBER GOES" and the upper one "SENTENCES." A small pale robot with a boxy vintage monitor head and two glowing rectangular eyes stands on the lower block, one thin arm raised, holding a hand-lettered sign that reads "I DO THIS PART NOW." Nothing stands above the upper block.
The compiler takes the bottom step, and the people on it move up.

Somebody built a machine that did the number-putting for you. You wrote down what you wanted, in something a lot closer to English. The machine turned your sentence into all the little instructions underneath it.

The machine is called a compiler. The sign is the whole of what a compiler does.

So now one person could do what used to take ten people. You'd think they kept one person and sent nine home. They didn't.

They built ten times as much software. Then they built software for people who could never have paid for any of it before. There are more people making software today than there were back when the numbers had to go in by hand.

And the person who used to place the numbers wasn't sent home either. The person who used to place the numbers got moved up. They spent the next years deciding what the program should do. That's the more interesting job, and they were good at it, because they already knew how the thing worked underneath.

The same tall standing stone of pale sandstone planted in dark sand against the deep navy starfield, the staircase small and far behind it. Incised into its face in dark capitals: "THEN IT HAPPENED AGAIN." and, after a gap, "AND AGAIN."
The same promotion, over and over.

Then it happened again. And again.

The bottom step is the numbers and where to put them.

The step above is sentences. Do this, then do that, and if some other thing is true, do something else instead.

The step above sentences is borrowing. Somebody already built most of what you want, so you take theirs and write the last little bit yourself.

Three blocks of pale sandstone against the deep navy starfield, each set on the one below and stepped back to the right. The labels are carved in dark sans-serif capitals, read from the bottom up: "WHERE THE NUMBER GOES", "SENTENCES", "BORROWING." The small pale robot with the boxy vintage monitor head and glowing rectangular eyes stands on the middle block, one thin arm raised, holding a hand-lettered sign that reads "AND THIS PART." Nothing stands above the top block.
Each time, the machine takes the step just below the people.

Same machine, one step higher, and a shorter sign.

Each time, somebody builds a machine that handles the step below. The step doesn't disappear. The step gets small and quiet. A few experts go on standing there, and they like it down there, and everyone else climbs up one.

The climb has worked every time so far.

Everybody on the stairs has assumed, without ever saying it out loud, that there's another step above them.

The same tall standing stone of pale sandstone planted in dark sand against the deep navy starfield, the staircase small and far behind it. Incised into its face in dark capitals: "BUT THERE ISN’T." and, after a gap, "THE STAIRCASE HAS A TOP."
Every staircase runs out of steps.

But there isn't. The staircase has a top.

III. Two questions

Every step up is the same thing said in fewer words. A step is the same thing with the boring parts left out for you.

So keep going. Leave out more boring parts. Leave out more. Eventually you run out of boring parts. What's left is the part that was never boring, which is the thing you actually wanted.

What's left is two questions.

A stepped pyramid of pale sandstone against the deep navy starfield, carved in dark sans-serif capitals and read from the bottom up: "WHERE THE NUMBER GOES", "SENTENCES", "BORROWING", and on top two smaller blocks side by side reading "WHAT SHOULD THIS DO?" and "HOW WILL I KNOW IT DID?" The small pale robot with the boxy vintage monitor head and glowing rectangular eyes stands on the "BORROWING" step, below the two questions, one thin arm raised, holding a hand-lettered sign that reads "I CANNOT MAKE THAT SHORTER."
The two questions at the top can't be made any shorter.

What should this do? And: how will I know it did?

You can't shrink those two questions. There's nothing in them to leave out.

The two questions aren't a tiny program. If you want to say everything a program does, you have to write the program. There's no shorter way, and there never will be.

The two questions are something else. The two questions are what you wanted, and how anybody could check.

The same tall standing stone of pale sandstone planted in dark sand against the deep navy starfield, the staircase small and far behind it. Incised into its face in dark capitals: "THE TOP STEP IS TWO QUESTIONS, AND NOTHING IS ABOVE IT."
There is no step above the two questions.

Those two questions are the top step. The machine being built right now takes over the step just below: you say what you want in ordinary English, and the machine writes the code.

IV. The machine that says no

All the old climbs worked for a reason, and it isn't the reason people think.

A compiler is not smart. That's the good part.

A close view of the small pale robot's boxy vintage monitor head, its two glowing rectangular eyes bright on the dark screen, against the deep navy starfield with one edge of a warm sandstone block below. One thin arm holds a white hand-lettered sign, large in the frame, that reads "LINE 4. I DO NOT UNDERSTAND." No other text appears in the image.
The compiler stops and tells you where you were unclear.

Write something a compiler doesn't understand and the compiler stops. It will not guess. It prints the line you got wrong and then it waits, and the problem is yours now.

A compiler does this every time, for anything unclear, forever. The compiler never gets tired of you. The compiler has never once decided you had probably suffered enough.

That refusal is what makes the step above the numbers safe to stand on. Nothing gets decided quietly. If you were unclear, you find out in about a second. And you find it out from a machine that has no opinion about you at all.

The refusal isn't perfect. There's one famous kind of case where a compiler does guess. The compiler assumes what you probably meant and quietly builds on that. The guessing was left open on purpose, a long time ago, so that programs could run faster. It worked.

Programmers have been arguing about that one case for decades. That's how badly people want a machine to say no.

Now the new machine.

The identical close view of the same small pale robot's monitor head and glowing rectangular eyes against the deep navy starfield, with the same edge of warm sandstone below and the same thin arm holding a white hand-lettered sign in the same place in the frame. The sign now reads "I FILLED IN THE REST." No other text appears in the image.
The new machine doesn't stop. It fills in the gap.

Ask the new machine for something unclear and it doesn't stop. It fills in the part you left out. It picks something reasonable. Then it hands you the whole thing. The part you asked for and the part it made up look exactly the same.

The new machine is trying to help. The new machine is good at helping. It has no way to tell you which parts were the helping.

The same tall standing stone of pale sandstone planted in dark sand against the deep navy starfield, the staircase small and far behind it. Incised into its face in dark capitals: "NOTHING PRINTS A LINE." then "NOTHING WAITS." then "THE DECISION STILL GOT MADE."
A decision got made, and nothing said so.

Nothing prints a line. Nothing waits. The decision still got made. The decision just got made by something that's never going to mention it.

V. It really is a step up

The stairs were never built for the machine. A machine reads English and code with the same ease. Every step was built for the person. Each step let you say what you wanted in words a little more like your own.

The numbers became sentences. The sentences became borrowing. And now you can say the top step out loud in plain English, the way you'd say it to a person. That's the biggest step anybody has taken on these stairs.

Saying the top step out loud is the thing people were climbing toward the whole way up.

The same tall standing stone of pale sandstone planted in dark sand against the deep navy starfield, the staircase small and far behind it. Incised into its face in dark capitals: "THE STEP UP" above a thin rule, and beneath the rule "THE STEP UP IS REAL — WITH THE PART THAT SAYS “NO” TAKEN OUT."
The step up, without the part that says no.

The step up is real. It's a step up with the part that says "no" taken out.

So build the part that says no yourself. A test. A check that stops everything the moment it fails. A note somebody wrote before the work started, saying what counts as finished.

You have earned the right to stand one step higher exactly as much as you have written down how you'd find out you were wrong. No check, nothing to stand on. A plan that can't be wrong about anything isn't a plan. It's a wish.

A wish leaves a gap. The gap used to get filled by a person. Somebody on the step below you read your vague instructions and worked out what you actually meant. Then they quietly supplied the part you forgot to say. They did not mention it. Mentioning it would have taken longer than doing it.

That person is getting promoted. Nobody is getting promoted into their place.

A stepped pyramid of pale sandstone against the deep navy starfield, carved in dark capitals and read from the bottom up: "WHERE THE NUMBER GOES", "SENTENCES", "BORROWING", and on top two smaller blocks side by side reading "WHAT SHOULD THIS DO?" and "HOW WILL I KNOW IT DID?" The small pale robot with the boxy vintage monitor head and glowing rectangular eyes stands on the top step between the two question blocks, one thin arm raised, holding a hand-lettered sign that reads "I FILLED IN THE REST." Planted upright in the stone to the right of the robot, held by nobody and standing lower than the robot’s sign, a second hand-lettered sign reads "WHICH PARTS?"
The question the machine can't answer, so somebody has to ask it.

Somebody built the compiler, and what they built was a machine that refuses to guess. What's arriving now is a machine that promises to.

You finally get to say what you want in your own words. Nothing will tell you when you were unclear.

The same tall standing stone of pale sandstone planted in dark sand against the deep navy starfield, the staircase small and far behind it. Incised into its face in dark capitals: "NOBODY WRITES ASSEMBLY ANYMORE." and, after a gap, "SOMEBODY STILL HAS TO SAY WHAT THEY WANT."
The part of the job that never goes away.

Nobody writes assembly anymore. Somebody still has to say what they want.

The same argument for a technical audience, with the footnotes and the sources, is in Nobody Writes Assembly Anymore.

The talk version of this piece, with its slides, is The Top Step on MuffinLabs.

Eric Garcia, PhD

Eric Garcia, PhD

Founder & Principal Consultant

PhD in Machine Learning from UW. Former Spotify ML engineer. 15+ years building production ML systems.

Learn more about Eric →

Need Help with Production ML?

We help companies build ML systems that actually work.

Learn About Our ML Consulting