プラットフォーム エンジニアリングのキャリアを積むための基盤づくり
Google Cloud Japan Team
※この投稿は米国時間 2024 年 1 月 12 日に、Google Cloud blog に投稿されたものの抄訳です。
あなたは Acme Corp という架空の会社のエンジニアで、CI / CD と自動化を用いたソフトウェアの統合と配信、データ主導型の指標およびオブザーバビリティ ツールの実装を行う大型プロジェクトに関わっているとします。しかし仲間のエンジニアの多くは、認知負荷が高すぎることで苦戦しています。Kubernetes クラスタのデプロイと自動化、CI / CD パイプラインの構成、セキュリティに関する懸念事項など、検討すべきことはさまざまです。会社の拡大と成長を支援するには、そのような課題の解決方法に関する考え方を改める必要があるとあなたは気付きます。そこで役立つ可能性があるのが、プラットフォーム エンジニアリングです。
プラットフォーム エンジニアリングは「コンピューティング プラットフォームを計画してデベロッパーとユーザーに提供し、プラットフォームのあらゆる部分とその機能(人、プロセス、ポリシー、テクノロジー)を網羅して、さらにそれらを推進するために必要なビジネス成果を提供する業務である」と、Cloud Native Computing Foundation(CNCF)は述べています。最近登場したこの考え方には、DevOps に基づく改革や、Kubernetes およびサーバーレスにおける近年のクラウドネイティブ開発、またオブザーバビリティと SRE の進歩から学んだことが反映されています。
プラットフォーム エンジニアリングでキャリアを積むということは、ソフトウェア、ツール、サービスの提供に注力するプロダクト チームの一員になることを意味します。IT キャリアをスタートしたばかりの新卒の方にも、すでに豊富な経験を持つデベロッパーやエンジニアにも、プラットフォーム エンジニアリングは、成長の機会や新たな技術スキルの獲得能力をもたらします。
ここでは、プラットフォーム エンジニアの業務内容や必要なスキルの紹介を含む、プラットフォーム エンジニアリング分野の概要を解説します。また、ユーザー重視のアプローチやプロダクト マインドセットを持つことの重要性や、目標を設定したり、よくある落とし穴を回避したりするためのヒントもご紹介します。
プラットフォーム エンジニアに共通の特性
プラットフォーム エンジニアには、どのようなことが期待されるのでしょうか。一般的に、プラットフォーム エンジニアの役割には技術的なスキルと人間的なスキル、すなわち作業を完了するために必要な仕事関連の能力と、その役割への取り組み方に影響する人間性や特性の両方が必要とされます。プラットフォーム エンジニアとしてのキャリアパスを構築し始めるために、こうした特性の一部を知っておくことは大切ですが、成功するためにすべての特性を知っておく必要はありません。なぜなら、多くの場合そのようなスキルセットはチーム内で分散しているからです。プラットフォーム エンジニアには、次のようなさまざまな特性があります。
- エンジニアリング グループにとって信頼できるパートナーとなる、知識を共有する、ソフトウェア デベロッパー、SRE、プロダクト マネージャーなどの他のチームと共同作業するといった、顧客重視のアプローチを取る
- DevSecOps のプラクティスに慣れている
- 貪欲に学び、問題を解決し、細かいことに目を配り、チーム内で効果的にコミュニケーションが取れる
- プラットフォーム エンジニアリングというアプローチのメリットを、同僚や仲間のエンジニアに明確に伝えられる
- プラットフォームに、顧客のユーザー ジャーニーや摩擦ログを使用するといったプロダクト マインドセットを適用する
プラットフォーム エンジニアリング分野でこうした特性が特に重視されることを踏まえて、上記のリストを基に顧客重視のアプローチについて詳しく説明していきましょう。
設計ループと顧客重視の重要性
プラットフォームが最も重要な製品である場合、CNCF Platforms White Paper で示唆されているとおり、焦点となるのはプラットフォームのユーザーです。Google の DORA Research 2023 で「ユーザーを重視するチームは、そうでないチームよりも組織のパフォーマンスが 40% 高くなる」とされているとおり、ユーザー重視が重要であることはわかっています。
Google は、ユーザーに焦点を当てることで、その他のことは自然とうまくいくと信じており、それが当社の理念をなしています。共感的なユーザー マインドセットを持つためには、ユーザーのニーズと需要を深く理解することが必要で、それは対話や体系的な統計情報、指標、データを通じて達成できます。データを集める際には、定量的指標と定性的指標の両方に焦点を当てます。
たとえば、こちらのホワイトペーパーで詳しく紹介されている Google の HEART(Happiness、Engagement、Adoption、Retention、Task Success)フレームワークを採用することにしたとします。あなたはプラットフォーム エンジニアとして、提供されたプラットフォーム サービスでユーザーが感じた「幸福感」に特に興味を持っているかもしれません。また、プラットフォームの採用に加え、提供したプラットフォームの(潜在的な)保持率も測定して追跡したいと考えているかもしれません。ユーザーはなぜプラットフォームを利用し、その利用をやめるのか。何が足りないのか、そしてプラットフォームの次のデザイン スプリントではそれを改善できるのか。ユーザーがプラットフォーム サービスを利用する際に直面する課題を記録した摩擦ログを作成することもできます。自身がユーザーになってみて、自分が提供しているプラットフォームのサービスを使って実際に摩擦ログやユーザー ジャーニーを経験するのが理想的です。
プラットフォーム エンジニアリングのデザインループ
プラットフォーム エンジニアリングについて検討を始めるための効果的な方法は、自分を中心的プラットフォーム エンジニアとして位置付けて、プラットフォーム エンジニアリングのデザインループを想像してみることであると、Google は考えています。プラットフォーム エンジニアは、ユーザー調査を行ってユーザーが優先する事項をより詳しく理解し、顧客第一主義を改善します。また、摩擦ログやその他のタイプの実験を記録して、ユーザーに対する共感を構築します。チームは、プラットフォーム バックログで自社のバリュー ストリームに対するプラットフォームの貢献度に焦点を当てて、エンジニアリング製品のポートフォリオに関する意思決定を行います。プロダクト マインドセットを持つことで、ユーザーのニーズを把握し、明確なビジョンとロードマップを持ち、ユーザー機能やドキュメント化の優先順位を決めて、製品強化に対してオープンでいることができます。最後に、自分のプラットフォームの最初のリリースを配信したら、このループを継続的に反復し、反復するごとにプラットフォームを改善していきます。
プラットフォーム エンジニアの実際の業務
たくさんのことを挙げてきましたが、プラットフォーム エンジニアは、より大きなプラットフォーム エンジニアリング グループの中でさまざまなタスクを行います。もちろん、すべてできなければならないわけではなく、専門性が必要となりますが、重視することをおすすめするトピックを以下にいくつかご紹介します。
Google Cloud サービス
- コンテナ ランタイム: Google Kubernetes Engine、Cloud Run
- コンピューティング ランタイム: Compute Engine、Google Cloud VMware Engine
- データベース: Spanner、Bigtable、Cloud SQL
- 内部デベロッパー ポータルの構築と管理
- デベロッパー ツールのサポート: Cloud Workstations
- CI / CD の維持: Cloud Build、Cloud Deploy、Artifact Registry
- Infrastructure Manager と Policy Controller を使用して、選ばれたサポート対象のゴールデンパスに Compliance As a Code を実装する。それによって、デベロッパーにかかる認知負荷が軽減され、デプロイにかかる時間を短縮することができます。
アーキテクチャ
- インフラストラクチャとアプリケーションのアーキテクチャについて深く理解する
- デベロッパーと共同でコードを作成し、Infrastructure as Code の使用を通じてゴールデンパスをサポートする
- Google のテクニカル ライティングに関するコースの解説を参考にして素晴らしいドキュメントを作成する。アーキテクチャ決定レコードが技術ドキュメントの重要なパートであることを忘れないでください。
オペレーションと信頼性
- サイト信頼性エンジニアリング - プラットフォームの信頼性の高いオペレーションを実現するベスト プラクティスを採用する
- セキュリティ エンジニアリング - 自社のプラットフォームのコンプライアンス、水平制御、ガードレール
エンジニアリング バックログ
- バックログを使用して、未処理のタスクをリスト化し、エンジニアリング作業のポートフォリオの優先順位を決めます。フォーカスの大部分は、リクエストのバックログの解決に当てる必要があります。その際、継続的な改善と実験の両方のために追加の時間を取っておきます。
- 新しい技術を用いた実験とイノベーション - プラットフォームを改善するための新しいサービスや機能の学習など、プラットフォーム エンジニアにとっては不可欠なタスクです。
Google がいる業界は、複雑さを「脇」に置いておくことで、より適切なテストと、統合された安全なコードの作成を可能にすることに注力してきました。実際、Google ではそれに加えて、プラットフォームの取り組みによってこの複雑さを軽減することが可能になると確信しています。もちろん、スーパースターのプラットフォーム エンジニアであったとしても、人には得手不得手があります(認知負荷について考えてみてください)。
プラットフォーム エンジニアが避けるべきこと
ここまで、新人のプラットフォーム エンジニアが行うべきさまざまなことについて述べてきましたが、次のような行うべきでないこともあります。
- デベロッパーのニーズを優先せず、デザインループにデベロッパーを参加させない
- ランダムなタスクを何でも引き受ける: 優先順位を付けて適切な文化を確立することが重要であり、それができないと燃え尽き症候群につながり、生産性が落ちる(State of DevOps Report 2023 レポートで紹介されています)
- 停滞する: 継続的な学習は仕事から得られる特典であるだけでなく、エンジニアの日々のタスクの重要なパートである
- ヒーロー エンジニア症候群の徴候を示す: その代わりに、スキルをグループ全体に広めて、持続可能なペースで働く
- 普及活動も教育も行わず、デベロッパーの信頼を得ることもせず、プラットフォームの構築直後に採用されることを期待する
これらは、当社がこれまでに見てきたよくある落とし穴のごく一部です。
プラットフォーム エンジニアは現代のソフトウェア デリバリーの屋台骨
プラットフォーム エンジニアは、現代のエンタープライズ ソフトウェア戦略の成功に不可欠な存在であり、デベロッパーがアプリケーションの構築とデプロイに使用するプラットフォームの作成と維持に対する責任を負っています。ソフトウェアが常に進化し続ける現在の世界において、スケーラブルなソフトウェア サービスを提供し、ユーザーを最重要視し続けるための鍵となる力が、プラットフォーム エンジニアです。プラットフォーム エンジニアは、技術面の専門知識と業界における最新の進歩に関する知識を組み合わせて、社内ユーザーの需要とニーズを慎重に把握します。
最後に、プラットフォーム エンジニアリングについて学びを進めていくうえで役立つリソースをさらにご紹介します。
- 持続可能なソフトウェア エコシステムの作成について、文化やプロセス、ツールを深く掘り下げて解説した書籍『Software Engineering at Google』
- Google の SRE 関連の書籍とワークショップ
- DORA.dev - ソフトウェア デリバリーと運用パフォーマンスを促進する能力に関する調査
- Google Cloud 認定資格 -> Cloud Architect、Cloud DevOps Engineer、Cloud Developer、Cloud Security Engineer、Cloud Network Engineer
-最新版アプリ担当 EMEA プラクティス ソリューション リード Darren Evans
-カスタマー エンジニア FSI Yuriy Babenko