ボトルネック #04:コスト効率

急増するクラウドとマネージドサービスのコストが顧客成長を上回っている

2023年8月17日


Photo of Sofia Tania

タニアは、Thoughtworksのエンジニア兼エンジニアリングリーダー、デジタル・スケールアップ・グループのテクニカル・スケーリング・サブジェクト・マター・エキスパート、そしてテクノロジーレーダーを作成するThoughtworksテクノロジー諮問委員会のメンバーです。テクノロジーのゼネラリストとして、詳細な分析と全体像の把握の両方を楽しみ、常にクライアントの成功のために尽力しています。タニアは、さまざまな規模と業種の企業向けに、データ製品とプラットフォーム、バックエンドAPI、インフラストラクチャプラットフォームに取り組むチームを率いてきました。また、組織のテクノロジー戦略策定も支援してきました。

Photo of Stefania Stefansdottir

ステファニアは、Thoughtworksのテクニカルプリンシパル、ソフトウェアアーキテクト、コンサルタントです。主に最新のデジタルプラットフォーム、データ製品とプラットフォームの提供、複雑な組織および技術的問題に関するコンサルティングに焦点を当て、さまざまなセクターで勤務してきました。


すべてのスタートアップの道のりは独特であり、成功への道は決して一直線ではありませんが、コストはあらゆるビジネスにおいて、特に経済低迷時には常に重要な要素です。スタートアップでは、実験段階やトラクション獲得段階から、高度成長段階や最適化段階に移行する際に、コストに関する議論が変化します。最初の2つの段階では、スタートアップはリーンかつ迅速に運営してプロダクトマーケットフィットを実現する必要がありますが、後の段階では、運用効率の重要性が徐々に高まります。

コスト効率の達成と維持に向けて企業の考え方を転換させることは、非常に困難です。新しいものを構築することに熱心なスタートアップのエンジニアにとって、コスト最適化は通常、魅力的なトピックではありません。これらの理由から、コスト効率は技術的負債の蓄積と同様に、スタートアップの成長過程のある時点でボトルネックになることがよくあります。

どのようにボトルネックに陥ったのか?

資金が限られているスタートアップの初期の実験段階では、創業者によるブートストラップ型かシード投資による支援かに関わらず、一般的に、資金が尽きる前に市場でのトラクション獲得に重点が置かれます。チームは、製品を迅速に市場に出せるソリューションを選択することで、収益を上げ、ユーザーを満足させ、競合他社を凌駕することができます。

これらの段階では、コスト効率の低さは許容できるトレードオフです。エンジニアは、SaaSプロバイダーとの契約締結の手間を省くために、迅速なカスタムコードを選択する場合があります。もはや不要になったインフラストラクチャコンポーネントのクリーンアップを優先順位を下げたり、組織が20名規模で誰もがすべてを知っているためリソースにタグ付けを行わない場合もあります。迅速な市場投入が最優先事項です。結局のところ、プロダクトマーケットフィットが実現しなければ、スタートアップは明日には存在しなくなる可能性があります。

製品で成功を収め、急成長フェーズに達すると、それ以前の決定が企業を傷つける可能性があります。トラフィックが急増すると、クラウドコストは予想をはるかに超えて急増します。マネージャーは、企業のクラウドコストが高いことを認識していますが、原因を特定し、チームをその状況から脱却させることが困難な場合があります。

この時点で、コストがビジネスのボトルネックになり始めています。CFOが気づき、エンジニアリングチームは厳しい監視を受けています。同時に、次の資金調達ラウンドに向けて、妥当な売上原価(COGS)を示す必要があります。

初期の決定が間違っていたわけではありません。製品の市場でのトラクションが不明な場合、完全にスケーラブルでコスト効率の高い製品を作成することは適切な優先事項ではありません。コストが問題になり始めた時点で重要なのは、コストを削減し同時に企業文化を変革して改善された運用コスト効率を維持する方法です。これらの変更により、スタートアップの継続的な成長が保証されます。

スケーリングのボトルネックに近づいている兆候

コストの可視性と帰属の欠如

企業が複数のサービスプロバイダー(クラウド、SaaS、開発ツールなど)を使用する場合、これらのサービスの使用状況とコストデータは、異なるシステムに存在します。サービス、製品、またはチームの総テクノロジーコストを理解するには、これらのデータをさまざまなソースから取得し、コストをその製品または機能セットに関連付ける必要があります。

これらのコストレポート(クラウド課金レポートなど)は、圧倒される可能性があります。これらを統合して簡単に理解できるようにすることは、かなりの労力を要します。適切なクラウドインフラストラクチャのタグ付け規則がない場合、サービスレベルまたはチームレベルでコストを適切に特定の集計に帰属させることは不可能です。しかし、このレベルの会計上の明確性が有効にならない限り、チームはコストへの影響を完全に理解せずに運営せざるを得なくなります。

エンジニアリングソリューションにおけるコスト考慮の不足

エンジニアは、エンジニアリング上の意思決定を行う際に、さまざまな要因(機能要件と非機能要件(パフォーマンス、スケーラビリティ、セキュリティなど))を考慮します。しかし、コストは常に考慮されるわけではありません。前述のように、その理由の一部は、開発チームがコストに関する可視性を欠いているためです。場合によっては、テクノロジー環境の一部のコストに関する妥当な可視性を持っている場合でも、コストは重要な考慮事項と認識されていないか、他のチームの問題と見なされる可能性があります。

