Try Pro free
“i think i spent like two months just on that completely redesigning like the internals and like making sure it's still easy for people”
Peter Steinbergerat 25:12 · The Pragmatic Engineer
25:12

Takeaways

  1. One customer PDF contained 500,000 links.
  2. The original data model failed at that scale.
  3. He made loading lazy without changing the customer-facing API.

About this segment

A 50,000-page Bible contained 500,000 links, far beyond his original data-model assumptions. He spent two months redesigning the internals while keeping the API simple for customers.

Peter Steinberger

Peter Steinberger is creator of OpenClaw and founder of PSPDFKit.

Created viral open-source personal agent OpenClaw and joined OpenAI to drive next-generation personal agents.

  • Gergely Orosz, Host · Host, The Pragmatic Engineer

    Spent four years at Uber heading mobile, web and backend teams; shipped part of its payments system.

From “The creator of OpenClaw: "I ship code I don't read"”, Jan 28, 2026. Watch the full episode

Transcript

Transcribed by machine (Whisper) from the episode’s audio, so a word may be off here and there.

  1. 24:10

    You need to tell me one or two hard things about parsing PDF. How hard could it be? If there's a specification, I'm an engineer, I know specifications, what's so hard about it? I mean, there was just one example where, you know, like PDFs have links. So like I said, there's like a table of contents and you click on it and it goes to like page 37. So I built this whole model with the assumption, oh, yeah, maybe there's like 100 or 400 links in there.

  2. 24:34

    And then we got this one customer who like paid really good money. And then it's like, oh, it takes four minutes to load a PDF. What the heck, guys? And I looked at it and it was like a 50,000 page text Bible from Canada. And it had like... 50,000 pages. It had like more than 100 links per page. 500,000 links. My data model completely exploded because my assumptions were off by a number of what, 1,000?

  3. 24:56

    but by then you have like a mature product with an api so like how do you how do you completely redesign the internal part without breaking things for everyone like suddenly everything has to be lazy but before parsing 101 was easy but now they were like this was like so difficult to keep it working for people um i think i spent like two months just on that completely redesigning like the internals and like making sure it's still easy for people they don't have to know what we what we load easy what we load lazy or if you copy the thing it still has to like have to keep some connection it needs to keep the references and some of those things so i sorry and i i love to do support and i think that that was a confining factor why the company worked because if if you send a ticket and then the the ceo replies and helps you out um that has impact and my my strategy

  4. 25:56

    was always like i always used to list in reverse because if you if you send a ticket and you get a reply within five minutes that's magical if you wait one or two days not much difference yeah so yeah and this uh this was one of the problems where i worked uh two months and i finally got it down to almost like this. That must have been satisfying. And it was very satisfying. And you were writing a lot of the code, or you were involved in a bunch of the code.

  5. 26:22

    Obviously, a big team was now here, but you were