A milky sliced fish soup starts with frying, not boiling. Fry batang bones or a fish head hard in oil, pour boiling water over, and keep the pot on a strong boil for twenty minutes: the fat and the rolling water turn the broth white. The batang slices only go in at the very end, and evaporated milk is a finish, not a requirement.
The usual problem. The broth comes out thin and grey, the fish slices break into shreds the moment you stir, and the whole pot tastes flat next to the hawker version. None of that needs a secret ingredient. It needs oil, real heat, and a gentler hand with the fish.
The milky broth trick
White broth is an emulsion. Fat from fried bones gets beaten into the stock by a hard boil, and the liquid turns cloudy, then creamy. No frying means no fat to work with. No hard boil means no emulsion. That is the whole trick, and it is why a politely simmered pot stays grey no matter how long you give it.
- Heat three tablespoons of oil in the soup pot. Fry batang bones, head or trimmings with four slices of ginger until the edges brown and the bottom of the pot catches a little colour, about five minutes.
- Pour in 1.5 litres of boiling water straight from the kettle. Boiling water onto hot fried bones is what kicks the emulsion off. Cold water here undoes the work.
- Boil hard, uncovered, for twenty to thirty minutes. Skim off any dark foam and leave the white.
- Strain, pressing on the bones to get everything out. Season with salt and a small knob of rock sugar.
No bones in the freezer? A handful of ikan bilis fried in the same oil does a similar job, though batang bones give the cleanest, sweetest result. Frozen batang steaks with the bone in are the easy answer: the middle bone and trim build the broth, the flesh becomes your slices.
Keeping frozen batang slices intact
Batang, the Spanish mackerel, is the classic fish soup fish because its flesh is firm and mild. Frozen slices hold together in the pot as long as you treat them cold, dry and late.
- Thaw fully in the chiller overnight, or sealed in ice water if dinner is close.1 Feel for ice crystals before you cook: a half-frozen slice cooks unevenly and cracks apart.2
- Pat each slice very dry, then salt lightly ten minutes ahead. A dry, lightly salted slice firms up and stays in one piece.
- Slide the slices into the strained broth at a gentle simmer, one at a time. Do not stir for the first thirty seconds. The surface needs that time to set.
- They are done in sixty to ninety seconds, when the flesh turns white all the way through. Kill the fire. The slices finish cooking in the bowl.
The armour trick, if you want the fried-fish version: dust the dried slices in cornflour and dip them in hot oil for twenty seconds before they meet the soup. Slices treated this way barely break even when stirred, and taste like the fried option at the stall.
The evaporated milk question, settled
Two camps run Singapore’s fish soup stalls. One builds all the milkiness from fried bones and a hard boil. The other rounds the bowl off with a pour of evaporated milk. Both are legitimate, and they solve different problems.
If your broth boiled white, milk is polish: two or three tablespoons per bowl adds body and softens the salt. If your broth stayed thin because the bones were few or the boil was shy, milk is the rescue. What it cannot do is add flavour. Milk into weak broth makes weak milky broth. So settle it this way: build the broth as if milk did not exist, then add it at the table if you like it richer. One more rule: never boil the soup hard after the milk goes in, or it can split.
Building the bowl
Work in this order once the broth is hot and strained. Everything after the fish happens off the fire, in the bowl.
- Tomato wedges and a few slices of bittergourd into the broth two minutes before the fish.
- The fish slices next, then fire off, as above.
- Evaporated milk now if you take it.
- Finish with fried shallots, a spoon of shallot oil, white pepper, spring onion, and sliced chilli in light soy on the side.
- Underneath: rice, thick beehoon, or nothing but the soup.
That is the whole hawker bowl: white broth from fried bones, slices that went in late and came out whole, and milk exactly where it belongs, at the end, by choice. Once you have the rhythm down, the whole pot is a twenty-minute cook after thawing, which makes it a real weeknight dinner and not a weekend project.
Slices that survive the soup
Good frozen batang goes in late and comes out whole. The broth does the rest.
- Singapore Food Agency, Guidelines on Thawing of Food (updated 27 Sep 2024): “Frozen food should therefore not be left to thaw at room temperature, to prevent food poisoning bacteria that may be present from multiplying to high levels.” The same introduction names the fast method: “Frozen food can also be thawed by submerging in ice water, with frequent change of water and it must be sealed in a clean leak-proof package or container.” sfa.gov.sg (PDF, p.1) ↩︎
- SFA, same guidelines: “Check for ice crystals in the food using your hand or a skewer. If food is not fully thawed, continue to thaw the food until no ice crystals are present. Test again before cooking or reheating.” sfa.gov.sg (PDF, p.1) ↩︎