この問題の兆候としては、設計文書/RFC/ADRにコストに関する考慮事項が不足していること、またはエンジニアリングマネージャーが製品のコストがスケールとともにどのように変化するかを示すことができるかどうかなどがあります。

自社開発の差別化されない機能

企業は、オープンソースか商用かに関わらず、サードパーティツールと機能が大きく重複するカスタムツールを維持している場合があります。これは、カスタムツールがサードパーティソリューションよりも前に存在していたためである可能性があります(例:Kubernetesが登場する前のカスタムコンテナオーケストレーションツール)。また、成熟した外部ツールによって提供される機能のサブセットを実装するための初期の簡単な回避策から発展した可能性もあります。時間の経過とともに、その初期の回避策を段階的に構築するという個々の決定が、チームを外部ツールを利用する可能性があった転換点を超えて導いてしまいます。

長期的に見ると、このような自社開発システムの総保有コストは法外になる可能性があります。自社開発システムは通常、開始は非常に簡単ですが、習得は非常に困難です。

複数のツールにおける重複機能/ツールの乱立

同じ目的、あるいは少なくとも重複する目的を持つ複数のツール(例:複数のCI/CDパイプラインツールやAPIオブザーバビリティツール)を持つことは、自然にコスト効率の低下につながります。舗装された道がなく、各チームが自律的に技術スタックを選択しており、企業によって既にライセンス供与されているか、優先されているツールを選択していない場合によく発生します。

マネージドサービスの非効率的な契約構造

SMS/メール、オブザーバビリティ、決済、承認など、差別化されない機能にマネージドサービスを選択することで、スタートアップが製品を迅速に市場に投入し、運用上の複雑さを抑制する取り組みを大きく支援できます。

マネージドサービスプロバイダーは、サービスに対して魅力的な—安価または無料の—スタータープランを提供することがよくあります。しかし、これらの価格モデルは、予想以上に迅速に高額になる可能性があります。安価なスタータープランはさておき、最初に交渉された価格モデルは、スタートアップの現在または将来の利用状況に適していない可能性があります。少数の顧客とエンジニアを持つ小規模組織で機能していたものが、それらの数の5倍または10倍に成長すると高額になる可能性があります。企業がスケーリングの目標を達成するにつれて、マネージドサービスのユーザーあたりのコスト(従業員または顧客のどちらか)が上昇する傾向は、効率の低下を示しています。

規模の経済効果が得られない

あらゆるアーキテクチャにおいて、コストはリクエスト数、トランザクション数、製品を使用するユーザー数、またはそれらの組み合わせと相関関係があります。製品が市場でのトラクションを獲得し成熟するにつれて、企業は規模の経済効果を得て、ユーザーベースとトラフィックの増加に伴い、ユーザーまたはリクエストあたりの平均コスト(単位コスト)を削減することを期待します。企業が規模の経済効果を達成することに苦労している場合、単位コストは逆に増加します。

図1:規模の経済効果が得られない:単位コストの増加

注:この例図では、時間とともに単位(リクエスト、トランザクション、ユーザー)が増加していることを意味しています。

どのようにボトルネックから脱却するか?

スケールアップを最適化する場合、私たちのチームにとって通常のシナリオは、企業が上記の兆候を監視することによって、またはそれが明白であること(計画された予算が完全に超過していたこと)によってボトルネックに気づいていることです。これにより、コスト効率を改善するための取り組みが開始されます。私たちのチームは、削減フェーズと維持フェーズという2つのフェーズを中心にこの取り組みを組織化することを好みます。

削減フェーズは、短期的な成果—「出血を止める」ことに重点を置いています。これを行うには、複数の専門分野からなるコスト最適化チームを結成する必要があります。最適化できるものについてのアイデアはあるかもしれませんが、実際に理解するためにさらに深く掘り下げる必要があります。初期の機会分析の後、チームはアプローチを定義し、影響と努力に基づいて優先順位を付け、最適化します。

削減フェーズでの短期的な成果の後、適切に実行された維持フェーズは、スタートアップが将来再びこの問題を抱えないように、最適化されたコストレベルを維持するために不可欠です。これをサポートするために、企業の運用モデルと慣行は、コストに関する説明責任と所有権を向上させるように適応され、製品およびプラットフォームチームが最適化を継続するために必要なツールと情報が提供されます。

削減と維持の段階的アプローチを説明するために、最近の費用最適化の取り組みについて説明します。

事例研究:Databricks のコスト最適化

お客様から、コストが予想以上に増加しているという連絡がありました。既にDatabricksのコストが主要なコスト要因として特定されており、データインフラストラクチャのコスト最適化支援を依頼されました。緊急度は高く、増加するコストが他の予算項目を圧迫し、さらに増加傾向にあったためです。

初期分析後、迅速にコスト最適化チームを編成し、選択したベースラインに対して約25%のコスト削減を目標に設定しました。

「削減」フェーズ

Databricksを重点領域として、コストに影響を与え、管理できるあらゆる方法を列挙しました。高いレベルでは、Databricksのコストは、基盤となるコンピューティング能力に対してクラウドプロバイダーに支払う仮想マシンコストと、Databricksに支払うコスト(Databricks Unit cost / DBU)から構成されます。

これらのコストカテゴリそれぞれに独自の調整策があります。たとえば、DBUコストは、クラスタの種類(エフェメラルジョブクラスタは安価)、購入コミットメント(Databricks Commit Units / DBCU)、またはそこで実行されるワークロードの実行時間の最適化などによって変化します。

