Location! e.g. You won't get salmon from small lake. I have not done thorough testing, but I'm near certain depletion is not implemented.
Good fishing spots, like real life, are closely guarded secrets. Some shorelines work great, namely rapids and rivers. Often, as well as IRL, fishing the 'drop' or edge-of-deep seems to have potential for good catch. In-game: next to where the gradual water depth graphics are set to darkest blue.
Fishing skill. Haul is dramatically more for 50% skill than 25%. 80%+ can go wandering with rod and not worry about starvation.
Fishing equipment. Nets are kings. Fishing rod can yield all types present at the location, depending on bait. Tridents produce medium-large fish. Wide>standard>small>spears>staves>clubs>rocks.
Standing with water spirits. All take and no give, will decrease good spots to ok, ok to meh, and meh spots to catchless. (like everything spirits related, there's only speculation outside the dev chambers) I'd wager a guess that your testing might've been skewed for that. If my character hits a dry spell and can't catch any fish, I'll stop fishing for few days to a week. First fish I catch (with a mod, cut up some chunks and single piece) will be sacrificed. Next fishing attempts generally produce fish again.
Remember that roasted fish becomes "land sacrifice", so leave those roaches and perches uncooked. Unless really starving.
I have the following in use, you can add it in any diy_xyz.txt file, not in cookery_xyz.txt
As there's no mechanism to retain the actual fishes nutritional values without cooking it, which would remove the small fish characteristic 'use the whole roach/perch as bait', all fish baits get nutritional values of perch. Takes 1 pound of fish, gives 4 pieces 1/4 each. So catching a single pike, you won't lose whole fish to sacrifice, but just a chunk. Keep 3 chunks for later baiting and most of the fish for roasting for supper.
.Cut fish bait. (4) "Perch" [effort:1] [phys:hands,arms] *COOKERY* /5/ |-2| [noquality] [patch:5]
{Knife}
{Raw fish} #1# [remove] [ask_num] [name:%s chunk] [patchwise]
[WEIGHT:0.25]
[TYPE:food]
[PRICE:0.07]
[SPOILAGE_DAYS:4]