Joshua Schachter(del.icio.us)による大規模アプリケーション構築の注意点

del.icio.us/tag/del.icio.usを眺めていたらFlickrのときみたいに面白い資料を見つけたの紹介します。
Things to look out for when building a large application.というタイトルでサーバーサイドの管理等の話が中心かと思って読んでいたらそれ以外のインターフェース、実装すべき機能、spam対策、アプリケーションを如何に広めるかといった話にも触れていて面白いです。

以下にまとめてみました。

スケーリング

早期の最適化を避ける。SQLでスケーリングするのではなく、データを複数マシンに分散させる方法を考慮すべき。SQLプロファイリング重要。Nagiosがお勧め。

タグはSQLと相性がよくない。インデックシングの仕組みを理解し、その方針を決定する。最初の数ページに限定すれば小規模で高速なインデックスを保てる。

Apacheを学ぼう。チューニングによってかなりの高速化が可能。特にヘッダ、mod_rewrite.フロントエンドにはPerlbalのようなProxyを設置する。

Spam, Cracking

あなたのシステムはgreasemonkey, scraping等によって常に悪用される可能性がある。修正作業を実行する前にそれによってどこに影響(デグレ)があるか確認すること。

ユニークID(php?id=1等)を晒さない。scrapingが助長されてしまう。del.icio.usでlinkにMD5ハッシュを採用しているのはこれが理由である。

"Spamは注目泥棒"。del.icio.usでTop 10を採用しないのはこれが原因。これは魅力的だが同時に厄介者である。

spam行為者を発見しても彼等に知らせずにPOSTは許可し、システム側でそれを黙って廃棄する。

機能実装

機能を持たないことも機能である。他のシステムで代用可能ならその機能は不要である。メールやメッセージング機能はdel.icio.usには不要である。

新機能を求められた場合、それをそのまま実装するのではなくその新機能が求められた原因を解明せよ。例えば"A and B and NOT C or D"のようなタグ機能を求められるが、複数タグクエリは全体の1%にも満ない。

問題は自分の力で解決することで理解が深まる。

注力するところを見極める。誰も使わない機能に時間を費やさない。

システムを熱心に評価する。"直感"やユーザ要求は二の次。del.icio.usはスター機能を持たないが、よくないものをブックマークするはずがないので不要である。

ユーザ受け入れテストは重要。システムは実際にユーザが使うもの向けに調整する。チームのメンバは全員これを確認すべき。研究室は高いからスタバあたりでテストしよう。

インターフェース

URLやパスは良く考えて決定する。ユーザに関係ない、システム固有(.php, .aspx, ?, &)のものは排除する。

集約されたデータ(最新、注目等)は注目を浴びるが、利用者の増加と共に偏見が生まれる。コミュニティのオリジナルメンバーにとってはdel.icio.us/popularはそれ程面白くない。注意が異なるエリアに向くように解決する。

Taggingはユーザインターフェースの大事な部分。利用者はタグを元に情報を思い出す。思いだしやすく、発見できるもの。見つけられないものは意味がない。自動Tagging機能はユーザがどこに保存したかわからなくなってしまう。del.icio.usの"add to del.icio.us"バッジでtagサジェストしないのはこれが理由。del.icio.usの特徴は"attention"。自動Taggingはこれを無効化する。

ユーザの作業量を最小にする。

ユーザの言葉を使う。"ブックマーク"はNetscape,Firefoxの言葉だがブラウザシェアNo.1のIEは"お気に入り"である。

ユーザの行動を促がすときは動詞を使う。

あなたのシステムが従来のものと異なっていても出来るだけ一般的なwebデザインパターンを採用すべきである。

API, RSS、ユーザデータ

APIは簡単にすること。SOAPは駄目。APIキーを採用しないことでより開発者への広まりが促進される。

設置可能ならどこでもRSSを設置する。del.icio.usではHTMLやAPIよりもアクセスが多い。

データはあなたのものではない。ユーザのもの。ユーザが削除したいと思ったら確実に削除できなければならない。

システム普及

ニッチな製品でも広告、paypalで成功するだろう。

何らかの原因でサーバ停止している間にもユーザ獲得のチャンスを失っている。早急に解決すること。

ユーザが実際に興味を持つまで登録させない。匿名アカウントを用意すれば一通り遊んでくれるだろう。ユーザは登録後にシステムがどのような情報を持つか気にする。ユーザはスパイウェアにemailアドレスが知られることを恐れる。あなたはそれを提示しなければならない。

システムを普及させる伝染触媒を理解する。RSSによってそのシステムを直接使用しないユーザも獲得できる。その他のHTTP上のデータ(iCal,M3U等)も考慮してみるべき。

"del.icio.us最悪"という評価はユーザを獲得できないことよりも恐ろしいもの。不要な機能は付けない。