「昨日コストを削減する」という課題を負っていたため、迅速な成果を探しました。コストへの潜在的な影響と努力レベルに基づいて、これらの調整策の優先順位を付けました。データパイプラインの変換ロジックは各製品チームが所有しており、私たちのワーキンググループはそれを十分に把握していなかったため、クラスタのサイズ変更、適切な場所でのエフェメラルクラスタの使用、Photonランタイムの実験などのインフラストラクチャレベルの変更は、変換ロジックの最適化と比較して、努力レベルの見積もりが低かったです。

私たちは容易に達成できるものから実行を開始し、各製品チームと協力しました。進捗状況に応じて、コストへの影響を2週間ごとに監視し、コストへの影響予測が維持されているかどうか、または優先順位を調整する必要があるかどうかを確認しました。

節約額は積み上がっていきました。数ヶ月後、選択したベースラインに対して、月間の費用削減目標である約25%を上回りました。

「維持」フェーズ

しかし、他の最適化対象領域に注意を向けたときに、最適化された領域のコスト削減効果が再び増加することを望んでいませんでした。講じた対策によってコストは削減されましたが、低い支出を維持するには継続的な注意が必要でした。なぜなら、重大なリスクがあったからです。すべてのエンジニアがDatabricksワークスペース管理者であり、自由にクラスタ構成を作成することができ、チームはワークスペースのコストを監視していませんでした。また、それらのコストについて責任を負っていませんでした。

これに対処するために、アクセス制御の強化と、コストに関する意識と説明責任の向上という2つのことを行うことにしました。

アクセス制御を強化するために、必要な人物のみに管理アクセスを制限しました。また、Databricksクラスタポリシーを使用して、エンジニアが選択できるクラスタ構成オプションを制限しました。エンジニアがクラスタに変更を加えることを許可しつつ、選択肢を妥当な範囲に制限することで、過剰プロビジョニングを最小限に抑え、コストを管理することを目指しました。

コストに関する意識と説明責任を向上させるために、特定の月のコストが、そのワークスペースの事前に設定されたしきい値を超えた場合に、対応するワークスペースの所有者に予算アラートを送信するように構成しました。

両方のフェーズは、目標の達成と維持に不可欠でした。削減フェーズで達成したコスト削減効果は、完全に新しいワークロードを除いて、数ヶ月間安定していました。

削減フェーズ

エンジニアが個々のチーム内で個別にコスト最適化を急ぐ前に、クロスファンクショナルなチームを編成してコスト最適化の取り組みの分析と実行を主導することが最善です。通常、スタートアップ企業のコスト効率は、プラットフォームエンジニアリングチームの責任となります。彼らは最初に問題に気付くからです。しかし、多くの分野からの関与が必要です。インフラストラクチャスキルを持つ技術者と、バックエンドおよびデータシステムに関するコンテキストを持つ技術者で構成される**コスト最適化チーム**を編成することをお勧めします。彼らは影響を受けるチーム間の取り組みを調整し、レポートを作成する必要があるため、テクニカルプログラムマネージャーが役立ちます。

主要なコストドライバーの特定

主要なコスト要因の特定から始めることが重要です。まず、コスト最適化チームは関連する請求書を収集する必要があります。これらは、クラウドプロバイダーおよびSaaSプロバイダーからのものになります。スプレッドシート、BIツール、Jupyter Notebookなど、分析ツールを使用してコストを分類することが役立ちます。さまざまな次元で集計してコストを分析することで、最大の効果を達成するための作業の特定と優先順位付けに役立つ独自の洞察が得られます。たとえば

**アプリケーション/システム:** 一部のアプリケーション/システムは、他のシステムよりもコストに大きく寄与することがあります。タグ付けは、コストをさまざまなシステムに関連付けるのに役立ち、作業に関与するチームを特定するのに役立ちます。

**コンピューティング vs ストレージ vs ネットワーク:** 一般的に、コンピューティングコストはストレージコストよりも高くなる傾向があり、ネットワーク転送料は予想以上に高コストになることがあります。これは、ホスティング戦略またはアーキテクチャの変更が役立つかどうかを特定するのに役立ちます。

**事前本番環境 vs 本番環境:** 事前本番環境のコストは、本番環境のコストよりもかなり低くなければなりません。しかし、事前本番環境ではアクセス制御が緩んでいる傾向があるため、予想以上にコストが高くなることは珍しくありません。これは、非本番環境にデータが蓄積されすぎている、または一時的またはPoCインフラストラクチャのクリーンアップが不足していることを示している可能性があります。

**運用 vs 分析:** 企業の運用システムのコストが分析システムのコストと比べてどの程度であるべきかという経験則はありませんが、エンジニアリングリーダーは、実際の支出と比較して適切な比率を特定するために、企業における運用環境と分析環境の規模と価値を把握しておく必要があります。

**サービス/機能プロバイダー:** プロジェクト管理、製品ロードマッピング、監視、インシデント管理、開発ツールなど、エンジニアリングリーダーは、使用中のツールのサブスクリプションとライセンスの数、およびそのコストに驚くことがよくあります。これは、統合の機会を特定するのに役立ち、交渉力とコスト削減にもつながる可能性があります。

ドライバーのインベントリとその関連コストの結果により、コスト最適化チームは、どのタイプのコストが最も高く、企業のアーキテクチャがどのようにそれらに影響を与えているかをよりよく理解できるようになります。この演習は、過去3~6ヶ月のコストなど、履歴データを使用してコストの変化と特定の製品または技術的な決定を関連付けることで、根本原因を特定する際にさらに効果的です。

主要なコストドライバーに対するコスト削減レバーの特定

