For some strings, there are real world (or application) limits on number of characters.
Fields holding ISO codes, EAN numbers, etc, will always have their set length and nothing else.
But for other fields, like names, streets, product code, etc, we usually use (N)VARCHAR(X) where X is a well chosen number, enough to hold data.
Sometimes the designer is wrong or new requirements or changes in the world leads to X needing to be extended.
Perhaps originally NVARCHAR(32) was chosen for a name field, but then business moved into a new country and suddenly truncations appear :-)
Is there any drawbacks to always using (N)VARCHAR(MAX), when there is no definite max lenght?
Why not chose NVARCHAR(MAX) for "lastname" instead of NVARCHAR(128) for example..?