Why you can't buy 20 pieces of aluminum tube online — Vestal Metals
Vestal Metals
← Blog
Get a quote<br>Track order
Why you can't buy 20 pieces of aluminum tube online
August 2026 · Ivan Hallmark
I'm a manufacturing engineer. For the last year I've spent my Fridays off walking into fabrication shops around town and asking owners one question: what part of your day sucks the most?
The answer I kept getting was buying metal.
Not making things. Not hiring. Buying the raw material. You want twenty pieces of 2×2 aluminum tube cut to 47 inches. In 2026, that means calling four distributors, waiting two to four days for quotes to come back in incompatible formats, and discovering that half of them won't touch the order because it's below their minimum.
I got curious about why it works this way, because the technology to do better has existed for decades. Here's what I found.
Why quotes take days
A distributor quote isn't slow because someone is lazy. It's slow because it's genuinely manual work. A salesperson pulls current material cost, checks what's in stock, figures out how many stock lengths your cuts will consume, adds processing time, applies a margin that depends on who you are and how big you are, and types it up.
Call it thirty minutes of a salesperson's time. Now do the arithmetic on a $340 order. After material cost, that quote consumed most or all of the gross profit before anyone touched a saw.
Minimums aren't policy or snobbery, they're just math. When every quote costs thirty minutes of labor, small orders lose money, so you refuse them.
Every distributor independently arrives at the same conclusion, which is why an entire class of buyer - the shop that needs twenty pieces, the prototype run, the one-off repair - gets turned away industry-wide.
Drop the cost of producing a quote to zero and that arithmetic inverts. That's the whole thesis.
The part that's actually interesting
Pricing cut-to-length tube is not "price per pound times pounds." It's a one-dimensional bin packing problem, and the details are where the money hides.
Aluminum tube arrives in stock lengths, 24 feet is typical. Your cuts have to be packed into those bars. Bin packing is NP-hard in most cases, but at the sizes real orders come in, first-fit-decreasing gets you close enough to optimal that the remaining gap is smaller than the other error sources.
Three things make it more interesting than textbook bin packing.
The blade eats material. Every cut destroys a kerf's width of tube, and on a cold saw, this is around 0.125". Ignore it and your packing is wrong: six 47" cuts is 282 inches of tube, but 282.75 inches of bar, because five of those cuts have kerf. That three-quarters of an inch is the difference between a bar yielding six pieces and yielding five, and getting it wrong means promising material you can't deliver.
Scrap is dominated by the last bar. Here's a real quote from my system: 20 pieces of 2×2×0.125" 6061-T6 at 47 inches. Each 288" bar holds six cuts (6 × 47.125 = 282.75", leaving 5.25" of drop - under 2% waste). But 20 pieces needs four bars, and the fourth carries only two cuts. Total scrap: 18.2%.
The first three bars are 98% efficient. The order is 82% efficient. All of the waste lives in the trailing partial bar, which means the real optimization isn't packing a single order better, it's packing across orders, and tracking usable remnants as inventory rather than throwing them in the scrap bin. A 194-inch drop isn't waste; it's a bar that's already paid for, waiting for someone who needs 47-inch pieces.
Multiple lengths compete. Real orders aren't one length. They're 47 pieces at 18.25", 12 at 36", and 8 at 52.5", which is an actual order from my system. Mixed lengths pack far better than uniform ones, because short pieces fill the gaps long pieces leave. The customer usually has no idea their order shape is what determined their price.
None of this is novel computer science. It's a solved problem that simply hasn't been pointed at this industry's front door, because the industry's front door is a telephone.
What I built
A quoting engine that does the whole thing in under a minute:
Describe what you need in plain English ("20 pieces of 2x2x.125 6061 at 47 inches") and an LLM parses it into structured line items. There's also a table and CSV upload, because half the people who need this already have their cut list in a spreadsheet.
The optimizer packs the cuts across stock bars with kerf accounted for, and shows you the nesting visually, per bar, along with the scrap percentage.
You get a real price and a PDF quote, then a buy button.
Orders get a tracker, the pizza-tracker pattern, because a fabricator waiting on material has exactly the same question as someone waiting on a pizza: where is it.
The stack is deliberately boring: a single Python file using the standard library's HTTP server, JSON on disk as the database, Caddy in front for TLS,...