Lessons · Lesson 1 of 5
A blank is not a zero
What MerchandiserOS does with an empty field, where a missing value turns up later, and why a blank on a master record is a question and not a setting.
Lesson 1 of 5 · 20 min
The room this course happens in
Most of the work in this system hangs off a handful of small records. A buyer, a supplier, your own factory profile, a few lists of codes. They look like forms you fill in once and forget. This lesson is about what happens when you leave part of one empty.
Riche Terre Apparel is a knitted-tops and woven-shirt factory in Coromandel, Mauritius. It runs three sewing lines, employs 265 people and exports to the United Kingdom and France. Its MerchandiserOS workspace went live on 6 January 2024, and everything in this course happens inside it.
Four people appear.
- Yashvin Bhugaloo owns the business and is the workspace Owner. Settings are his alone.
- Devina Jhurry is the merchandiser. She owns the buyer records.
- Kavi Seebaluck is the sourcing officer. He owns suppliers and materials.
- Clency Perrine is the quality manager.
Say the basis once. All money in this course is US dollars, the currency Riche Terre keeps its cost sheets in. Where the app does not yet do something, the lesson says so plainly.
The four screens
Master data is not one module. It is four places, and only two of them sit inside Settings.
| Screen | Route | Who may open it | What it holds |
|---|---|---|---|
| Buyers | /buyers | Anyone with buyers access | The brands you produce for, and each one's quality profile |
| Suppliers | /suppliers | Anyone with suppliers access | Mills, trim vendors and subcontractors, with their standing |
| Factory profile | /settings/factory | Owner only | Your own identity, what you make, what you do in-house |
| Lists and codes | /settings/reference-data | Owner only | The editable lists behind the dropdowns |
Two of those four are Owner-only, and the page enforces it. It does not simply hide the link. Factory profile and Lists and codes both check the session and send a non-Owner to a refusal page. Know that before you ask a merchandiser to "just go and add it".
What the app does with an empty box
Create a supplier and the form offers ten controls: nine fields and a subcontractor checkbox. Exactly three are required — the name, the country and the category. The other six fields may be left empty, and what happens then is the whole subject of this lesson.
The three number fields — lead time, minimum order quantity and daily capacity — go through one shared parser. Its rule for an empty box is a single line, and it is the most important line in this course.
case "intopt":
if (v === "") return { ok: true, value: null, display: "—" };An empty box does not become zero. It becomes null, and the record shows a dash. Type a zero and you get a zero, which is a different fact about the world. A lead time of zero says the goods are always in stock. A lead time of nothing says nobody has asked.
| Field | Required | Kavi types | Stored | Shown |
|---|---|---|---|---|
| Name | Yes | Palladam Knitfab | Palladam Knitfab | Palladam Knitfab |
| Country | Yes | India | IN | IN |
| Category | Yes | Fabric | Fabric | Fabric |
| Lead time (days) | No | nothing | null | — |
| MOQ | No | nothing | null | — |
| Payment terms | No | nothing | null | — |
| Contact | No | nothing | null | — |
| Capacity (pcs/day) | No | nothing | null | — |
| Notes | No | nothing | null | — |
Six dashes on one screen. None of them is wrong. Each one is a question nobody has asked yet, and the app is being honest: it shows a dash instead of inventing an answer.
The maximum that cannot see a blank
Here is where the dash stops being cosmetic.
Riche Terre's style STY-127 is a yarn-dyed cotton shirt for Cazaubon Mode. Its bill of materials draws on three suppliers, and each supplier record carries its own lead time.
- Palladam Knitfab in India supplies the shirting. Lead time: blank.
- Beau Bassin Trims supplies buttons and interlining. Lead time: 12 days.
- Quatre Bornes Embroidery does the chest logo. Lead time: 10 days.
When an order is planned, the app walks the bill of materials, collects the suppliers behind it, and takes the longest lead time among them. The collection step has one guard:
if (s.leadTimeDays != null) leads.push(s.leadTimeDays);
if (leads.length) materialLeadDays = Math.max(...leads);A blank is skipped, not counted. So the longest material lead on STY-127 reads 12 days, the trim vendor's, because the mill's silence never entered the list.
The order runs on the seeded Woven Shirt / Blouse — 120 days template. Two of its milestones matter here. Bulk Fabric PO Confirmed sits at 102 working days before ex-factory, and Bulk Fabric In-House at 38. The runway the template allows for sourcing is the gap between them: 102 − 38 = 64 working days.
The app then adds a premium for imported material. All three of Riche Terre's suppliers are recorded outside Egypt, so all three count as imported and the premium is 14 days.
So the plan the app builds is this.
| Longest material lead | Plus imported premium | Template runway | Stretch added | |
|---|---|---|---|---|
| With the mill's lead time blank | 12 | 26 | 64 | 0 |
| With the mill's real lead time | 75 | 89 | 64 | 25 |
With the blank, the sourcing stretch is zero. Not small. Zero. The critical path says the template's own runway is plenty, and it says so with no warning at all, because as far as the arithmetic can see, nothing exceeded anything.
Kavi eventually rings Palladam and writes down the answer: 75 days for yarn-dyed shirting in bulk. Now the longest lead is 75, the effective lead is 75 + 14 = 89, and the stretch is 89 − 64 = 25 working days.
That stretch moves every milestone at or above its threshold earlier by the same 25 days. Four milestones sit at or above 102 on this template, so four move. Bulk Fabric PO Confirmed goes from 102 to 127 working days before ex-factory. Bulk Fabric In-House is at 38, below the threshold, so it does not move at all. The whole 25 days comes out of the sourcing runway, which is exactly the intent: 127 − 38 = 89, the real lead.
The honest version of the lesson
It is tempting to end here with "a blank is not a zero, and that is why the plan was wrong". Work the arithmetic and that is not quite true.
Suppose the app had read the blank as zero. The longest lead would then be the largest of 0, 12 and 10, which is still 12. Same answer, same missing stretch. Inside a maximum, absent and zero look alike, because neither one is ever the largest.
What the null actually buys you is not a different number. It is a dash on a screen. A zero looks like an answer somebody gave. A dash looks like a question nobody asked, and it is the only thing on the supplier page that can send Kavi to the telephone. Honest absence is worth having because it stays visible, not because it changes the sum.
There is a second sting worth naming. The supplier most likely to have a blank lead time is a mill you have never bought from. And a mill you have never bought from is the one most likely to be your longest lead. The gap is not spread evenly. It sits exactly where it does the most damage.
What a blank costs on a printed page
The Factory profile screen opens with Company identity and letterhead, twelve fields in three groups.
| Group | Field | Filled on 6 January |
|---|---|---|
| Company | Factory name (legal) | Yes — the only required field |
| Company | Address | Yes |
| Company | City | Yes |
| Company | Country | Yes |
| Company | Phone | No |
| Company | Yes | |
| Tax and registration | Commercial registration no. | No |
| Tax and registration | Tax / VAT registration no. | No |
| Beneficiary bank | Bank name | No |
| Beneficiary bank | Account name | No |
| Beneficiary bank | SWIFT / BIC | No |
| Beneficiary bank | IBAN / account no. | No |
Five filled, seven blank. Only the name is checked, so the screen saves happily.
Eight printed documents read this record: the order confirmation, the packing list, the cost sheet, the purchase request, the goods-received note, the material issue note, the production order and the measurement inspection report. Five of the eight print only the factory name. Three of them — the order confirmation, the cost sheet and the purchase request — print a full letterhead sub-line underneath it.
That sub-line is built by joining the parts that are present and dropping the rest.
[address, city, country, phone, email] → present parts joined by " · "
[CR + registration no., Tax/VAT + tax id] → present parts joined by " · "With Yashvin's five fields, the contact half prints four of its five parts and the tax half prints nothing at all. There is no gap, no placeholder, no red field. The document is simply shorter than it should be, and it looks finished.
A cost sheet without a tax registration number is a document a French buyer's accounts department will bounce. Nothing in the app will tell Yashvin that. The first person to notice is somebody in Paris, several weeks later, holding an order confirmation she cannot process.
Two rules to take away
A dash is a task, not a state. Every dash on a buyer or supplier record is somebody's unanswered question. Read the record as a list of questions and the dashes stop being invisible.
Ask what reads this field. A blank matters as much as whatever consumes it. A blank contact name costs an email. A blank lead time costs a critical path. A blank tax number costs a document a customs officer will reject. The field looks the same in all three cases. The consequences are not the same at all.
Check yourselfA supplier's lead time is blank and the same supplier's MOQ is set to 0. Which of the two is the app being honest about, and which one should worry you?Show the answer
Both are honest, and the zero should worry you more. The blank is stored as null and shown as a dash, which is a visible question. The zero is a real value someone typed, and it means this supplier has no minimum, which is a strong claim. If nobody meant to make that claim, a zero is a lie the screen cannot tell apart from a fact. A dash announces itself.
Prompt · Turn every dash on my master data into a question
Before a season starts, and any time a plan looks easier than the work feels.
Help me read my own master data as a list of unanswered questions rather than a list of records. I will paste, or describe: my factory identity fields and which ones are filled; my supplier list with each one's lead time, minimum order quantity, payment terms and capacity, marking clearly which are blank; and the bill of materials for one style I am about to plan. First, for every blank field, tell me what reads it later. Name the specific screen, document or calculation that consumes it, and say what that thing does when the field is empty. Distinguish three cases and label each one: the blank changes nothing, the blank makes something quietly shorter, and the blank makes a calculation silently wrong. Then do the lead-time arithmetic for the style I gave you. Take the longest recorded supplier lead among the materials on that bill, and tell me which suppliers were skipped because their lead time is blank. Ask me for each skipped supplier's real lead time. Recompute the longest, and tell me how many days the answer moved. Then ask whether the biggest mover was a supplier I have never bought from before. Three rules. Do not fill a blank with a typical figure, an industry average or a number from another supplier — write unknown and tell me who to ring. Do not treat a blank as a zero, and do not treat a zero as a blank; tell me plainly which of the two each field holds and what the difference would mean commercially. And where a field is blank on a printed document, tell me who first notices the omission and how long after the fact.
AI can make mistakes — check anything you act on.