Metro was a wonderful design for the media player app it was made for. It's great for menu-heavy interactions, not so much for representing stateful things like options and checkboxes and such. Metro isn't the problem, it's trying to shoehorn UIs into it regardless of fit that is.
I don’t agree, but that’s design, people have different opinions. I actually like the Ribbon interface, would have liked it more if they added a search box to it as well but designers hate search boxes.
I don't think there is such a thing as perfect UX and I'm not asking for it. I just want them to stop making it worse.
Seriously tho, why isn't this something that a browser can do? Why can't I just split a tab and say all links from the left tab open in the right? Why not be able to scroll through history as a list of such panes like a smalltalk browser or file explorer on a mac? Maybe even a history tree, able to be forked with a click or two. Tree-style tabs are a baby step toward that, but I'm not seeing much interest out there in actually learning how to run.
Autotools was designed to produce a configure script with zero dependencies other than the compiler toolchain itself. I always thought it would be a good way to bootstrap a system configuration database (like the kind X11 already had, the name I forget) but it turned out to be too convenient to just drop autotools into every project instead.
So now even today, compiling any GNU package means probing every last feature from scratch and spitting out obscenely rococo scripts and Makefiles tens of thousands of lines long. We can do better, and have, but damn are there a lot of active codebases out there that still haven't caught up.
Doing everything in one reduce step sounds to me like the opposite of "easy to reason about". Reduce is a powerful tool that everyone should know, but you don't always want to wield the most powerful tool, especially if you're after intermediate values like the OP is.
The whole point of composable things like chains is that it's trivial to split them out into intermediate variables if you like. Or into other functions -- which JS's syntax makes slightly more annoying, but you can still depend on the semantics not changing from being moved around.
So if you like intermediate variables, great. I like them too. I also like having the option of chaining where it's necessary or just more expressive. Writing composable APIs means everyone wins.
reply