
A good bowl of fish soup should taste of the sea. It should not smell like the back of a wet market at closing time. If you've ever wondered why fish soup tastes fishy, the cause is rarely the fish itself. It is usually how the fish was handled, how the bones were treated, or how hard the pot was pushed.
This guide is for anyone who cooks fish soup at home or wants to understand what they're tasting when they order it. It covers:

Fishiness is different from fish flavour. Fish flavour is clean and slightly sweet. Fishiness is sharp, sour and lingering.
Most of it comes from three sources. As fish ages, compounds in the flesh break down into trimethylamine, which carries the familiar "old fish" smell. Fish fats are delicate and oxidise easily, which adds stale, oily notes. Blood left in bones and trimmings turns bitter and metallic once heated. Each one is avoidable. None of them is fixed by adding more seasoning at the end.
This applies across styles. Whether you're eating your way through Singapore's clear fish soup scene or ordering a milky broth, the same rules hold. A rich broth can hide fishiness for a spoonful or two. It cannot hide it for a whole bowl.
Fish that has passed through many hands has spent more time out of the water and more time being moved. Every extra step is another chance for it to lose condition. That shows up in the pot.
Hup Lok is supplied by Hai Sia Seafood at Jurong Fishery Port, the family business now run by the founder's brother. Fewer hands sit between the fish and the bowl. That gives the kitchen more control over what goes into the broth. Control is the point.

Bones carry flavour, but they also carry blood. Bloodlines along the spine and any remaining gills are the usual culprits. Once heated, they cloud the broth and leave a bitter, metallic finish.
Cooks deal with this by cleaning bones thoroughly before they go into the pot. Rinsing away blood and removing anything that shouldn't be there is unglamorous work. It is also where a clean broth is won or lost.
Heat draws flavour out of bones. Too much of it draws out the wrong things.
A broth left at a hard, rolling boil for too long breaks down fats and overcooks the fish solids. That's when stale, oily notes creep in. Longer is not always better. Past a certain point, more time only adds more of what you don't want.
Our broth takes roughly an hour. The founder's father made his soup without a fixed written recipe. Chef Kee Leng, who is also a partner, balanced and refined it, setting the ratios, heat and timing so the kitchen can make the same bowl each service. The aim was never a long simmer. It was a broth that comes out clean every time.

The ingredients decide what the broth tastes of. Ours is made from batang bones simmered with chicken and tee poh, the dried sole fillet. The chicken adds a soft savoury base. The tee poh adds depth.
As the bones cook, collagen renders out and gives the broth its naturally milky ivory body. There is no evaporated milk and no shell or siput base. The soup is white because the bones give everything. Nothing is added to cover the fish.
Grandpa's Pomfret Soup, named in honour of the founder's father, is finished with generous pomfret slices and three traditional Teochew condiments:
These work best on a broth that is already clean. Ginger can sharpen good fish. It cannot rescue tired fish.

The founder's grandfather hawked fish at the foot of Fort Canning, a pole across his shoulders. The founder's father helped from boyhood and later ran his own stall. The trade grew through a small factory in Redhill into Hai Sia Seafood.
Three generations worked with fish before the first bowl was served. That knowledge of how fish should look, smell and taste sits behind Hup Lok's Teochew fish soup. The restaurant is new. The family's knowledge of fish is not.
Is a fishy smell a sign the fish is bad?
Not always, but it is a sign that something went wrong along the way. Age, blood in the bones and overcooking can all cause it.
Can a milky broth hide fishiness?
For a moment, perhaps. A well-made broth shouldn't need to. If you'd like to know how body is built without dairy, read our guide on rich fish soup without milk.
Does adding more ginger fix a fishy soup?
It helps a little. It doesn't remove the cause. Clean bones and controlled heat do more than any amount of ginger.
Fishiness comes from age, blood and too much heat. Clean bones, a controlled simmer, good ingredients and fewer hands between the fish and the bowl keep it out.
To taste a clean broth for yourself, visit Hup Lok on Havelock Road and order Grandpa's Pomfret Soup. Try a spoonful of broth before you add the ginger.