コスト、トレンド、およびその推進要因を特定した後、次の質問は、コストを削減するためにどのような調整策を使用できるかということです。より一般的な方法の一部を以下に示します。もちろん、以下のリストは網羅的なものではなく、適切な調整策は多くの場合、状況によって大きく異なります。

**サイズ変更:** サイズ変更とは、ワークロードのリソース構成を利用率に近づけることです。

エンジニアは、ワークロードに必要なリソース構成を確認するために、多くの場合見積もりを実行します。ワークロードが時間とともに進化するにつれて、初期の見積もりは、初期の仮定が正しかったか、またはまだ適用できるかどうかを確認するために、フォローアップされることはめったになく、潜在的に利用率の低いリソースが残される可能性があります。

VMまたはコンテナ化されたワークロードのサイズを変更するには、プロビジョニングされたものと比較して、CPU、メモリ、ディスクなどの利用率を比較します。より抽象的なレベルでは、Azure SynapseやDynamoDBなどのマネージドサービスには、プロビジョニングされたインフラストラクチャの独自のユニットと、リソースの過小利用を強調する独自の監視ツールがあります。一部のツールは、特定のワークロードに対して最適なリソース構成を推奨するまでになっています。

リソースの割り当てを厳密に削減することなく、リソース構成を変更することでコストを削減する方法があります。クラウドプロバイダーには複数のインスタンスタイプがあり、通常、複数のインスタンスタイプが異なる価格帯で特定のリソース要件を満たすことができます。たとえば、AWSでは、新しいバージョンは一般的に安価であり、t3.smallはt2.smallよりも約10%安価です。またはAzureでは、紙面上の仕様は高いように見えますが、EシリーズはDシリーズよりも安価です。私たちは、クライアントがEシリーズに切り替えることでVMコストを30%削減するのを支援しました。

最後のヒントとして、特定のワークロードのサイズ変更を行う際に、コスト最適化チームは事前に購入したコミットメントを常に把握しておく必要があります。予約インスタンスなどの事前購入コミットメントは、特定のインスタンスタイプまたはファミリに関連付けられているため、特定のワークロードのインスタンスタイプを変更することでその特定のワークロードのコストを削減できる場合でも、予約インスタンスコミットメントの一部が未使用または無駄になる可能性があります。

**エフェメラルインフラストラクチャの使用:** コンピューティングリソースは、必要な時間よりも長く動作することがよくあります。たとえば、特定のタイムゾーンで作業するデータサイエンティストが使用する対話型データ分析クラスタは、データサイエンティストの勤務時間外に使用されない場合でも、24時間365日稼働している可能性があります。同様に、エンジニアが作業に使用しているにもかかわらず、開発環境が毎日終日稼働しているのを目撃してきました。

多くのマネージドサービスは、実際に使用したコンピューティング時間に対してのみ料金を支払うことを保証する自動終了またはサーバーレスコンピューティングオプションを提供しています。これらはすべて、覚えておくべき便利な調整策です。VMやディスクなどの他の、よりインフラストラクチャレベルのリソースについては、設定された基準(例:X分のアイドル時間)に基づいて、リソースのシャットダウンまたはクリーンアップを自動化できます。

エンジニアリングチームは、エフェメラルコンピューティングをさらに採用する方法として、FaaSへの移行を検討する可能性があります。これは、大幅なアーキテクチャの変更と成熟した開発者エクスペリエンスプラットフォームを必要とする重大な取り組みであるため、注意深く検討する必要があります。私たちは、FaaSに飛び込むことで多くの不要な複雑さを導入した企業を見てきました(極端な例:lambda pinball)。

**スポットインスタンスの活用:** スポットインスタンスの単位コストは、オンデマンドインスタンスよりも最大約70%低くなる可能性があります。もちろん、欠点としては、クラウドプロバイダーが短時間でスポットインスタンスを要求できるため、そこで実行されているワークロードが中断されるリスクがあります。したがって、クラウドプロバイダーは一般的に、ステートレスなWebサービス、CI/CDワークロード、アドホックな分析クラスタなど、中断からより簡単に復旧できるワークロードにスポットインスタンスを使用することを推奨しています。

上記のワークロードタイプの場合でも、中断からの復旧には時間がかかります。特定のワークロードが時間制約されている場合、スポットインスタンスは最適な選択肢ではない可能性があります。逆に、時間制約がそれほど厳しくない事前本番環境には、スポットインスタンスが簡単に適合する可能性があります。

**コミットメントベースの価格設定の活用:** スタートアップ企業が規模に達し、使用パターンを明確に理解している場合、チームが契約にコミットメントベースの価格設定を取り入れることをお勧めします。オンデマンド価格は、通常、事前購入コミットメントで得られる価格よりも高くなります。ただし、スケールアップの場合でも、使用パターンが安定していない、より実験的な製品やサービスには、オンデマンド価格設定が依然として役立つ可能性があります。

コミットメントベースの価格設定には複数の種類があります。これらはすべてオンデマンド価格よりも割引価格で提供されますが、特性が異なります。クラウドインフラストラクチャの場合、予約インスタンスは一般的に、特定のインスタンスタイプまたはファミリに関連付けられた使用量のコミットメントです。セービングプランは、時間あたりの特定のリソース(例:コンピューティング)単位の使用量に関連付けられた使用量のコミットメントです。どちらも1年から3年のコミットメント期間を提供しています。ほとんどのマネージドサービスにも、独自のコミットメントベースの価格設定バージョンがあります。

