Table of Contents
I'm a senior at the University of Washington, majoring in Computer Science. My department requirements have been done for awhile. Outside of general credit I still need to graduate, I also have remaining five more writing credits to fulfill. I kept putting these off because I couldn't find a class that covered a topic I was too enthusiastic to write about.
I was about to just take a random class and whip something out for credit when I met David Silver. A professor in the Communications Department at UW, David had recently taken an interest in LiveJournal.com, a project I'd been working on the past four years. Rather than wasting my time writing about some topic for which I had little passion, we agreed it would be much more interesting if I were to write about what I'd done and learned over the past four years working on my project. What follows is just that.
As I told David, I've been wanting to do this myself anyway. It's healthy to pause every once in awhile and reflect on what's happened and sort it all out. It's been four years and I haven't had much of a pause. I think this is the perfect opportunity to do this. Hopefully it'll be as interesting for others to read as it is for me to write.
What I'd like to share is all the interactions I've discovered between business, community, and technology.
I knew coming into this paper that there were many influences from each of the three areas upon the others, but it wasn't so painfully obvious until I started trying to outline a structure for this paper.
Any structure imposing a parallel grouping between the three areas was fraught with circular dependency problems: everything I wanted to say in one section would need to follow the other two. Certainly a better structure was needed.
What occurred to me was that the best format was probably chronological. A history would be needed anyway, so I might as well tell the whole thing as a story, sharing my experiences as they unfolded.
As such, the format is pretty much a history, with interludes into different topics as they're appropriate.
Before I delve into the history of LiveJournal and what I've learned from it, it'd probably be best to explain what LiveJournal is and where we are today. After that we can start from the beginning and see see how it became what it is.
LiveJournal is an "online community", "blog site/tool", or "syndication system", depending on who is asked and what buzzword is popular that month. In a nutshell, users can sign up to have their own online journal. What they write in their journal can be designated as either totally public, totally private, or restricted to certain friends.
What makes LiveJournal interesting is the high degree of interaction amongst its users. For example, users can designate other users as friends and view all their journal updates on their "friends page". From their friends page, they see all the recent posts by their friends and are able to read or write comments on any particular entry.
As of February 2002, LiveJournal has 480,000 users with 50 GB of data, run by 30 servers in 2 cabinets, utilizing about 20 Mbps of continuous bandwidth. Compared to the big boys, this isn't anything, but it seems like a lot for a project that all started somewhat accidentally.
The site started out entirely free for myself and my friends, but after a few thousand people using it bogging down my personal server, it was obvious I couldn't continue to foot the bill for more bandwidth and more servers. To fund ourselves, we started selling "paid accounts" for a few bucks per month that give buyers extra perks. About 18,500 users right now have paid accounts.
LiveJournal is run by a handful of paid part-time employees and hundreds of volunteers that help out across the board, from tech support to programming, and from web design to business management. The community basically runs the site.
As if the community running the site and people paying for the service isn't impressive enough, what's even more bizarre is users moving cross country to hook up with people they met on LiveJournal. Or a band writing a song about the site. Or LiveJournal regional communities throwing huge parties open to the whole city.
It's been said that LiveJournal is like a big cult. I guess that make me the cult leader, amusingly..
Table of Contents
I've been programming computers for quite awhile. I remember my dad teaching me Christmas Day of 1985, two months before my sixth birthday. After that, I didn't really stop. I found programming books at the local library after my dad had taught me everything he knew. My dad tells stories of me not being able to say "tutorial" and saying "valuables" instead of "variables".
In middle school, my friends and I made games and sold them to kids in the halls. I'd do the programming and they'd do the maps and graphics. Later I started doing contract work for various family friends, like porting some civil engineering software from DOS to Windows and teaching a lady and her husband, whom my mom had met at my brother's swimming lessons, how to use their new computer. 
Some time in 1993 I talked my dad into letting me use his credit card to sign up a free trial AOL account, after having seen a few of my friends using it. Prior to that, I was only on local dial-up bulletin board systems—not actually on The Internet. On a BBS one's interaction was limited to a few dozen locals. By any comparison, the Internet was incredibly more exciting.
It wasn't long before I found myself hating the gimmickiness and aggressively commercial nature of AOL and cancelled the trial account. I then convinced my parents to switch to Hevanet, a no-frills nothing-but-net local ISP. A friend of mine at school has been using Hevanet for awhile and I'd grown tired of him bragging about how cool it was.
With Hevanet I started learning HTML and the basics of Unix and made my first homepage. I quickly found that making a large site with a consistent look throughout was a pain to maintain: if I wanted to change the look of the site, I had to make that change on every single page. I hate doing repetitive things by hand.
About this time I started learning Perl, a programming language very well suited to text processing and web work. I hacked up a little system to let me keep my website content separate from my site template, and then merge them together by running a little Perl script. Now I could change the look of my website as often as I wanted.
So far, the only web work I'd done was static: all that was on the server was an HTML file that was sent to the remote user. The server did no computation and thus the number of interesting things I could do was very limited.
The summer of 1996, after my sophomore year of high school, I got an intership at Tektronix working on their corporate intranet. The coolest part of the job was that I was had access to a server which permitted running CGI scripts, code which is run server-side and then sent to the client. I remember the first day I wrote a CGI script there... it was so cool! The next morning I woke up and went into work hours early just to mess around with CGI on my own before I was given my first project. I had a blast all summer, writing tons of CGI scripts. My Perl skills and web skills in general improved a ton.
After my summer at Tektronix I was bored and needed a project. I needed my CGI fix! I setup a webserver on my home machine so I could develop CGI scripts. Unfortunately, it was running Microsoft Windows, which was a little restrictive. In the early days of the web everything was Unix, and Unix was what I'd become familiar with.
I decided to making a voting booth program. I wanted to put up some user polls on my website, and for that I'd need to run a program on the server to tally the votes and whatnot. Unfortunately, Hevanet still didn't allow running CGIs. I talked with them, though, and they agreed to put up CGI scripts I wrote after they quickly reviewed them. This is why small businesses are so great! There's no way AOL would've ever let me run CGIs on their servers, and I doubt anybody other than a small mom & pop ISP like Hevanet would've either, especially for the small price we were paying.
Initially I had to upload files which described the voting booths. There was no way to "create a new booth" over the web only. After awhile, some friends and regular visitors to my website wanted to use my script also. Unfortunately for them, most were on AOL or restrictive web hosts, so they couldn't run CGI scripts. I modified my script to let people create booths over the web with an admin password, and then they could modify it and link it on their website, all while running it off Hevanet's server.
It wasn't long before the voting booth script became popular. I remember graphing growth statistics and being amazed at the exponential growth. Lucky for me, though, I wasn't paying for the CPU usage or bandwidth consumption --- Hevanet was. So I just let it grow and didn't think much of it.
During the summer of 1997 I started working at a small company called ZCom doing web development. The company had several clients, the largest being a credit union for whom we were setting up online banking. Part of the fun of working at a small company is that there's a lot more responsibility handed out.
One day I was told to do something involving the database, but I'd never worked with a database before. I told my partner this, to which he replied, "Oh, it's easy. Here's a book." Over the next few weeks I became a database addict.
After developing the voting booth script for awhile I became frustrated with the slow change cycle. Everytime I wanted to modify something I had to send the new version to Hevanet for approval and wait a few days to see it go live. Often I'd then discover there was a bug because of a difference between how Perl runs on Windows versus Unix which I wasn't aware of.
Tiring of Hevanet babysitting me and with the taste of databases fresh in my mouth, I began craving my own server where I'd have full rein over everything. I wanted to run my own CGIs and I wanted to run my own database server. I also wanted my own domain name.
In July of 1997, I registered "bradfitz.com" and put it on my own "virtual server" at a small company named Virtualis operating out of Los Angeles. It was probably the smartest decision I ever made.
Shortly after moving my personal website content from Hevanet to bradfitz.com, I also put up the voting booth service on my new server, with the script at the old location redirecting everybody to its new address. One of the things I strongly believe in is never breaking links: if one moves a resource, it's that person's responsibility to maintain redirectors, if possible. To this day, I see doubly-indirected traffic flow from hevanet.com to bradfitz.com to freevote.com (mentioned later). I see this in the logs and smile, knowing I'm preserving a bit of sanity in the web's structure.
Now that I had my own domain name, I could finally run CGI scripts on my own without somebody else's review first. The first thing I did was convert my content/style separation system to run dynamically. Instead of running a program to merge all the site content with the site template whenever I changed either, my new system would merge the template and content as needed when the browser requested it. I named this new system BML, for "B" Markup Language, where the "B" stands for any or all of "Brad", "Block", and "Better". It's definitely better than doing work in HTML.
The coolest part of BML though was that it let me intermix live code in either the site template or the page content. For example, the frame of the page could have a random color, or it could log the number of visitors to that page, or it could say who was currently logged in. Anything dynamic was now possible, and incredibly easy.
Whenever I found myself writing the same web-related code a few times, I just added support for that into BML itself. The beefier BML became, the quicker I could write new web pages.
At this point I got fascinated with putting up as much useless dynamic stuff as possible. My personal bio listed my exact age, down to seconds. My inspiration for that was that I'd seen way too many outdated personal homepages, and I didn't trust myself to update my bio page once a year.
Other dynamic trinkets included a database of my friends, a view of my inbox, and a fan site for Slurpee lovers where users could submit Slurpee stories and Dos and Don'ts. The parent company of 7-11, Southland Corporation, even mentioned my site in their 30th anniversary of the Slurpee press release. To this day, I get tons of Slurpee visitors because my site ranks so high in all the search engines. A few hours after writing this paragraph I got this email:
Do they think I own 7-11? But I digress.
Date: Mon, 4 Mar 2002 19:50:25 -0600 (CST)
From: Roger Kidwellsr <XXXXXX@webtv.net>
Subject: slurpee 12oz. frozen beverage coupons (4)
I received the above coupons and they were
out of date when I received them. how do I get replacements?
So far, all the dynamic content that required storage (as opposed to things like my age in seconds) was stored using BML's built-in data record management system, which let me add/edit records from the web.
On November 23, 1997 I started keeping my "News of Brad" on the front of my site with this entry:
I didn't consider it a really prominent part of the site at the time, but rather just another dynamic trinket.
I got so much homework ... and college applications ... and chores. What a pain. *sigh* What does this mean to you, the bradfitz.com visitor? It means dat I ain't gettin' nuttin' done on this website today, at least till late... :(
Meanwhile, my voting booth script continued to grow in popularity. Since its original creation I'd become a lot better at Perl and I started to really hate the old ugly code. So, in November of 1998 I decided to rewrite the voting booth service and use BML. At the same time, I bought another domain name for the service: freevote.com. At the time domain name registrations were $100 for 2 years, and then $50/year thereafter. I wasn't all that excited about paying $100 for it, but at least this time around I didn't need to pay for a host... I could just put freevote.com on the same physical machine as my personal site.
Pretty soon, working on FreeVote was taking all of my free time. I was adding feature after feature, and having a blast in the process, learning more Perl, extending BML, and learning more about Unix and system administration.
Almost immediately after FreeVote's rewrite and availability to the public, I was getting calls from Virtualis sysadmins complaining that I had a run-away CGI script accidentally eating up CPU. What they didn't realize was that I just had a ton of visitors.
Over the next few months I went back and forth with Virtualis, fighting politely over my resource consumption. There were about 20 other users on the server I was on, and my voting booth script was killing the entire server all by itself. The other 20 users weren't all too pleased to have their sites not working. On the other hand, I wasn't even using all of what I'd paid for. Like airlines and so many industries, web hosts are notorious for overselling their resources.
For a month or so I worked with Virtualis continually, following different advice they gave me on how to make my code more behaved and run faster. Not all of their advice was good, but at least it made me aware of the whole class of problems related to writing high-performance web applications. I did a lot of reading on the subject during this time. It was working with FreeVote that I became aware of some of the most general web rules of thumb, like how a user doesn't expect a page to take any longer than two seconds to load. If it does, they figure something's messed up, or they clicked wrong accidentally, and they'll just click the link or button again, burdening the server down even more.
By this time, I knew most of the Virtualis staff. They were a small company at the time and I knew the president, the head sysadmin, the billing people, and my own personal assistant, Todd.
Todd wasn't officially my personal assistant, but for the first few months of his employeement at Virtualis, dealing with my killing of the "vs17" server was his sole responsibility. Through Todd, I learned even more about Unix. We'd chat online using IRC and I'd be logged in to the server with him, watching him using the "ytalk" program type Unix commands and fix my breakage.
Amusingly, it wasn't until a couple months later that I discovered Todd was my age. He'd been trying his best to act professional but over time he started slipping and I could tell through his word usage that he wasn't old at all.
After awhile I'd tuned FreeVote to the point where I couldn't make it any faster, and I started killing the shared server again. At this point my only choice was to upgrade to a more expensive package, which the Virtualis folks had been pushing me to do for months. Now, though, I finally agreed it was necessary. But how would I pay for it? I certainly didn't want to foot the bill myself. This was just a hobby, afterall. Hobbies are more fun when they're closer to free.
At this point, the problem was as such: The site was growing so fast that my only choices were to shut it down, or pay money to put it on a faster server. Leaving it on its existing server was worse than either option, because then I'd be effectively shutting it down and still paying money. It just couldn't run any longer on its existing server.
I really didn't want to shut it down, though. This was my new pet project, after all, and I was having fun with it.
In August of 1998 I made the painful decision to stop accepting new booth creations and lock all existing booths until people sent me a postcard with their voting booth's address on it.
The rationale was that I wanted to keep it free (the site was FreeVote.com, afterall), but I didn't have the resources at the time for everybody who wanted to use it. I figured that the act of finding a 50 cent postcard and a 17 cent stamp would be enough to weed out those who really wanted to use the site, and those which were merely lazy freeloaders that didn't understand my daily struggle maintaining the service.
For three months hundreds and hundreds of postcards poured in. The mailman would deliver bundles of them wrapped in rubber bands daily. And then my mom and I would laboriously enter them into the computer, one by one.
This was also one of the first times I realized just how stupid users can be. Although the directions on the site specifically said the one necessary piece of information to put on the postcard, a huge percentage of people forgot it, instead telling me at length how much they loved the site and how they'd appreciate it if I reactivated their unnamed booth. Perhaps they they expected me to look them up by name, but we didn't even collect that information and they should've known that.
At this point in time, other sites on the web had already started putting up banner ads. I hated the things, but I was getting sick of all the work required to process postcards and wanted to get back to the site running itself with little work.
A friend of Todd's said he interested in advertising on FreeVote, so I ran his ads. They were for some magic tanning cream and featured some half-naked girl on a beach. A lot of people clicked them, but nobody bought the product. In the early days of the web, people actually clicked ads. Their eyes and brain hadn't yet become accustomed to silently tuning them out. Because I was getting paid from Todd's friends by CPC (cost per click) and not CPM (cost per thousand views), I was happy enough. In the end I made a few hundred dollars and he made nothing.
 On a total tangent, I found out last year that he shot her on accident and burned her in a barrel in his backyard. The neighbors complained of the smell and he's now in jail. But at least he knows how to get around MS-DOS.
 I was born Feb. 5th, 1980, 6:32 pm, Iowa time.
 By comparison, nowadays the cost is around $15/year.
 FreeBSD 2.1, to be exact
 Internet Relay Chat; one of the oldest chat system on the Internet.
