We hid the field, and the 1 sentence describing it stayed
September 17, 2026 · Taro — Founder, KAZENA
I was working down the settings screen of a test account I had switched to Philippine books. There was 1 line of text: the faktur pajak number is 16 digits, enter it without hyphens. The field that sentence describes was nowhere on the screen. The field itself was correctly hidden. Only the sentence explaining it had stayed.
The country-by-country split was built in June, when we added the Philippines. The tax section of the settings screen has 4 items that are used only in Indonesia: the shape of the counterparty's number, the faktur pajak number, the serial for electronic invoices, and whether the business is registered as PKP. We gathered the conditions in 1 place, so that which item appears in which country can be read there and nowhere else. When we added it, we switched the account's country back and forth and watched all 4 appear and disappear.
So why did 1 sentence stay behind. That sentence was not a note attached to the input field. It was the introduction placed at the head of the section, and the section itself appears in both countries, because the tax section also holds items that have nothing to do with Indonesia. The condition was attached to the field, and not to the words. The fence ran just outside the field.
Here is what that 1 sentence makes a reader do. There are 2 readings. One is that the feature is broken: there is an explanation but no field, so something that ought to be there is missing. The other is heavier. The reader concludes that they are supposed to obtain such a number, and goes looking for a document that does not exist in their country. Some of them would call a tax office about it. Our 1 sentence spends that time for them.
On 15 September we counted every place where we split behaviour by country. There were 23 of them, across 11 screens. In 3 of those, explanatory words sat outside the condition. One was a note shown when there is no data yet. One was a small remark set beside an item. The last was the sentence I had found. Not a single field had leaked. Everything that had leaked was words.
Why this happens is visible in how the thing is built. The condition is written in the code. The wording lives in the translation files. The 2 are in different places, and when you open a translation file there is not 1 character in it about countries, only the same sentence lined up in 6 languages. The person writing it is not, at that moment, looking at which country it will appear in.
Here is the fix. We stopped putting a fixed string at the head of the section. It is now assembled from the items actually being shown in that section. On an account where not 1 Indonesian item is rendered, the introduction is not rendered either. That is: the sentence now knows whether the thing it describes is there.
We added a test as well. It renders the 11 screens under the settings of both countries we serve and checks that no forbidden term appears, which comes to 22 combinations. If the words faktur pajak or NPWP show up even once on a Philippine account's screen, it fails there. It checks the text, not the appearance. Checking by eye is right at the moment you do it, and gone by the next change.
This is the part I most want to keep. A fence has to enclose not only the feature but the sentences that speak about the feature. The note on an empty state, the remark beside an item, the text of an error, the faint example inside an input box, the name of a help link. Every one of them says that something exists. Remove the feature and leave those behind, and the screen goes on saying it exists.
We had thought that hiding the field was the whole job. We were looking at the screen as a collection of things you can operate. A real screen is also a collection of assertions. Just as much as what can be pressed, what is written says: in this country, this is what you need. People read before they press.
A menu on the wall of a warung will often still list a dish they stopped making months ago. You point at it and get back: habis. Whoever wrote it is not lying. When the dish went, nobody took the paper down. Our settings screen was doing exactly what that paper does.
For the avoidance of doubt: I am not a tax accountant. Which documents a country requires, and how many digits a number has, is decided on the regulatory side and it changes. What is written here is not an explanation of any tax system; it is a record of our forgetting to fence a sentence by country. Please confirm the actual procedures with a professional.
One request. If a screen in KAZENA shows you the name of a scheme or a document that does not exist in your country, please tell us. It means a sentence of ours has got outside its fence. Our tests can notice a field that failed to appear. That a sentence stayed behind is something only the person reading it can notice.
Tell us what you think
How the KAZENA apps feel to use, what we should fix, features you wish existed — if you run a small or medium business or work freelance in Indonesia or the Philippines, your voice is exactly what we want to hear. Messages in Bahasa Indonesia or English are answered by teammates who know your market from the inside. KAZENA Books is already set to launch in the Philippines and Indonesia — and if your company would like to bring it to other countries as a partner, or is interested in acquiring the system, we would love to hear from you too. We also take on new system development. We are a small team, so we cannot always start right away — but what we build carries made-in-Japan quality and stays close to how business really works here, one project at a time.
Get in touchMore from the blog
Cash went up but the month was in the red — why that happens
October 23, 2026 · Taro — Founder, KAZENA
Was last month profitable? Find out with 1 subtraction a month
October 18, 2026 · Taro — Founder, KAZENA
Keep the shop's money somewhere other than your own wallet
October 15, 2026 · Taro — Founder, KAZENA