アーキテクチャ設計: マイクロサービスの普及に伴い、企業はより細かい粒度のアーキテクチャアプローチを採用しています。デジタルネイティブ企業の中期段階において、60個のサービスに遭遇することは珍しくありません。

しかし、消費者視点で設計されていないAPIは、消費者がそのデータの小さな部分しか必要としない場合でも、大量のペイロードを消費者に送信します。さらに、一部のサービスは、特定のタスクを独立して実行できる代わりに、分散モノリスを形成し、タスクを完了するために他のサービスへの複数回の呼び出しを必要とします。これらのシナリオで示されているように、ドメイン境界の不適切さや複雑すぎるアーキテクチャは、高いネットワークコストとして現れる可能性があります。

システム間のドメイン境界を改善するためにアーキテクチャやマイクロサービス設計をリファクタリングすることは大規模なプロジェクトになりますが、コスト削減以外にも、多くの点で長期的な大きな影響を与えます。そのような取り組みを始める準備ができていない組織や、これらのアーキテクチャの問題によるコストへの影響に対処するための戦術的なアプローチを探している組織は、戦略的なキャッシングを使用して、通信の頻度を最小限に抑えることができます。

データのアーカイブと保持ポリシーの適用: どのストレージシステムにおいても、ホット層は純粋なストレージにとって最も高価な層です。あまり頻繁に使用されないデータについては、クール層、コールド層、またはアーカイブ層に配置してコストを抑えることを検討してください。

まず、アクセスパターンを確認することが重要です。私たちのチームの1つは、大量のデータをコールド層に保存していたにもかかわらず、ストレージコストが増加しているプロジェクトに遭遇しました。プロジェクトチームは、コールド層に配置したデータに頻繁にアクセスしていたことに気づかず、それがコスト増加につながっていました。

重複ツールの統合: サービスプロバイダーの観点からコスト要因を列挙する際に、コスト最適化チームは、会社が同じカテゴリ(例:監視)内で複数のツールに対して料金を支払っていることに気づいたり、あるいは特定のツールを実際に使用しているチームがあるかどうか疑問に思ったりする可能性があります。未使用のリソース/ツールを削除し、カテゴリ内の重複ツールを統合することは、間違いなくコスト削減のもう一つの手段です。

統合後の使用量によっては、より有利な価格帯を利用できるようになったり、交渉力が高まったりすることで、さらなるコスト削減が期待できます。

努力と影響度に基づいた優先順位付け

コスト削減の可能性のある機会には、2つの重要な特性があります。潜在的な影響(潜在的なコスト削減の規模)と、それらを現実のものにするために必要な努力のレベルです。

会社が迅速にコスト削減を必要とする場合、50,000ドルかかるカテゴリから10%削減することは、5,000ドルかかるカテゴリから10%削減することよりも自然に効果があります。

しかし、コスト削減の機会は、実現するために異なるレベルの努力を必要とします。最適なサイズ変更やコミットメントベースの価格設定の利用などの構成変更よりも、コードやアーキテクチャの変更を必要とする機会もあります。必要な労力を正しく理解するために、コスト最適化チームは関連チームからの意見を得る必要があります。

図2:クライアントの優先順位付け演習からの出力例(異なる会社で行われた場合、異なる結果が得られる可能性があります)

この演習の終わりには、コスト最適化チームは、潜在的なコスト削減、実現するための努力、そして実装までのリードタイムに関連する遅延コスト(低/高)を伴う機会のリストを作成する必要があります。より複雑な機会については、後で説明するように、適切な財務分析を指定する必要があります。次に、コスト最適化チームは、イニシアチブを支援するリーダーとレビューを行い、どの機会に取り組むかを優先順位付けし、実行に必要なリソース要求を行います。

コスト最適化チームは、必要な行動と理由(潜在的な影響と優先順位)について十分な文脈を与えた後、影響を受ける製品およびプラットフォームチームと協力して実行するのが理想的です。ただし、必要に応じて、コスト最適化チームは能力やガイダンスを提供することができます。実行が進むにつれて、チームは、実現した節約と予想された節約、およびビジネスの優先順位からの学びに基づいて優先順位を再設定する必要があります。

維持フェーズ

コスト削減活動が節約をもたらした場合、祝って終わりにするのは魅力的かもしれません。しかし、私たちの経験では、チームが組織内で削減されたコストレベルを維持するための措置を講じない場合、コストが再び増加する固有のリスクが常に存在します。コスト意識と最適化を会社の運用モデルに組み込んだ維持フェーズは、コストを抑えるのに役立ちます。

コスト管理の責任の分散

削減フェーズでは、関連チームと協力して優先順位付けされたコスト削減の機会を実行するコスト最適化チームを編成することをお勧めします。最適化されたコストレベルを維持するには、コスト管理の責任をコスト最適化チームからそれぞれのチームに移す必要があります。

私たちが協力してきたほとんどのスタートアップは、(プラットフォームエンジニアリング製品チームを含む)製品チームモデルを採用しており、多くのチームは自分が所有するシステムをよく理解しています。製品チームは、製品を実行するために必要なカスタムソフトウェアと、機能に必要な独自のサードパーティシステムを所有しています。プラットフォームチームは、提供する機能に関連するシステムを所有します。これは、CI/CDや監視などの技術的な機能、または支払いなどの再利用可能なビジネス機能である可能性があります。

しかし、組織化されたスタートアップでも、組織の再編や自然減により、時間とともに一部のシステムが、時には静かに、孤児化されることがあります。

