Since you just want to know the challenges and are not really concerned about "whether url shortening is a good thing" I will put one challenge here. I am sure there will be many more.<p>At a higher level there is nothing difficult. you have to only maintain a table with shortened code to actual url mapping and then use HTTP redirection requests to redirect the URL.
But what should be the length of that shortened code ?
Should it be fixed or variable ?
How do you generate that shortened code?
Can the same URL have different codes?
Should we generate the code based on some hash stuff (in such a case looking up for duplicates will be simple) or should we just increment the last generated code ?<p>Once this is done let us say we create a table in mysql with code => URL mapping. The able type is MyISAM which supports only table level locking<p>If there happen to more writes on table than reads. The read operation becomes slow. Hence the table type needs to be InnoDB which supports row level locking.<p>These issues might be corner issues but they do exist and sometimes they can matter as well.