Completely out of the blue one day a user named @Flash found that their account was broken. They could login, see a list of tweets, but their profile page was just, gone. Replaced with a 403 error page. Other users could at-mention them, but nobody could see his profile. Other elements randomly were broken as well. I can’t remember if @Flash filed a support request or if it was discovered internally but it was raised quickly for debugging because it was not expected.
After debugging for a bit we discovered what the problem was. We had launched a new Flash based twitter client for use on some embedded clients. This player was deployed as a .swf file that was copied to each server and then served via an Apache rule that mapped the directory on disk to /flash on the Twitter site.
And therein likes the problem. You see Twitter used a top level path as the
path for user profiles. To see a list of @liquidgecka’s profile and tweets
anybody could go to https://twitter.com/liquidgecka
. To see @Flash’s
profile and tweets anybody should have been able to go to
https://twitter.com/flash
except this wasn’t possible because that path
had been replaced with a directory containing the flash player. All other paths
that would normally have been required to serve @Flash’s profile had been
effectively removed.
This was the first time I experienced a conflict where a product path managed to override a users profile completely. It turns out that there were quite a few of these. All of this was caused by the desire to make user paths simple by putting them on the top level, but also not specifically making sure that room was left in the namespace for functionality that would be necessary over time.
You can still see some of the effects of these overlaid names if you look hard enough. For example there are still remnants of this left over. For example there is still a @settings user in the system and it was created in 2013, obscured by the settings page. At one point @topics was overlaid by the topics web page.
As some of the Twitter projects came and went this problem changed shape. The @Flash profile was lost and removed when I was there but eventually the flash product was removed, and with it the redirect. This allowed a new @Flash user to be created at that path. The @Topics user was created in 2011, overlaid by the Twitter Topics page which eventually was retired, returning the profile page to the user it overlaid.
The lesson to be learned here is simple. When defining your web space you should always look through were you will put your service URLs. Reddit got around this issue by putting users under a sub path (/u/) and subreddits under another (/r/). This gave them the space to have paths like /settings go to a settings page without conflict. Linked in uses /in/. Learn from Twitter’s mistakes and avoid putting user generated content at the top level of your web site.