Skip to the case study

Jill Low

Product Designer, UX/UI & Front-end Coder

Case study · Document generation Head of Product Design, Starboard Stellar Dec 2020 to Sep 2024

Replacing a document generator that people were fixing by hand

I inherited a document generation module, watched company secretaries export its output into a PDF editor to correct the layout themselves, and eventually replaced it with a third-party engine. Rendering document layouts was never the problem we should have owned.

01

What I inherited

The platform handled compliance work for company secretaries in Singapore, the people who file statutory documents on behalf of their clients. One module inside it generated those documents from client data the platform already held.

I took that module over from the designer before me and used it as the base for a wider set of features, including support for email sequences.

The module as I inherited it. Placeholders in the template on the left pull from the entity data on the right.
02

People finished the documents by hand

Usage grew and the output started to show its cracks. The HTML-to-PDF conversion laid documents out badly, so company secretaries opened the generated file in a PDF editor and fixed it themselves before it reached the client. What we produced had become a first draft, and sometimes the issue ran across 30+ pages in a document.

Engineering carried a cost too. Developers spent more time debugging layout rendering than improving the feature.

Generating a document, from picking a template through to requesting a signature. Frames from an internal training video.
03

Build the layout editor, or buy one

The company pivoted, which gave us room to replace the feature instead of patching it again. The question was whether we built our own layout editor or brought in a third party.

We chose PandaDoc. Rendering a document layout is a solved problem (or rather, not our problem), and I could not justify spending our engineering time solving it a second time when time was not on our side.

Handing off the rendering made it clearer what we still owned:

  • Data accuracy: The values that populated each document had to be accurate.
  • Customer data: It stayed on our side rather than going to the rendering platform.
  • End-to-end flow: Clients had to be able to sign and store their documents, and company secretaries had to be able to file them on time.

Two of us ported over 200 templates manually, from .docx into PandaDoc templates.

Porting the templates: the migration tracker we worked from, the rebuilt library in PandaDoc, and one template with its placeholder tokens.
04

What changed

The feature started bringing in new users by itself. Our customers had to come to Stellar to sign, and the signed document was stored there afterwards, easy to find and ready for official filings.

Company secretaries adopted it and stopped repairing documents in a PDF editor. Developers left the layout bugs behind and moved onto flow and feature work.

The feature now sits at roughly 3,000 signed documents since we launched it.

The replacement, end to end: pick a template, check the data going into it, send it for signature, and track it from one list.
05

I waited too long to replace it

I kept improving a feature that required a lot of patchwork, and waited for the company to pivot instead of making the case myself.

The migration is the other thing I would change. Two of us moved over 200 templates across by hand. I should have pushed harder on automating the conversion into PandaDoc’s format rather than accepting a manual port as the only route. A script would not have handled every template, but it would have handled enough of them to be worth writing, and that time could have gone into the signing and filing flow.