チームが所有権の境界をどの程度明確に理解しているかを検証するために、スタートアップは保有するシステムと既存の所有権の割り当てを確認できます。多くの組織では、この情報はサービスカタログなどの永続的な資産として既に管理されており、チームとレビューしてその最新性を検証する必要があります。

そのようなサービスカタログがない組織は、まずテクノロジーランドスケープのスナップショットを作成し(システムをリストアップするか、C4モデルなどでシステムを視覚化することなど)、チームと協力して各コンポーネントにそれぞれの所有者をタグ付けすることで始めることができます。長期的に見ると、サービスカタログ(本格的なポータルではなく、文書でも構いません)のようなリビングアーティファクトに移行するのが最善です。

理想的には、このプロセスを通じて、特定された孤児システムには所有者が割り当てられます。現実的には、ビジネスの重要性、コストへの影響、その他の側面に基づいて優先順位を付けることが妥当です。

次に、チームリーダー(エンジニアリングマネージャー、テクニカルリード、プロダクトリード)は、チームが所有するシステムのコストについて責任を負う必要があります。これは、最初に、既存の儀式(毎月の同期、四半期ごとのレビューなど)に織り込むことができる合理的な頻度でコストを確認するという期待になる可能性があります。最終的には、コスト指標をこれらのチームのKPIに組み込む必要があります。

コストを前面に出すことで、組織の能力が構築され、誰もが自分の意思決定のコストへの影響について考え、マネージャーがセキュリティや品質と同じように責任を負うべきであるというメッセージを送信するのに役立ちます。

しかし、セキュリティや品質と同様に、コストの考慮事項の二次的な影響を認識する必要があります。チームは過度に倹約すべきではありません。コストに関する意思決定を行う際には、関連する会社のリーダーに相談することができます。多くの場合、特に実験的な機能の場合、スタートアップでは、市場投入までの時間を短縮することを意味する場合、追加コストが発生する技術的負債を引き受けることが理にかなっています。重要なのは、コストの上昇傾向を察知し、修正する規律を持つことです。

チームレベルに責任を委任することが重要ですが、一括購入コミットメントの交渉や全体的なテクノロジーポートフォリオの最適化など、一部のコスト管理アクションは、より広範な組織のコンテキストを考慮してのみ最適に実行できます。したがって、コストの責任は、チームをまたがって、製品グループレベルでも負う必要があります。

コストの可視化

望ましいレベルの分散型責任を支援するために、システムを実行するコストを報告し、所有する組織レベル(チーム、製品グループ)に帰属させる必要があります。これを実現する方法は、サービスの種類によって異なります。たとえば、クラウドインフラストラクチャまたはサービスはタグ階層を使用して所有者に帰属させることができますが、共有Kubernetesクラスタで実行されるワークロードは、ラベル、名前空間、またはサービス名を使用して帰属させることができます(Kubernetes固有のコスト監視ツールを使用すると、ラベル、名前空間、サービス名に基づいて共有Kubernetesクラスタのコストをチームに分割できます)。

すべてのサービスまたはインフラストラクチャコンポーネントを製品またはチームに完全に帰属させることは困難ですが、レポートを検出可能で、理解可能で、実行可能にすることが重要です。これにより、エンジニアは技術的な意思決定のコストへの影響を理解し、リーダーはコース修正が必要かどうかを確認できます。

これらのレポートの詳細レベルは重要です。対象読者がチームレベルに近い場合、より詳細なデータを含め、より頻繁にレポートを更新することが役立ちます。チームは日々の開発作業中にコストに影響を与える決定を行うため、四半期ごとのレポートと比較して、2週間ごとまたは月ごとのレポートの方が方向転換の兆候をより迅速に示すことができます。

チームレベル以上のリーダーにとっては、より大きなトレンドを検出し、契約構造またはテクノロジー戦略の変更が必要かどうかを理解することに重点が置かれています。レポートは「主要なコスト要因を理解する」で説明されているものなどのさまざまな次元全体でコストを集計する可能性がありますが、レポートは一般的にチームレベルのレポートほど頻繁に更新する必要はありません。

チームが正しい行動を容易に取れるようにする

コスト管理においてしばしば見過ごされるのは、人々が期待どおりに行動すること、つまりテクノロジーランドスケープの一部のコストについて責任を負うことを容易にすることです。厳格なガバナンスプロセスを作成するのではなく、望ましい行動と結果を可能にすることを目指します。最も簡単な方法が最も費用対効果が高い場合、技術者は自然にベストプラクティスに従います。

望ましい結果を簡単に達成できる環境を作るために、ナッジ(促し)を活用できます。リチャード・セイラーは著書「ナッジ」でこのテーマを詳しく論じています。彼の例で、無制限のセルフサービスコンピューティングの良いアナロジーとなるものがあります。「トレーレス食堂」。食堂の管理者は食品廃棄物の削減に強い関心を寄せてきました。余分な食べ物が残されたり、使われずに余るナプキンが多く積み重ねられるトレーの容易さを目の当たりにしたニューヨーク州アルフレッド大学の好奇心旺盛な管理者と学生たちは、2日間にわたってトレーレス方式をテストしました。トレーが提供されなかった場合、飲食物の廃棄量は30~50%減少しました!

Backstage 開発者ポータルは、人々に正しい行動を促すツールの良い例です。テンプレートの使用は、エンジニアをゴールデンパス(Spotify版の舗装された道)へと導きます。また、ドキュメントのスコアカードにより、エンジニアが属性を追加して、より有用で読みやすいものにするよう促します。

コスト効率を改善するためのナッジの適用例を以下に示します。

望ましい行動

ナッジ

