"Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming."
[0] https://users.ece.utexas.edu/~adnan/pike.html
[1] https://news.ycombinator.com/item?id=24135189 (HN Discussion from 8/2020)
I agree 100%. Bottom up of the way to go if you're doing it without deadlines, requirements or investors with expectations looming over you.
Moreover, it is counter intuitive, too. The instinct of most juniors is to build foundations first and it took me a long time to learn to do the opposite.
Each layer serves as a customer for the layer above. If you havent figured out what the layer above needs precisely by building it you're probably going to provide the wrong thing to it in the layer underneath if you write it first.
It's also more resilient to requirements mistakes and requirements changes - it's easier to change course on a feature after showing a UI to a stakeholder if you didnt build the lower layers.