I am a big fan of developing an application in a way that I create a thin, working slice first, and then add the other functionalities to this slice one by one.
Yet, there is still a question about creating the original slice. Should I do it from the backend to the frontend, or the other way around (UI first)?
I prefer the second one, as it suits me better, but also, I think it’s better aligned with the original intention: To implement something visible – at that moment it is pretty much like a prototype – and then extending it backwards: adding the communication layer first, then the server side, then the database. (or just filling in the already created empty objects)
With a few notable exceptions, most of what we do must be visible for the/a user. Therefore, upfront UI development acts as a second layer of test driven development, with the developer as the testing framework.