@jos Having read your article and wanted to chime in for real blocks as well, but with one addition. I’ve stopped creating “real” blocks and try constantly to only need to create block variations with the needed custom functionality and UI on top.
Going that way has felt the best, to get the maximum use out of core, I don’t have to write all of the relevant pieces, but can instead and only in parts rely on Unittests, e2e tests, translations and stable components.