Facebook投稿の引用

モバイル開発者にとってスケーラビリティとは何だろうか…という疑問をずっと前から持っていました。キャリアをLINEから始めましたが、グローバルでの数千万人のユーザーをカバーする経験をしてみたかったからです。ところで、実は、数千万人のトラフィックはサーバー開発者がカバーすべき仕事でした。少しがっかりしました。

サーバー開発者の場合は、どのくらいのトラフィックを処理してみたのかが技術力の目安となりますがモバイル開発者の場合は、100人が使うアプリを開発しても、100万人が使うアプリを開発しても大きな技術力の違いはなく、コードの違いもないと感じました。では、一体モバイルアプリでスケーラブルなコードやシステムを作るというのは何だろうかと思いました。

開発者の技術力が集約される部分はボトルネックが発生する区間でしょう。サーバーはユーザーが同時に1か所に集中するため、そこに負荷が発生し、この負荷を解決する技術力が価値のあるものです。ところでアプリはユーザーが多くてもアプリに負荷はかかりません。ユーザーがアプリに集まるのではなく、アプリがユーザーのドアの前までデリバリーされるからです。👇

では、一体モバイル開発者が解決すべきボトルネックはどこでしょうか。逆説的にモバイルアプリのボトルネックはユーザーではなく開発者によって発生するのではないかと思いました。 単一プログラムでデプロイされるアプリに、数多くの開発者がコードを詰め込む部分をボトルネックと見ることができるのではないかと思いました。👇

ユーザーが1,000人の時と数千万人の時のサーバーの構造とコードが異なるように、アプリの場合は開発者が3人の時と100人の時にコードの構造と開発環境は完全に異なる必要があることを実感しました。そうでなければ、ボトルネックの弊害が開発者自身にはもちろん、ユーザーにも転嫁し始めます。アプリの最初の実行時間(startup time)が増加し、アプリの容量が増え続けます。さらに、クラッシュが増加してユーザーの満足度が低下したり、次々と発生するサイドエフェクトのせいで毎日のようにホットフィックスをリリーズするかもしれません。また、ビルド時間が増えて開発者の生産性が低下し、ストレスのせいで生活の満足度が減少します。さらに、100人がマスターブランチにプッシュする状況では、QAを実施し、バグを修正して、アプリをリリーズすることさえ簡単なことではありません。誰はバグを修正してチェリーピックをする時に、誰かは自分が開発した機能のコードをプッシュしています。100人までいかなくても、10人を越えただけでも上記のような問題が少しずつ発生するのではないかと思います。

それで最近、私の疑問に対する答えの糸口を見つけたと思います。モバイル開発者にとってスケーラビリティとは、会社が成長してモバイルチームがますます大きくなっても、ユーザーエクスペリエンスと開発者エクスペリエンスの両方が悪化しないようにしながら、アプリは引き続き迅速かつ自信を持ってリリーズするのではないかと考えてみました。