1
0 Comments

The PDF Operation Is Easy. The Workflow Is the Product.

Most PDF tools look finished when the core operation works. Two files go in, one merged file comes out, and the demo succeeds. That is enough for a utility. It is not enough for a workflow product.

The difficult part starts when the tool is placed inside a real process: an inbox automation, an invoice pipeline, a report generator, a document archive, or an AI agent that must decide what to do next. At that point, the value is no longer the merge, split or conversion itself. The value is whether the surrounding system can trust the result.

I have been working through this while building a small PDF Toolkit. The coding problem was straightforward. The product-design problem was deciding what guarantees the tool should make, what it should refuse to do, and what information it should return to the next step.

1. Start with the workflow, not the feature list

A feature list encourages a builder to think in isolated verbs: merge, split, compress, rotate, watermark, convert. A workflow forces different questions:

• Where does the input come from?

• Can the tool access it without credentials?

• What happens when one file is corrupt?

• Does a failed run produce a partial result?

• How does the next system know which operation completed?

• Where is the output stored, and for how long?

• What does the user pay for if nothing useful is produced?

These questions sound operational rather than innovative, but they are what separate a tool that works in a browser tab from a tool that can safely sit in an automated chain.

A practical document workflow

1. Receive
files

2. Validate
inputs

3. Run one
operation

4. Return output
+ status

A useful PDF product defines the contract at every handoff, not only the file transformation.

2. Define the input boundary

The first design decision is not which PDF library to use. It is what kind of input the product will accept. Public URLs are easy to automate, but they cannot reach files behind a login. Base64 input is portable, but large payloads become awkward. Temporary storage keys are efficient inside one platform, but they create a tighter dependency on that platform.

The important thing is to state the boundary clearly. A tool should not imply that it can fetch any document on the internet if it only sees what an anonymous visitor can see. It should not silently attempt to bypass authentication. It should not accept password-protected files unless encryption handling is genuinely supported.

A narrow, explicit input contract creates fewer impressive demos, but it produces fewer mysterious failures. That trade-off is usually worth making.

3. Treat failure as a product output

In a manual tool, an error message can be enough. A person reads it and tries again. In an automated workflow, the next system needs a machine-readable answer. It needs to distinguish an unreachable file from a corrupt PDF, an invalid page range, an oversized result, or an internal processing error.

This changes the shape of the product. The output should include more than a download link. It should include the action performed, the number of inputs, the output locations, processing time, useful size information, and a clear status. When compression is requested, returning the before-and-after byte counts is more useful than simply saying that the file was compressed.

There is also a commercial reason to design failure properly. Charging for a start attempt is defensible when compute has been consumed, but charging a result fee when no result exists is harder to justify. A clean rule is easier for both the user and the billing system: successful output creates a billable event; failed output does not.

4. Separate deterministic work from browser work

Most PDF operations are deterministic file transformations. Given the same inputs and options, a merge or split should produce the same output. URL-to-PDF is different. It depends on a live page, network timing, fonts, scripts, cookie banners and whatever an anonymous visitor can see at that moment.

Putting both behind one interface is convenient, but the implementation should still keep them separate. A lightweight merge should not load a browser engine. Dependencies should load only for the selected operation. This reduces startup time and compute cost, and it makes pricing by successful output more practical.

This is a general product lesson: one interface does not require one execution path. The user benefits from a consistent contract; the system benefits from specialised internals.

5. Be precise about compression

Compression is one of the easiest areas in which a product can accidentally overpromise. Structural compression can rebuild object streams and remove redundancy without changing text or vector content. That is useful, but it may achieve only a modest reduction on a file that has already been optimised.

Lossy compression can produce larger savings by re-encoding images, but it changes the document and introduces quality decisions. These are different products, even if both use the word compress.

The honest approach is to describe the method, return the actual size difference and let the user decide whether the result is worthwhile. A small measured saving is better than a large unverified claim.

6. Resist the pressure to add everything

Once the first operations work, the obvious temptation is to add OCR, text editing, form filling, encryption removal, signatures and every conversion format. That may eventually be the right direction, but each addition changes the trust model.

OCR introduces language support, confidence scores and accuracy questions. Editing text inside an existing PDF is far more complex than rearranging pages. Password removal creates security and authorisation issues. Digital signatures require a very different level of assurance.

A product becomes stronger when its exclusions are intentional. Saying “this works on pages and files, not on the text inside them” gives users a boundary they can design around. A vague promise of an all-in-one PDF solution gives them a larger surface for disappointment.

7. Design for the next caller

The most useful test is to imagine that no person will inspect the result immediately. An AI agent or workflow engine will receive the response and must decide what happens next.

Can it tell whether the operation succeeded? Can it locate every produced file? Can it identify which action ran? Can it handle multiple outputs from a split? Can it stop safely when the input is invalid? If those answers are clear, the product is becoming automation infrastructure rather than a collection of buttons.

This does not require a large platform. A small tool can be valuable when it has a dependable contract. In many cases, reliability, refusal rules and clear outputs matter more than adding another operation.

What I ended up building

The implementation that came out of this thinking is a small PDF Toolkit with merge, split, compression, rotation, page deletion, watermarking, PDF-to-image, image-to-PDF and public URL-to-PDF operations. The Apify version accepts batch jobs and returns downloadable output links with structured metadata. A separate MCP version exposes five typed PDF tools for developers and AI agents.

The more important part, from my perspective, is not the number of operations. It is the set of boundaries: public or platform-stored inputs, no password removal, no OCR in the Apify toolkit, no editing of document text, clear failure behaviour, and charging tied to successful output.

The product page is here: PDF Toolkit on Howth Technology Factory.

For anyone who wants to inspect the implementation surfaces directly: Apify listing and MCPize listing.

The question I am still testing

For founders building small developer tools, where do you draw the line between a focused utility and a broader workflow product?

My current view is that the product becomes more valuable when it owns a complete, dependable step rather than when it collects the longest possible feature list. But there is a point where a narrow tool becomes too replaceable, and a point where a broad tool becomes too difficult to trust.

I would be interested in how other founders make that decision, especially when the product is intended to be called by both people and AI agents.

posted toAvatar for product PDF Toolkit: Merge, Split, Compress & Convert PDFs
PDF Toolkit: Merge, Split, Compress & Convert PDFs