Not sure if that was a question with all the !!! after it, but...
Use the smallest data types for the data. If something will be 20 characters, use varchar(20). If it might be up to 250 characters, use a varchar(250). Yes, you could make everything varchar(8000), but why would you unless going for the lazy approach of 'I don't care what goes in this variable'?
Data lengths are partial documentation, if I see a varchar(20) parameter, I don't have to worry whether there's maybe 5600 characters in it, there aren't, there are 20. They're a form of constraint, someone accidentally passes 75 characters and they get an error instead of SQL blindly accepting the incorrect data and possibly breaking elsewhere.
Varchar(8000) everywhere is lazy coding, when I see it it tells me that the developer couldn't be bothered to do a proper job and just went with the quick approach.
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
We walk in the dark places no others will enter
We stand on the bridge and no one may pass