システムデザイン形式とは、システム設計に特化したドローイングツールを用いて、アプリケーションのシステムを設計する問題です。
候補者のシステム設計力、インフラの基礎的な知識などを測ることが出来ます。
Googleはなぜシステムデザインをインタビューに取り入れるのか
インフラエンジニアでもない、一般的なソフトウェアエンジニアに対してもシステムデザイン形式を出題することがほとんどです。システムデザインに関する問題はコーディングの問題に比べて、比較的自由度が高く、回答するために様々なスキルが必要になります。
- 問題の前提を擦り合わせる:
「Google Drive を設計してください」というお題があった時に、どれくらいのユーザーがいるのか、どの国からアクセスがあるのか、要件に制約はあるのか、など様々な前提が重要となります。それにより、システムの範囲と制約を明確にすることができます。 - 明確な質問をする:
設計しているシステムの要件と優先順位について面接官に尋ねます。インタビューは黙々とこなすタスクではなく、面接官とのコミュニケーションを図ることも重要です。 - トレードオフについて説明する:
システム設計においてさまざまなコンポーネントが、互いにどのように関連しているかについて理解していることを示します。CAP定理に代表されるトレードオフを理解して設計しているかは非常に重要な観点でしょう。
システムデザインが重要な理由
システムを作るということはエンドユーザーが存在し、利用されている間はシステムダウンさせることなく、サービスを稼働させていくことが重要となります。その根幹にあるのがシステムデザインです。システムデザインは様々なコンポーネントの理解(メリット・デメリット)と設計時のトレードオフを理解していることが重要です。
実際にシステムを設計する時にはいくつかの観点で考える必要があります。
- 要件を満たす設計にできるか
システムがパフォーマンス、信頼性、スケーラビリティ、保守性などの特定の要件を満たすようにするために必要です。正しい設計をしないと、システムが意図したとおりに機能せず、パフォーマンスの問題、ダウンタイム、またはその他の問題が発生する可能性があります。 - 相互運用性を担保することができるか
システムのさまざまなコンポーネントがシームレスに連携するようにするには、システム設計が重要です。システム設計者は、明確なインターフェイスとプロトコルを定義することで、コンポーネントが相互に通信し、必要に応じてデータを共有できるようにすることができます。 - リスクを軽減できるか
システム設計は、システム障害、セキュリティ、およびその他の問題に関連するリスクを軽減するのに役立ちます。潜在的なリスクと脆弱性を特定することにより、システム設計者は、これらのリスクを軽減し、発生した問題の影響を最小限に抑えるための設計をします。 - メンテナンスを容易にできるか
システム設計は、システムの寿命全体にわたるメンテナンスとアップグレードを容易にするのに役立ちます。スケーラビリティと柔軟性を念頭に置いてシステムを設計することで、システムアーキテクトは必要に応じてコンポーネントのアップグレードや新機能の追加を容易に行うことができます。
割と自由度が高いために候補者とのコミュニケーションを測るためライブコーディングで実施する企業も多い問題形式です。