I'd like to know that too
I guess a better static evaluation might help for sure
better move ordering as well (especially for quiets because trying better moves first makes them less likely to be over-reduced/pruned in LMR/LMP)
non-pv nodes (zero-width scout) is how we find better moves
we tend to prune/reduce a lot these days and everything adds up (nullmove in scout nodes etc)
plus the depth we store in TT doesn't actually truly correspond to what we actually searched, because the subtrees are higly asymmetric,
extend here, reduce there, prune there => what I mean by that is that depth n doesn't mean we've exhaustively searched n plies at a given node
a general observation I made is that the better current (pv) move is, the harder it is to find a better move (assuming there is one, of course)
sometimes luck plays a role too (this is especially true in SMP searches)
I've added Ed's IIR recently and got 15 elo is hyperbullet (which is very nice - thanks, Ed), but it severely hurts cheng's ability to solve some tactical positions.
I tried a ton of things to remedy this but all of them lose elo. it drives me crazy and I've already wasted a ton of processing power on this.
I think that the vast majority of positions engines search in engine-engine matches is non-tactical in the end; and we get elo from ideas that work most of the cases. (this is also why a new endgame knowledge typically adds little elo, because you don't get many positions where you can apply it)
EDIT: one small story about delta pruning in qs: I've removed it in 4.41 because it didn't play well with endgame knowledge, I've since added it back
but now I add extra "positional margin": I have current pst+material for free (update incrementally in makemove), so I add abs(eval - pst_mat_only)
as and extra delta pruning margin - this should cover things like ks or endgame knowledge. I wonder if I could use something similar
in futility pruning/razoring without losing elo (doesn't look like it so far
my two cents