Table of Contents
After my first quarter at college, I went back home to Portland in December of 1998 for Christmas with the family. Under the tree for me was a copy of the latest Microsoft Developer Studio. I hadn't done much Windows programming in several years, and it's good to keep one's skills current, so this is exactly what I wanted. In fact, I had told my parents I wanted it, so it wasn't much of a surprise. In any case, I had new tools to learn, so I needed a new project.
I decided to make my "News of Brad" journal a more prominent part of my website. As it was, I was only using it periodically.
I realized that even with BML's content management system, updating my journal ("News of Brad") was still too much of a pain. Adding a new entry involved opening a web browser, going to the admin area (via a bookmark), typing or confirming my password, and then typing the news entry.
What I really wanted was a desktop program that could run in my Windows system tray. I could just double-click it, type my entry, and submit.
I'd done some Windows programming on and off for various people, but I'd never done anything that combined both web/CGI work and Windows programming.
To be honest, I just wanted the challenge --- and a project to waste some time. Plus, I just like making tools. Anything that helps people be more lazy is a good thing. Of course, laziness means different things to different people. To me, being lazy means being efficient. I don't want to do the same task five times in a row. Instead, I'd rather spend twice as much time writing a tool that let me in the future do the task in the minimum possible time. Even if the task is a one-time thing and I could've done it twice as fast without writing the tool, at least the act of writing the tool is both more interesting and more educational. There's nothing fun or educational about doing a boring task the fifth time around.
I worked on it a lot during Christmas, but spent most of my time working on FreeVote things. It wasn't until March 18th of 1999 that I got it working with this entry:
For lack of anything more interesting, I named my project "bradlog". Updating my journal was now easy.
this is a test. assuming everything goes correctly, i can just enter text in this program on my desktop machine, update the database on my server, and my website will show my event log
It wasn't long after I started using bradlog that my friend Eli from the dorms wanted a copy to run on his own website. Of course, my version wasn't designed to be used by multiple people, so I just made a copy of my code, changed a few things, then installed it on his computer.
The problem with Eli having a copy was that everytime I made a change, he wanted a new copy with the newest features. His version was slightly different to work with his web host (the school servers), whereas my copy interacted with my own server. In the software world, this is known as a "fork". Forks of code are generally bad because improvements and security fixes in one have to be manually applied to both, and sometimes are forgotten in either version.
On April 4th of 1999 Eli posted his first entry:
14 minutes later he posted again:
Cool, Check out the What-is-Eli-doing log that brad just programmed for me. Now you'll be able to know exactly what I'm doing and when I'm doing it
The service's addictive nature and mass of utterly personal and useless information started in full swing.
my toe is all infected and it smells like ass
After seeing how much fun Eli and I were having fun posting 15-30 times per day, I registered the domain "livejournal.com" on April 15th. The word "live" was meant to signify "up-to-date, current", as opposed "living, breathing", but both are interesting interpretations. I didn't put anything there right away, as I still hadn't made the code usable to others like I had for FreeVote years earlier, but I had plans to do so. FreeVote was consuming all my time, though, not to mention 16 credits of college coursework.
On the third of March 2000, after a few days of intense work, I opened LiveJournal.com to the public and mailed some friends to try it out. It was running on my personal server, along with bradfitz.com and freevote.com. At the time, the service was very no-frills. I just took the existing code I'd used for Eli and myself and made a signup form so anybody could start using it.
Before long, most my high school friends and a large percentage of students on our floor at college were using it. This is about the time where I became so addicted to the site myself. The lives of everybody else on the floor were so interesting and varied. It was also a good way to learn and understand better the people I'd been living amongst for the past few months.
After going live, I kept adding fun stuff to the site.
Once all my close friends were using LiveJournal, it was suddenly a chore to keep up on reading them all. With ten friends updating with different frequencies, there were ten pages I had to continually check. Some people updated hourly, some daily, and some weekly. It was hard to guess at any given time who had probably updated.
At first, there were only three ways to view a person's journal: the recent entries view, the calendar view, and the day view. Soon after I added the "friends view", which showed all the most recent entries from people designated as friends, all on one page intermixed. Now there was only one page to check and I could just leave it open all day, reloading every so often to see if there was anything new.
After the friends view page, I added the feature that let users upload little pictures to represent themselves. The motivation here was simply that it was hard to quickly skim the friends page and distinguish who had wrote what.
It wasn't even 24 hours from putting up that feature when I got a frantic call from my mother, angry about my friend Erik's user picture. I checked it out and sure enough, Erik had decided to represent his journal not with a picture of himself, but rather with a close-up shot of a rather taboo part of the female anatomy. He thought it was funny; my mom didn't. I realized afterwards that if my friend of all people could abuse the feature in such a way, surely others would also in the future. The following day I added a field in the database that flagged each user picture as either "new", "offensive", or "okay". The idea was that all user pictures would be tagged as "new" until somebody got around to approving them one way or the other. I never got around to doing that, but the field remains in the database to this day.
On March 31st of 2000 I was sitting around with my roommate reading people's journals and he said something like, "Wouldn't that be great if you could make fun of people's journal entries?" I went to a class right after that, thought about the idea of a comment system a bit, then went to the computer lab for my two hour break before my next class and implemented it.
After the comment system was in place, LiveJournal was the medium for my friends and me to interact online. Our floor in the dorms had a mailing list we had used prior, but after everybody was on LiveJournal, nobody really used the mailing list anymore. LiveJournal was just such a cooler medium.
One thing that comes with any sufficiently large group of people is idiots. The larger the group of people, the more idiots, and FreeVote was getting more than its share. Voting booths with topics like "Who's the biggest slut in Mrs. Janeson's 4th grade class?" were becoming all too common. One can imagine that parents weren't all too pleased to have not only their child's first and last names on the Internet, but to also have them listed in such a context.
In April of 2000, I hired two friends from college to manage FreeVote's abuse department. FreeVote didn't have a lot of money, but Eli and Erik didn't have much in the way of expenses, outside of DVDs and alcohol. It worked out pretty well. Because I was living in the dorms, I had all official things sent to my home address where my mom would deposit the checks into my bank account, and also write the checks for the employees.
One month I thought it'd be funny to start awarding somebody the "Employee of the Month" like one sees at Burger King and such. I told my mom to put a Post-It note on their checks that said "Employee of the Month!". They were amused. I'm such a good boss.
The suntan cream guy didn't want to advertise with us after awhile. He reasoned that FreeVote had the wrong target audience. I don't think he ever realized that his product was just lame.
In need of money again, I contacted a company named ValueClick and signed up with their advertsing outsourcing program. They handled all the hard work: serving the ads, tracking the statistics, finding the advertisers, etc. All I had to do was put some code on my site and collect checks once a month.
And it was literally that easy! In February of 2000 I received the first check, and after awhile I was receiving checks of around $10,000 monthly. Because FreeVote had no legal corporate entity, all this money just went into my personal bank account. I bought a car and a ton of DVDs. I was loving this whole Internet thing.
Despite the abuse team's best efforts, abuse continued to happen at full speed. Just as fast as we shut down inappropriate voting topics, new ones popped right back up. We were starting to get lawsuit threats. If I were sued, not only would I lose FreeVote's assets, but I'd lose my own as well. As such, my mom looked into finding some lawyers to set up a corporation for me, so FreeVote's money was legally separate from my own.
In August of 1999 we started working together with the insanely overpriced lawyers that liked to slowly chit-chat too much and by the 27th of the month had bradfitz.com, inc. officially registered in the state of Oregon.
I decided on the name bradfitz.com, inc. for a number of reasons. Foremost, I didn't want the company to be specific to FreeVote. I still had royalties coming in for the civil engineering software I'd ported and I was doing miscellaneous contract work now and then. I also told the laywers that I had another website idea that I wanted to work on more in the future, and I'd want to use the same company for both, to make things easier. When they asked about it, I explained briefly while my mom sat on the other side of the table repeating what a stupid idea it was, and how nobody would write about their public life online.
With both FreeVote and LiveJournal, I've noticed a number of things about growing a site.
The most important thing to realize is that not everybody is the same when it comes to technical competence. The total newbies and the total geeks are on opposite sides of the spectrum and both groups need to be addressed individually.
The challenge with targetting both groups is that the geeks shouldn't be insulted, and the AOL crowd shouldn't be confused, the latter of which is much easier to do. What I've ended up doing is making the site at first glance targetted towards the masses, with a little link for "Developers" that leads to a wealth of geeky information.
Getting the support of the geeks is incredibly important. Once a geek knows the site admins are geek friendly, they're incredibly supportive in a number of ways. First of all, they'll use the site. Geeks won't use a product or service that insults their intelligence. Second, they'll bring their friends, some of which will be more geeks, and some of which will be average users. Again, this is why it's important to have a site address both groups. Most companies find it easiest to only target the average users, since they're by far the largest group. The problem with that, though, is that those companies spend a lot of their money on marketing, rather than growing naturally (and freely) by word of mouth. Growing by word of mouth requires targetting the geeks, since the geeks are the brave ones that experiment with new technologies. The average users wait until it's widely accepted that a new technology or website is cool.
Later in the open source section I'll explain how geeks are the most helpful.
So many websites and services in general make the mistake of not being interesting unless everybody is using it, and assume everybody will immediately see the value of the service and start using it at once. The example I like to use is a web-based lost & found pet service. If everybody knew about it, and it was free, and there weren't a dozen competing versions, it'd be incredibly popular. It'd be the site to go when one lost or found a pet. But if only a small percentage of the population even knows about it, it's next to worthless.
Cellular phones, on the other hand, are a good example of a transitional technology. If cell phones were only able to call other cell phones, they would've never taken off. But because the early adopters of cell phones were able to call regular numbers also, the phones had value right from the beginning.
LiveJournal had value right from the beginning, since most people just wanted to keep their own journal online and possibly embed it into their own website. The new features added value when one's friends also used the site, so that encouraged users to recruit their friends to join. This is largely analogous to how people try to recruit their friends to use the same cell phone service so they can use the special features that only work between subscribers on the same network, like text messaging and two-way radio.
Table of Contents
FreeVote.com's business model was simple. I made a lot of money off ads. Because the site had a lot of traffic, a lot of people were interested in buying the site and using it just a vehicle for their own ads.
In January of 2000 I received an email from a Korean company that was interested in buying FreeVote.com for a half million in cash. Compared to a lot of the stock deals that were happening, I was amazed. I didn't want anything to hinder a possible sale, so I had FreeVote.com setup as a separate company, distinct from bradfitz.com, inc. I dealt with the Koreans for a few weeks but in the end rejected their offer, since they wouldn't add a clause to the contract saying they wouldn't put up pop-up banner ads which had started to become common, which I hated. In retrospect, I should've taken the money and run, but I can justify it all as a big learning experience.
FreeVote's users kept getting both stupider and more abusive, and I just didn't have much interest in the project anymore. But I continued to run it because it brought in a fair amount of money that I could then use to pay myself with and then turn around and loan to LiveJournal's company. My mom did (and continues to do) all my accounting.
Around June of 2000, it was becoming obvious that LiveJournal needed new servers. It was running more poorly by the day, and users were getting angry. To be honest, I've never really cared much when users I don't know complain about the speed of the site. The thing that motivates me to improve the state of things is my own friends and people I respect having problems using the site, in which case the site's poor performance reflects poorly on me as a programmer. Ever since I started doing web service work, I've envied programmers that could perfect a product, release it, and be done with it. Running continually growing web services, one's work is never done. Every day there is a new performance problem, it seems.
In need of a revenue model for LiveJournal, I started putting up some ads on the very bottom of some pages on the site. To get good click-thru ratings, an ad really needs to be at the top of the page, but I couldn't bring myself to do it. LiveJournal was my new love and I wasn't about to put ugly ads all over it.
Not wanting to see the ads myself, I added a field in the database whereby I could disable ads for any given user. I turned ads off for myself and for all my friends. I wanted to still be able to use the site without going crazy, and I also wanted to make money from it. Within a day or so I realized the better business opportunity there was now: I could sell accounts without banner ads.
On the 25th of June I started selling accounts at $25/year, $15 for 6 months, or $5 for 2 months. People always ask me if a lot of thought went into the pricing. I just guessed what fellow college students would be willing to pay. They were the primary users, so I had to think what sort of money they had available. I'm sure they were all spending way more than $2.50 on beer and condoms, so the price seemed fair enough. It's better to price something too low than too high, especially given that our costs were next to nothing.
On the first day of sales, we made $495. By the end of the month we'd made $580. The next month we made only $250, followed by $305 in August. Given that the servers we were saving up for were around $7,000, this was pretty slow progress.
In July I implemented shared journals, whereby a number of different people could post in the same journal while retaining their individual identity. The motiviation was that I wanted to post in the news journal as myself, not as an opaque "site news" user. That's just too impersonal. On the 17th I posted for the first time in the news journal as myself.After that I started using it more often to communicate with the users on the state of things.
On the August 26th I wrote a plea for help post to the community, explaining how we needed money for servers and help in dozens of area on the site, from system admininstration to development to support. The response was incredible with offers of help coming in left and right.
In September the service continued going downhill in terms of usability. I set an ambitious goal to sell 2-3 paid accounts/day, figuring that's what it would take to both afford new servers and bandwidth. $1,500/month would be a five-fold improvement over previous months. The problem was, begging for money only works for so long. There existed only a fixed percentage of the userbase which had seen the site working well at one point to trust me enough to turn things around given the necessary capital. Few people want to hand over money for a broken service.
I'd figured that we needed a 1% paying userbase to afford the servers and monthly cabinet and bandwidth fees. Given that less than a half percent of users click banner ads, I thought this goal was impossible.
To make paid accounts more worthwhile, I came out with a bunch of ideas for features that would be exclusive to paid users. These included an email address at livejournal, a subdomain URL (http://username.livejournal.com/), multiple userpics, text messaging, and then a few other things which to this day remain "on the drawing board".
The other big thing I did on the 16th of September was put ads on all pages of free users' journals, not just their comment pages as it had been before. This by itself was probably the large stimulus for a lot of people to pay.
However, the most popular existing feature was customizing the appearance of journals by modifying the HTML, and making different styles. With this, users could embed their journal into their website, hiding the fact that LiveJournal powers it entirely. I wanted to make this a paid-user only feature, but I couldn't take it away from the existing 15,374 users.
So, on the 13th of September user "maltor" came up with the idea of an "Early Adopter" account level between a free user and paid user. Early Adopters would retain all their existing features but not have access to the paid ones. All new accounts created after that time would be "Free users" and not have access to create new styles and embed their journals.
All in all, this plan has worked wonderfully. The only problem is that users often think "Early Adopter" is relative to the size and age of the site. That is, they think that at a certain point, they themselves will become an early adopter and gain more features.
At various points I've been tempted to grandfather the existing free userbase into yet another account class and cut off functionality for the even newer users, but I've resisted. Not only does it needlessly over-complicate things, but it's just never a good idea to take away something free and then charge for it. However, if something's a for-cost feature from the beginning, there's a surprisingly small amount of complaining from free users that it's not available.
Together, the change to actually give paid users extra features and the change to make new users get less to begin with, the site started making money.
In October we picked out our first two servers with help from another user that had good contacts at Dell. Alongside that, I worked with another LiveJournal user who worked at Speakeasy, an ISP downtown Seattle, which did a minimal amount of colocation (in which customers park their servers in the company's facility). We'd originally wanted to host our new machines at Internap, but it was just too expensive, and it required signing a year contract. I didn't have that much optimism. Since Speakeasy's net connection was through Internap and Speakeasy charged month-to-month, we went with them instead.
By November our servers still hadn't arrived and the site kept performing poorer by the day, despite the optimizations I was making to the code. Users started complaining that we'd spent all the money on "cocaine, hookers, and laxatives". I wrote a news post assuring them that wasn't the case and we were just waiting for Dell. As it turns out, Dell had accidentally shipped our machines to Delaware, or wherever on the east coast the user that had helped set us up lived. Soon after learning of the mistake I let the community know and found out something interesting: if one get something in the mail, that person legally owns it and has no obligation to return it to the confused company. Dell must have known this and offered to overnight rush ship the servers from the east coast to Seattle. Given the size and weight of the packages, the shipping must have cost hundreds, but it was better than Dell eating their $7,000+ mistake.
Table of Contents
One of the wisest things I did when starting LiveJournal was making the developer section and making public a lot of information about LiveJournal's inner workings. Perhaps the most critical pieces I made public first of all was the client/server protocol details, so programmmers could make their own clients to communicate with the LiveJournal servers. Geeks will almost always write their own client even without documentation just by reverse engineering the protocol. But by providing the information right out, development is much quicker. By providing that documentation, LiveJournal now has clients for pretty much every known operating system and environment there is.
Erik, the one that did FreeVote abuse, used to eat dinner with me in the dorms and bring along his high school friend Evan. Evan is even geekier than I, and took up quite an initial interest in LiveJournal. At that time no Unix client existed, so he used the information on the site and wrote his own. The cool thing about his client is that after he announced it to a few of the different Unix software sites in March of 2000, the site got a lot of new attention and suddenly we had a bunch of new geek users, who brought with them even more friends, more clients, and more attention.
The protocol details were only a small part, though. The most exciting thing was when I started releasing the code for the entire site on March 5th, 2001.
The motivation for releasing the source to the public was two-fold. On the selfish side of things, I thought that hundreds of people working on the site would get more done than me alone. On the more altruistic side, though, was the rewarding feeling of giving something back. All of LiveJournal was already built on open source tools so although we weren't obliged, it felt natural to make LiveJournal itself open source.
Every reason I could think of not to release the source just kept turning into a reason to do it.
People were concerned that LiveJournal clones would start up and steal the userbase away from LiveJournal. But that didn't concern me because I knew the code best, and anything the competition could implement we could also. Competition is good. Open sourcing the code would force me to compete both with others and make the product better as a result.
I was concerned the code was incredibly ugly and non-generic and would be mocked. In fact, it was, but the reality is that most code out there is, and other people were used to it. Once the source was opened, I spent the next several months separating the generic code that anybody could use from the additions and site-specific stuff that LiveJournal.com used, working on the install system, and writing documentation. In the meantime, I got tons of wonderful patches to entire subsystems in the code from people that were playing with the server on their own machines and needed something abstracted cleaner. The code just kept getting better, to the point where I'm incredibly proud of it today.
A problem I've found with open source is that one spends a lot of effort inviting people to try out the code and give feedback, all the while making it easier to use and install, such that pretty soon a bunch of people that probably shouldn't be helping are trying to. And then one has to politely tell those less experienced developers to go away or read some manuals. Or what happens more often is that I just end up walking them through it, explaining it step by step, thus eating up a lot of my time where I could've been working. A number of these people mature into wonderful programmers and contributors, though, so it's not entirely bad. It's just a constant struggle to bet on who will be worthwhile to help and who has to be ignored or told to go away.
Yet another problem is that people who aren't getting paid and have real lives can't be relied on. If I have ten upcoming projects and people volunteer to do a few of them, they usually don't get done, or don't get done by the time I need them to move on to another project which depends on them. But I don't want to go ahead and do them myself, because that's a slap in the face to the person that said they were going to do it. If I continually do things myself, those volunteers won't be inclined to help in the future. I've gotten better at this, though. The trick is telling people when you need it by, and why. If they understand the importance and what it's holding up, they'll either get it done quicker, or admit they don't have the time. Very few people have the time they pretend to, or they underestimate how long projects will take.
One way that contributors make projects take less time is by not testing their work, and sending me broken and fundamentally flawed changes. When that happens I can either explain why it's wrong, and wait for them to fix it, or just rewrite it myself. Again, it's the education investment versus productivity today conflict.
There are a ton of incredibly smart and helpful people out there. Take advantage of it. There are also a lot of people out there that are annoying and not-so-smart, sometimes it even seems like they're in the majority. Try to ignore them. The idiots are always the vocal ones. The helpful people that are vocal are few and far between (because most of them are too busy), but they're there, and there are a lot of them. Assume everybody's smart and helpful to begin with; don't assume everybody's like the vocal idiots.
People hate companies. I know I do. Be honest about what's going on, why things are being changed, why things require payment. If people associate people and issues with the company instead of faceless money-hungry suits, they'll be much more supportive. Again, this all goes back to assuming people aren't dumb. People can generally understand business and technology issues, if they're explained clearly. Sometimes this takes more time to do, but it's worth it. People will have more respect for the organization.
One can't just make a large community overnight. It takes time for people to find and get to know each other. The trick is just getting all the tools there to facilitate the natural growth of a community. Take advantage of existing communities. For instance, by making LiveJournal open source, suddently LiveJournal was a part of that community and a lot of them started using the site.
Table of Contents
Chronology — dates of major events with links to first mention in text
Table 1. Dates
|1985-12-25||Learn to program|
|1993||Internet access; personal web page|
|1996-06||Tektronix internship, learn CGI|
|1997-06||Z/Com job, learn about databases|
|1997-07-21||Register domain bradfitz.com, work on BML|
|1997-11-23||"News of Brad" starts (beginning of LiveJournal)|
|1998-06||Intel job. More database/perl.|
|1998-08||Postcard registration to limit freevote usage|
|1998-11-19||Register domain freevote.com, rewrite in BML|
|1998-12||Start working on journal server & Windows client|
|1999-03-18||First post using journal system|
|1999-04-04||Eli starts using journal system|
|1999-04-15||Register domain livejournal.com|
|1999-05-03||LiveJournal open to the public|
|1999-06||Another summer at Intel|
|1999-08-27||Incorporate bradfitz.com, inc.|
|2000-01-11||FreeVote offer; Incorporate freevote.com, inc.|
|2000-02-02||First checks to Eli & Erik for FreeVote abuse department|
|2000-02-10||First check from ValueClick for FreeVote advertising|
|2000-03-31||LiveJournal's comment system is created|
|2000-06||LiveJournal shows ads on bottom of some pages|
|2000-06-25||LiveJournal starts selling paid accounts without ads|
|2000-09-13||Idea for paid accounts with bonus features; early adopters|
|2000-11-13||Buy Kenny & Cartman for LiveJournal; move into Speakeasy|
|2001-01-25||Buy Stan & Kyle for LiveJournal|
|2001-03-05||LiveJournal goes Open Source|