Twitter Tales: Sorry @Flash

Published: March 12, 2024
This article is part of ‘Twitter Tales’, a series that describes some of the amusing, impressive or just plain crazy things that happened during the early days at Twitter, as written by those that worked there at the time.
Author picture of Brady Catherman
Brady Catherman
Sultan of Scale

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.

Twitter @settings user

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.


Copyright 2016 - 2024