Interactive SOW
The statement of work1 came back covered in highlights. We made the changes and sent it out again. It came back with more.
That loop is why this project exists. The fix turned out to be small. What it changed wasn't.
Round after round
Satat had just changed direction, from Flutter to Frappe,2 and I had moved with it. As the work changed, we realised our own process needed a proper home too: one digital system, not files passed from person to person.
I saw why during pre-sales3 for one of our customers. The SOW went to them as a PDF. Their comments came back as highlights inside that PDF. Every change meant a new file and another round.
A PDF is fine for a final copy. It's a poor place to have a conversation:
- Nobody could track changes. Each round was simply a new file.
- Nobody could review live. Comments sat inside a file until someone sent it.
- It was hard to read. An SOW is mostly wide tables, and on a PDF page they looked heavy.
- Nothing held the process together. Who had approved this version? The file couldn't tell you.
A page instead of a file
The owner of the company and I came up with the idea together: stop sending a file, and give the SOW a page of its own.
Frappe already held our SOWs as records. What they didn't have was a portal, a page made for the person reading it. So the first job was simply to make it readable, with clear headings, the key facts at the top, and tables you can actually scan.
| # | Functionality | Process | Module | Purpose | Acceptance criteria | Dependency |
|---|---|---|---|---|---|---|
| 1 | Order approval | Sales enters the order. The system checks it against the limit and routes it. | Selling | Large orders are checked before they are confirmed. | A manager's approval is needed for any order above the limit. | Customer: the approval limit and the list of managers. |
| 2 | Stock alerts | The store team sets a reorder level for each item. | Stock | The team hears about low stock before an item runs out. | An alert reaches the store team when stock falls below the reorder level. | Customer: reorder levels for every item. |
| 3 | Customer import | The customer shares a sheet. We clean it and load it. | CRM | Existing customers are brought into the new system. | Every customer in the sheet appears with their contact details. | Customer: one complete sheet of customers. |
| 1 | Order approval | Customer: the approval limit and the list of managers. | Sales enters the order. The system checks it against the limit and routes it. |
| 2 | Stock alerts | Customer: reorder levels for every item. | The store team sets a reorder level for each item. |
| 3 | Customer import | Customer: one complete sheet of customers. | The customer shares a sheet. We clean it and load it. |
The PDF didn't disappear. It became a small button in the top corner, for anyone who wants a copy.
Comments on the exact words
The customer had already shown us what they wanted. They were marking exact words and writing next to them. So we kept that habit and took away the file around it.
Now you select the words you care about and leave a comment. They stay highlighted, with the author's initials on top, and the comment opens a thread in the side panel. We reply there, and once the point is settled, whoever wrote the SOW marks it as resolved.
There's no latest version to hunt for, because there's only one page. Resolved comments turn green and stay in the list, so months later you can still see how a line came to say what it says.
The process, built in
Comments are what people notice. The bigger change was the process.
Every SOW now takes the same path. A developer writes it. Sales approves it. Then the customer approves it. If either of them isn't happy, it goes back, and the status at the top of the page says so for everyone.
When the customer approves, a green banner appears and asks them for feedback.
Small, and still running
As projects go, this one was small: a page, comments and a few approvals. But it took a process that lived in files and made it digital.
Once I had given it shape, I handed the project to another member of the team. We still use it today.
Before, our process was something we agreed on. Now it's something the page won't let you skip.
Footnotes
A statement of work, or SOW, sets out what a project includes, what it leaves out and what it will cost. Both sides agree on it before the work starts. ↩
Flutter is a framework for building mobile apps. Frappe is the open source framework behind ERPNext, used for building business software. ↩
Pre-sales is the work before a deal is signed: understanding what a customer needs and scoping it. ↩