チームは、エンジニアリング上の意思決定においてコストを考慮する

チームレベルのコスト指標を容易に見つけて理解できるようにします。例えば、あるクライアントは、コスト動向と外れ値に関する定期レポートをチームに送っています。あるチームはそのレポートにおける外れ値を調査することで、月額約10万ドルの節約に成功しました。

設計ドキュメントテンプレート/アーキテクチャ意思決定記録テンプレート、さらにはストーリーカードにも、標準的な考慮事項のリストにコストを含めます。インフラストラクチャチームの1つは、作業のコスト影響の見積もり(Tシャツサイズ - S/M/L)を示す特別な必須Jiraタグをカードに作成しました。

チームはタグを一貫して(スペルミスなしで一貫したスペルで)タグ付けし、タグを最新の状態に保つ

インフラストラクチャを作成する際に、タグ値をフリーフォームのままにするのではなく、チームにいくつかの選択肢を与える。

チームが変更された場合や製品が移管された場合に、タグの変更を自動化することで、変更を容易にする。

チームに定期的にリマインダーを送信して、タグを見直して更新するか、または定期的なペースでチームと迅速に見直しを行い、フィードバックを得る。

タグが命名規則に従っていることを保証するリンタールールを追加する。

チームは高コストのVMを選択しない

適切なデフォルトのインスタンスタイプをいくつか提供することで、選択肢を絞り込みます。例えば、上記のDatabricksのケーススタディでは、Databriックスクラスタポリシーを使用して、エンジニアが選択できるインスタンスタイプを制限しました。開発またはデータサイエンティストの作業にVMを使用する場合は、セットアップが容易なデフォルトのマシンを用意します。

変更によるコストへの影響を示します。例えば、TerraformコードPRのコスト影響を示すツールなどを使用します。

チームは、会社とすでに契約しているツールを使用する

チームが容易にアクセスできるサービスまたはインフラストラクチャテンプレート(舗装された道)を利用する。

会社が使用するテクノロジースタックの中央カタログを作成します。例えば、独自のTech Radarのカスタムバージョンを使用します。

テクノロジーポートフォリオの見直しとガバナンス

組織のテクノロジポートフォリオは、社内システムとサードパーティツール、言語、フレームワークで構成されています。ポートフォリオ内のアイテムが多くなるほど、組織の責任範囲が大きくなり、財政的投資と認知的負担の両方の点でコストが高くなります。テクノロジポートフォリオ内の各アイテムは当初、特定の理由で導入されましたが、これらの理由は時間の経過とともに無効になったり、無関係になったりする可能性があります。したがって、断片化を減らす方法でテクノロジポートフォリオを管理することで、コスト削減に役立ちます。

スタートアップのテクノロジポートフォリオを管理するための最初のステップは、保有しているシステムとその機能を把握することです。これを行うことで、機能の重複を特定し、冗長なシステムやツールを特定することが容易になります。例えば、ポートフォリオ内の複数のシステムが独自のCMS実装を持っている場合や、スタートアップがチーム全体でCI/CD機能を提供するために複数のツールが使用されていることを発見する場合があります。

ポートフォリオの最新の状態を十分に理解したら、チームはポートフォリオの最適化に役立ついくつかのツールを頻繁に利用しています。

ウォードリーマップを使用すると、エンジニアリングリーダーは、ビジネスをサポートするテクノロジー機能、ユーザー/顧客に対する可視性、進化の段階(実験段階であるか、かなり成熟しているがビジネスに特化しているか、コモディティであるか)を視覚化できます。これにより、これらの機能がビジネスにとってどれほど差別化されているか、投資の変更が必要かどうかについての議論が開かれます。ウォードリーマップは、チームがポートフォリオを見直し、低コストの「購入」オプションが時間の経過とともに魅力的になっているにもかかわらず、社内で開発および維持されている機能を特定するのに役立っています。

もう1つの便利なツールは、言語、サードパーティツール、プラットフォームのためのテクノロジーレーダーです。

テクノロジーレーダー自体はThoughtworksの業界出版物ですが、このモデルはZalandoなどの複数の組織によって、言語とツールの統合された状況を伝えるために使用されてきました。組織内のエンジニアに安全な言語/ツールの選択、推奨されないもの、実験段階にあるテクノロジーを伝えることで、エンジニアを望ましい方向に導き、断片化を防ぎ、コスト削減に役立ちます。Build Your Own RadarツールキットBackstage Tech Radar Pluginなど、カスタムテクノロジーレーダーを開始するための方法は複数あります。

テクノロジポートフォリオの変更や主要なアーキテクチャ変更を検討する際には、財務パートナーと協力して、潜在的な投資収益率(ROI)に関する財務分析を実施することが重要です。財務分析における主な考慮事項は、変更の実装にかかる人件費、交換する場合のツール自体の費用、新しいアプローチによる潜在的な効率の向上または損失、現状維持のコストです。この分析は、影響を受けるのは変更を実装しているチームだけではないため、人件費と影響の点で組織全体に及ぶ必要があります。

当社のクライアントの1社は、現在のツールの費用変動が懸念され、管理が煩雑だったため、新しい可観測性ツールへの移行を検討していました。新しいベンダーからの見積もり、予想される人件費の見積もり、選択した期間におけるコスト削減の分析などを含む慎重な検討の結果、クライアントはROIがマイナスであったため、現在のツールを使い続けることを決定しました。

料金の最適化

