Tinyint is one bye, a maximum of 250 or so somethings. Smallint is 2 bytes, so 64,000 more somethings.
And, according to the manual the argument (9) only affects the number of characters displayed, which is useful for zeropadding and pretty printing. Is is exceedingly unlikely there will ever be 9 digits to display in a three digit number made up of eight bits. It's not much more likely that the 2 byte (16bit) number is ever going to need nine digits displayed either, but I was being conservative in the face of someone else's terrible code. And varchar[255] ? That allocates enough space for a 255 letter sentence no matter how long the entries are. This is really inefficient and silly.