メインコンテンツへスキップ

エンジニアリングの原則

素早く出荷し、さらに素早く学ぶ

イテレーションスピードを最適化します。本番環境にある機能は、何週間もの計画より多くを教えてくれます。フィーチャーフラグを広範に使用して安全に出荷し、素早くロールバックします。

実際には、小さなPR、継続的デプロイ、行動へのバイアスを意味します。2つのアプローチの間で議論しているなら、1つを出荷して測定します。実際のユーザーデータは理論的な議論に勝ります。

コードは負債

コードのすべての行は保守が必要なものです。コードを書くより削除する方を好みます。コードを書く場合は、できる限りシンプルにしますが、それ以上シンプルにはしません。

トラッキングスクリプトはすべてのバイトのために戦うため5KB未満です。依存関係を追加する前に「より少ないコードで自分たちでできるか?」と問います。通常、答えはYesです。

テストはドキュメント

良いテストは意図を説明します。実装ではなく、振る舞いを説明するテストを書きます。テストが壊れた時には、正確に何が問題だったかを教えてくれるべきです。

単体テストよりも統合テストに集中します。実際のユーザーフローのハッピーパスをテストすることで、すべての関数呼び出しをモックするよりも多くのバグをキャッチできます。

パフォーマンスは機能

スピードは後から考えるものではありません。初日からパフォーマンスを測定し、バジェットを設定し、リグレッションをバグとして扱います。トラッキングスクリプトはすべてのバイトが重要なため5KB未満に保ちます。

エッジデプロイ、遅延ロード、積極的なキャッシングがデフォルトです。すべてのAPIエンドポイントにはレイテンシーバジェットがあります。リクエストが100msを超える場合は調査します。

デフォルトでのセキュリティ

後からセキュリティを追加しません。認証、認可、データ保護はすべての機能に最初から組み込まれています。侵害を想定して設計します。

データベースレイヤーのRow Level Securityにより、侵害されたAPIでもアクセスすべきでないデータにアクセスできません。入力バリデーションはリクエストがバックエンドに届く前にエッジで行われます。

製品機能としてのプライバシー

プライバシーはコンプライアンスではありません—それは競争上の優位性です。必要のないものは収集しません。デフォルトで匿名化します。ユーザーにデータの制御権を与えます。

privacy regulationsやその他の規制が変わっても、最大限のプライバシーのために設計済みなので、通常は何もする必要がありません。