Building Chess.com: Part 5 - Like Building a House
- 3,279 Reads
- 16 Comments
I learned a very important lesson about how to build websites when I purchased my first home a few years ago! My wife and I bought a home from a private builder while it was stil in the middle of construction. The foundations were done, the wood frames were up, and most of the electrical and plumming was finished. But there was still a lot of work left. We were very anxious to have the house completed on time so that we time our rental agreement and mortgage papers perfectly. So time was urgent. At the same time, this was our first home, and I wanted it to be perfect.
Frequently I would come and visit the home to check the progress. I would come in and see that work was "completed" in one room and they had moved on. So I would look at the "finished" room, and I would find a huge list of problems. The wood trim doesn't finish perfectly in that corner, the paint bled onto the window frame, there is a small bump in the carpet over here, etc. I would feel so irritated about it that I would make them stop working on the other room to come back and finish that other room "perfectly". This happened over and over, and the deadline to move in came and went and I was frustrated, the builder was frustrated, and the situation was terrible.
The builder finally explained to me something I haven't forgotten: the 80/20 rule. Basically, 80% of the value can be created with 20% of the effort. The remaining 20% of value is created with 80% of the effort. In context of the house, you get it "almost there" with regular effort, but to make it perfect takes a disproportionately large amount of time.
This rule is especially true in web development! Let's say it take 200 hours to build a basic new feature. That basic new feature will satisfy 80% of the people. Then somebody comes along and says "why don't you do this!?". Then we have to calculate how large of an impact that will make and how long it will take. Some of them are obvious to do: they are quick and they have huge impact. Others take a HUGE amount of time to do, and will only affect a small number of people. For example: people said the forums needed better navigation tools to track what had been read and what had not. Calculation: that will take 30 hours to do and will benefit almost everyone on the site in a big way. Ok - let's do it. Another example: some people have asked for greasemonkey scripts for move notification. Calculation: it will take an unknown number of hours (because we don't have experience in this - maybe 20 hours??) and it will benefit less than 1% of the people on this site. Then we have to think: we have limited time and resources - should we spend those 20 hours on greasemonkey scripts (which IS a good idea!), or should we spend those 20 hours on getting Live Chess done? And so we choose to put all of these great suggestions and ideas on the "future projects list" while we work on the big stuff like Live Chess and other things we can do to create huge value with less resources.
If I had been smarter when working with my home builder I would have quietly made a list of things that needed to be touched up or refined and then had those things done AFTER we moved in. This site is no different! We could have waited and waited and worked on the site until we thought it was perfect and then opened it up to the public... some time in the year 2010! But instead we have opened it up to you in an unfinished state. Many things are missing and still need to be done. But we hope that you will decide to move in and make Chess.com your home anyway, despite the paint drips on the window and the missing dishwasher :)
There is one other interesting thing about this analogy: with a website you can build features that work perfectly in a small test environment, but you never know how they will work out when you have thousands of people simultaneously using it. Yesterday we released some new code and a new little feature where you see a hand moving a chesspiece in the header near your name if you have a waiting game. Seems simple enough, but that query (a query is a little piece of code that searches the database) that looks for your next ready game wasn't fully optimized and the effect was that thousands of people were on the site and the servers were totally maxed out just running that silly little query. That little piece of code was causing the entire site to buckle and act like a horse stuck in mud. It was something we just couldn't predict.
Anyway, the point of all this is that we are working hard to make Chess.com every chess players' home and while were working hard and doing our best, things won't be perfect and we hope you will understand when our site acts up for a few hours, and you will forgive us when the feature you suggest ends up being sacrificed so we can work on something different.
p.s. We hit 25,000 members yesterday! Wow!