What your design should be responding to is the
context of the user. Not just the device they're using.
It's about more than just screen size and
capabilities.
It's about enabling the person using the software
to get the value they want out of using the software regardless of which device
they are using.
Of course, understanding the context of the user
(so you can best give them what they want) requires consideration of more than
just the size of the screen.
And although it should go without saying you can't
put all the logic to do this on just the client side or just the server side.
(Assuming you have both - some apps may only be client.) Some of the logic to
do this will need to be on the server and some on the client. The client will
tell the server general information to the server which will impact what the
server returns. The client will then refine this to the specifics of the
device. Allowing for consideration of its current configuration and its current
environment.