クラウドおよびSaaSサービスプロバイダーは、コミットメント(例:予約インスタンスまたは節約プランの購入)と規模に対して顧客に報酬を与えます。ただし、実際の使用量が推定値と一致しない場合、一括購入プランは負債になる可能性があります。長期的なコミットメントは、会社のシステム、ユーザー、市場機会が契約条件よりも速く進化して変化するため、リスクが増加します。当社のクライアントの1社はAWS(コンピューティング節約プラン)と3年間の契約を締結しましたが、1年後、システムの一部を廃止することを決定し、その結果、コミットされたプランが十分に利用されなくなりました。

逆もまた真です。会社が常にコミット不足であれば、常にリソースに対してより高い価格を支払っています。これは、ビジネスがどのようにこのリスクを管理したいかについての注意深いバランスと継続的な話し合いが必要です。

ほとんどのSaaS製品は、会社にアカウントマネージャーを割り当てており、最適な価格を得るために利用可能な契約構造を伝えることができます。割引を要求しても害はありません。一部のSaaSプロバイダーは、参照可能なクライアントになることや、製品のベータ版に関するフィードバックを提供することなど、無形のメリットと引き換えに割引を提供します。アカウントマネージャーは会社の使用状況を追跡し、より良い選択肢があれば通知するため、定期的にアカウントマネージャーと会うことをお勧めします。

組織(または部門)のレート最適化に関する責任を統合することで、複数のチームにわたって責任を委任するよりも効率的な購買戦略が可能になります。組織の規模は、会社全体の規模の経済を最も有効にする価格モデルを管理するために、FinOpsチームへの投資を正当化する場合があります。

企業成長に伴うコスト効率改善策の例

フェーズ1

実験段階

資金が限られている - 会社はプロダクトマーケットフィットを見つけることに重点を置いています。

インフラストラクチャとテクノロジーの状況は簡素化されていますが、コスト効率は主要な焦点ではありません。

フェーズ2

トラクション獲得

会社は市場シェアを獲得するための機能構築に重点を置いています。

市場でのトラクションを獲得している間は、コスト効率の考慮事項は延期されます。

会社はサブチームに分割され始めますが、依然として「1つの大きなチーム」と考えており、インフラストラクチャを共有しています。

フェーズ3

(ハイパー)成長

コストは成長に比例して増加するか、成長を上回って増加します。

インフラストラクチャと可観測性のセットアップにおける摩擦を軽減するために、最初のプラットフォームチームが編成されます。

プラットフォームチームは、タグ付けを使用してチームまたは製品に対してコストを追跡し始めます。

リーダーシップはマクロコスト動向を監視し、契約レートの最適化など、簡単な解決策を実行しますが、まだ大規模なコスト最適化の取り組みは開始されない可能性があります。

フェーズ4

最適化

リーダーシップは、コストレベルが懸念される兆候が見られることに気づきます。

コストを管理するために、イニシアチブと推進チームが作成され、個々のプロダクトチームと協力します。

リーダーはコスト規律に関する期待を設定し、コストに対する連邦責任を確立します。

製品/チームスコープのコストダッシュボードを使用して、コストが所有チーム/製品に見えるようにします。

プラットフォームチームは、デフォルトでコスト追跡と効率のためにエンジニアが正しい行動をとるように促すナッジを設定します。

要約

コストは、スケールアップビジネスモデルのボトルネックになることが多く、組織が最適化フェーズに入る一般的なトリガーとなります。このフェーズで積極的にコストに取り組むことで、組織は持続的な成長のための基盤を築くことができます。

私たちの主な推奨事項は次のとおりです。

  • システム、コンピューティング対ストレージ対ネットワーク、事前準備対本番など、いくつかの次元別に分類されたコスト動向を分析することで、コストボトルネックの主な要因を特定します。
  • クロスファンクショナルなコスト最適化チームを作成し、戦術的な削減フェーズを使用して、コストを迅速に削減するための一般的な手段を特定、優先順位付け、実行します。
  • 初期のコスト削減後、持続フェーズに焦点を移し、運用コストが将来再び問題にならないように永続的な変更を加えます。
  • チームが所有するカスタムシステムとサードパーティシステムのコスト効率についてチームに責任を負わせる一方で、システムに関する実行可能でタイムリーなコストレポートを提供することで、チームがそうできるようにします。
  • 組織のテクノロジポートフォリオを調べ、冗長または廃止されたシステムを統合する機会、およびサードパーティソフトウェアをより効果的に使用するための機会を特定します。
  • ナッジを利用して、チームが最適な選択を行うように促します。
  • ベンダーと定期的にミーティングを行い、競争力のある価格を確保し、ツールのベストプラクティスに関する洞察を得ます。

これまで説明してきた戦術と戦略は、根本的に、組織全体での可視化、責任の明確化、そして行動促進を可能にします。

権限を与えられたチームへの責任委譲を通じて、問題に継続的に焦点を当てなければ、組織はすぐに元の状態に戻ってしまい、社内の不十分な財務管理によるコスト効率の課題に直面することになります。


謝辞

この記事は、多くの同僚からのコメントと提案によって大幅に改善されました。Martin Fowler氏、Ajay Chankramath氏、Tim Cochran氏、Vanessa Towers氏、Kennedy Collins氏、Karthik Krishnan氏、Carl Nygard氏、Brandon Byars氏、Melissa Newman氏、Nic Cheneweth氏、Sagar Trivedi氏に感謝いたします。

重要な改訂

2023年8月17日: 最終回を公開

2023年8月15日: 維持フェーズの第一部を公開

2023年8月10日: 削減フェーズを公開

2023年8月1日: ケーススタディを公開

2023年7月31日: 兆候を公開。