asoview! TECH BLOG

アソビュー株式会社のテックブログ

Argo WorkflowsとGatlingで作るスケーラブルな負荷テスト環境

これはアソビュー! Advent Calendar 2023の1日目です🎄 今年のアドベントカレンダーは2面公開なので、ぜひそちらも御覧ください!

アソビューでVPoE兼Tech Leadをしているdisc99🐼です!
今回はアソビューの負荷テスト環境の事例を紹介させてもらえればと思います!

はじめに

多くのサービスは実際の運用環境において予期せぬトラフィックやアクセスパターンに直面します。

サービスのパフォーマンス、スケーラビリティ、安定性を評価するために負荷テストは重要で、実際のトラフィックを模倣し、サービスが指定された要件を満たすかどうかを評価することで、サービスの設計や構成にフィードバックできます。

弊社が提供するサービスの中でも特にtoC向けである、遊びの予約サイト「アソビュー!」やチケット直販サービスである「ウラカタチケット」などではピーク時には数千rpsのアクセスが発生したり、時間や時期によって大きくアクセス特性が異なってきます。

このような状況の中で安定してサービスを提供するために負荷テストは重要な役割を果たしています。

負荷テストに求められるもの

負荷テストには、サービスのパフォーマンスを正確に測定し、現実世界のシナリオを再現できる能力が求められます。
また、大量のトラフィックを再現する性質上、クライアント側のリソースやネットワーク帯域が十分な環境でないと、必要となるトラフィックが再現できなくなります。

小規模なサービスであればローカルマシン上でシナリオを実行するだけ十分な場合もありますが、大規模なトラフィックや長時間のストレステストなどを実行する場合には、これらを満たすのは難しくなります。
実際のシナリオを再現させ、大量のトラフィックを実現するには、クライアントのスケーラビリティが重要となります。

このような要件を満たすために、アソビューではAWSのAmazon EKS上でArgo WorkflowsとGatlingを利用した負荷テストの環境を構築しています。

現在、負荷テスト環境を実現するソリューションは多数ありますが、元々社内的にワークフローエンジンとしてArgo Workflowsを利用しており、Gatlingを利用した負荷テストの実績もあったため、これらの環境を活かす形で負荷テスト環境を構築し2年程度運用をしています。

Argo Workflowsとは

argoproj.github.io

Argo Workflowsは、Kubernetes上で複雑なジョブとワークフローをオーケストレーションするためのワークフローエンジンで以下のような特徴を持っています。

  1. Kubernetesネイティブ
    Argo WorkflowsはKubernetes APIを利用し、Kubernetesクラスター上で直接動作します。
    これにより、Kubernetesの機能とシームレスに統合し、スケーリングや管理が容易になります。

  2. 柔軟なワークフロー定義
    ワークフローはYAMLファイルで定義され、ステップや依存関係を記述します。これにより、複雑なタスクのシーケンスを簡単に管理できます。
    また、DAGやパラメーター、アーティファクト、条件分岐など柔軟なワークフローを構築する機能が揃っています。

  3. ユーザーインターフェース
    Argo WorkflowsにはウェブベースのUIがあり、ワークフローの状態をリアルタイムで視覚化し、管理することができます。

こういった特徴の中でも、負荷テストに必要となるスケーラビリティなどを用意に実現することができるため、実行環境として選択しました。

また、アソビューで利用しているAmazon EKSでは、ワーカーノードとしてAmazon EC2とAWS Fargateをサポートしており、現在の負荷テスト環境ではAWS Fargateを利用しています。

Gatlingとは

gatling.io

Gatlingは、高性能な負荷テストツールで以下のような特徴を持っています。

  1. スクリプトベース
    テストシナリオをScalaを使ったDSLのスクリプトとして記述できます。
    これにより、テストシナリオを柔軟かつ簡潔に記述できます。
    Scalaのコードで記述できるため、条件分岐や外部からデータのIDなど、必要に応じカスタマイズされたテストケースを作成できます。
    また、コードで定義されているため、ソースコード管理ツールとの相性もよく、変更履歴などを随時確認することもできます。

  2. リアルタイムモニタリング
    テスト実行中にリアルタイムでパフォーマンスデータを収集し、グラフィカルなダッシュボードやレポートを提供します。
    これにより、テスト中に問題を検出し、性能のボトルネックを素早く特定できます。

  3. ユーザーシミュレーション
    数千から数十万の仮想ユーザーをシミュレートできます。
    これにより、アプリケーションが実際のトラフィックに耐えられるかどうかをテストできます。
    さらに、異なるユーザーシナリオや負荷条件をシミュレートすることで、アプリケーションの振る舞いを多角的に評価できます。

  4. シナリオのモジュール化
    シナリオのモジュール化をサポートしており、共通のアクションやステップを再利用可能なコンポーネントとして定義し、シナリオ間で共有できます。
    これにより、テストスクリプトの保守性が向上し、重複コードを軽減できます。

  5. 複数のプロトコルのサポート
    HTTP、WebSocket、JMS、SMTPなどさまざまなプロトコルをサポートしています。
    アプリケーションやサービスに合わせて適切なプロトコルを選択し、パフォーマンステストを実行できます。

  6. 簡単なセットアップとスケーラビリティ
    Gatlingのセットアップは比較的簡単で、必要な依存関係を解決するのは容易です。
    また、テストの分散実行をサポートしており、複数のマシンでテストを実行して負荷を増やすことができます。
    これにより、大規模な負荷テストを実施できます。

  7. CI/CD統合とコマンドラインインターフェース
    Gatlingはコマンドラインベースのツールであり、CI/CDパイプラインに簡単に統合できます。
    パイプラインに組み込むことで、自動化されたパフォーマンステストを実行して問題を検出し、品質を確保することもできます。

こういった特徴の中でもスケーラビリティやコマンドラインからの実行など、Argo Workflowsと相性が良いため組み合わせて利用しています。

システム構成

全体的なシステム構成は以下になります。

システム構成
GatlingのテストシナリオはGithub上で管理されていて、CIをトリガーにECRに登録されます。 Argo Workflowsではそのシナリオを含んだGatlingのDocker ImageをPullし、テストを実行します。
Argo WorkflowsのJobは大きく、「セットアップ」、「テスト実行」、「テスト結果の集約」のフローに分割したDAGで構成されています。

「セットアップ」: テスト実行時に使う共通的にな、パラメーターの設定などを行います。
「テスト実行」: ワークフローの実行時や「セットアップ」から渡されたパラメーターなどを元に、実際のテストシナリオ実行を行います。
「テスト結果の集約」: 分散して実行された「テスト実行」の実行結果を集約し、S3にレポートファイルをアップロードします。

負荷テストのワークフロー

ワークフローの起動時には、実行するテストシナリオや全体でアクセスするユーザー数や実行時間、分散実行する並列数などの変動要素をパラメーターで指定します。
Argo Workflowを用いることで、「テスト実行」をするJobを手軽に分散実行できます。

Amazon EKSであればJobの実行環境をAWS Fargateを用いることでGatlingのスクリプトを実行するインスタンスを並列数に応じて独立して立ち上げることが可能で、クライアントから大量のトラフィックを送る必要があるときに問題になる、リソース不足やトラフィックの帯域制限を回避することもできます。

また、Gatlingではテスト結果はデフォルトだと確認しやすいHTML形式で出力してくれますが、オプションでlogファイル形式で出力することもでき、今回のように分散実行する場合には、logファイルを出力してすべての結果をマージして最終的なHTML形式に出力することもできます。

HTML形式なのでS3に保存したファイルはダウンロードして確認するだけでなく、Web上で確認することも可能です。

この他に実際の運用では、実行結果だけではなくボトルネックとなっている箇所の特定はエラーログの解析などより深ぼった分析が必要となるため、DatadogのメトリクスやAPM等を利用したダッシュボード、ログなどを組み合わせて確認しています。

運用事例

実際にアソビューでこれらの環境を利用し、どのように負荷テストを実施しているか簡単に紹介します。

テストシナリオの作成と計画

負荷テストの計画時には、テストシナリオの作成を行います。

アソビューの場合、サイトの商品検索や閲覧、予約や購入、購入内容の確認や現地での催行や着券などを主にユーザーが利用する導線を想定しテストシナリオを作成します。
更にシナリオ上同じ導線だったとしても、内部でロジックが大きく異なっていたり、外部のサービス呼び出しの有無などパターンがある場合には、それらを別シナリオとして用意したりもします。

過去に同様のテストを実施している場合は、新規作成は不要ですが、微調整や必要なテストデータの用意なども行います。

また、 テストシナリオの設計には、実際のトラフィックパターンやユーザー行動の分析が重要です。
これらに関しては、GAやサーバー上のメトリクス、ログなどを用いて、実際に来ていたリクエスト数、その時のサーバー上のリソース状況などを元に予測を立てて、現実値に近いテスト条件を導き出します。
条件がまとまり次第、サーバーのスペックアップやデータ投入などを条件に合わせ実施します。

負荷テスト実施とモニタリング

負荷テスト実施に関しては、Argo Workflowsの画面からワークフローに必要なパラメーターを指定し、実行するだけです。

アソビューでは、モニタリングとしてDatadogを利用しているため、Gatlingのレポートだけでは判断できない情報を、実行中や実行後Datadogから確認するようにしています。
Datadogには豊富なモニタリング機能が揃っているので、サービスが不安定になっているときにアプリケーションの状態やログの状態を紐づけて確認したり、分散トレーシングを用いてどのアプリケーションがボトルネックになっているかの洗い出しを行います。

テスト結果の分析とパフォーマンスの改善点

負荷テストの実施後は、収集したデータを詳細に分析します。

この分析により、システムのパフォーマンス上の問題点や改善の余地が明らかになります。
実施してきた例を上げると、インフラやアプリケーショのスケーラビリティ調整、DBやアプリケーションのチューニング、キャッシュ/CDNなどの活用、サーキットブレイカーの設置、入場制限の導入、システム構成やアーキテクチャの見直しなど多岐にわたります。

これらはテストの分析結果から、パフォーマンスを改善するための具体的なアクションプランを洗い出し、優先度判断を行って実施してきました。

ナレッジの蓄積

負荷テストの結果ですが、次回以降実施する際の計画やパフォーマンスの変化を確認する上で重要になります。

Gatlingが生成したレポートファイルはS3上に保存されますが、サーバーのスペックやモニタリングの状況などそれ以外の情報に関してはGitのコミット履歴やDatadogなど様々な環境に保存されるため、後から確認する場合に一覧性がよくありません。

アソビューでは、このような履歴に関して後から追えるように、スプレッドシートやWikiなどにまとめ確認できるようにしています。

まとめ

今回はアソビューで利用しているArgo WorkflowsとGatlingを組み合わせた負荷テスト環境を紹介しました。
この組み合わせにより、大規模なサービスでもスケーラブルに負荷テストを実施することが可能になり、実際の負荷によるサービスの状態を分析から対策まで容易に検討することができます。

現在アソビューでは、ステージング環境を利用して負荷テストを実施していますが、本番環境とリソースのスペックが異なるため、実行する際には本番相当のスペックに変更してから実施するような運用となっています。
また、テストシナリオに必要となる、ユーザーや商品データなども事前に用意する必要があり、負荷テストを実施するには準備作業が発生します。
今後の展望としてこれらの課題を解決し、デプロイパイプラインに組み込んだり、定期的に実行するなど、より簡単、確実に実行できるようにしていきたいと考えています。

大規模なサービス、高トラフィック環境での信頼性の高いサービス構築やその基礎となるプラットフォーム構築に興味がある方など、アソビューでは一緒に働くメンバーを大募集しています! カジュアル面談もありますので、少しでも興味があればお気軽にご応募いただければと思います!

www.asoview.com

QAってQ&Aの略なんですか?Quality Assurance(品質保証)とはいったい?

アソビューAdvent Calendar 2023の1日目(B面)です。

アソビューでQAを担当している大山です。
主にBtoC向けの遊び予約サイトアソビュー!のQA・ソフトウェアテストを担当しています。 他にはシステムセキュリティまわりの事なんかも少しやってます。
ところで──

QAってQ&Aの略なんですか?

アソビューAdvent Calendar 2023を見に来てくれている諸氏であれば、多くの方が「Quality Assurance」の略称だとすぐに思いついて頂けるのではないでしょうか。
単語自体がパッと出てこなくても(略さず「Quality Assurance」という言い方をすることは滅多に無いですし。。。)、「テストを遂行するチームや役割の事」とか「テスト・検証をする事」みたいに連想される方は多いんじゃないかと思います。
でもですね、結構あるんですよ。「QAってQ&Aの略なんですか?」とか「FAQみたいな?」とか言われる事って。
またまたご冗談をって思う方もいらっしゃるかもしれませんが、意外と根強い誤認ネタです。
なので私は、自分の職業や役割を話す時は、相手によっては意図的にQAという単語は使わず「ソフトウェア・システムのテストや、品質保証・品質管理をやってます」と言うようにしています。
ちなみに、数年前に「課長塾」という日系BP主催のマネジメントセミナーに参加した事があるのですが、本当に様々な業界・業種の方が参加されていて、ご多分に漏れず「QA」はほぼ通じなかったです(そしてタイトルに繋がる)

Quality Assuranceとは

ウィキペディアでは以下のように記されています。

品質保証(ひんしつほしょう、英: quality assurance、QA)は、効率と品質が求められるあらゆる活動において、それらに保証を与えるのに必要な証拠を提供する活動一般を指す。計画され体系化された活動は一般に、その製品やサービスが要求された品質を満足していることを保証する必要がある。品質保証は品質管理と密接に関連しており、これらによって顧客や権利保有者のニーズ・期待・要求に製品が適合していることを保証する。QA は、品質が所定のレベルに到達していることを事前に確認する手続きを効率的に構築するものである。

また、ソフトウェア開発においては、関連する活動として以下のようなものが挙げられています。

  • 要求仕様文書のレビュー
  • ソースコード制御
  • コードレビュー
  • 変更管理
  • 構成管理
  • リリース管理
  • ソフトウェアテスト

ソフトウェア開発の現場において「QA≒テスト」のような意味合いで使われる場面も少なくないとは思いますが、このようにQA本来の意味としては、テストはその活動の一部である事がわかります。

QAとテストの違い

業界・業種や組織ごとに様々な考え方があるとは思いますが、一般的にはこのように考える事が出来ます。

  • QAとは
     製品・ソフトウェアが要求された品質を満たしている事を確認・保証すること。
  • テストとは
     製品・ソフトウェアが期待した通りに動作する事を確認・検証すること。

ソフトウェア開発において、QAの役割・組織が開発者自ら行うテストとは独立したプロセスとして存在していたり、ソフトウェアテスト専門会社にアウトソースしているケースは非常に多いと思います。
人によっては「中身をよく知ってる開発者自らテストして品質を管理したほうが効率が良いし要求品質を満たしやすいでしょ?」と思われる方もいらっしゃるかもしれませんが、多くの企業・組織において、QAの機能を独立したチームで遂行している事には大きな意味があります。

第三者検証としてのQA

では、QAの機能・役割を開発者自身とは別の担当者・チームで遂行する事には、どういった意味があるのでしょうか?
一番に言えるのは、第三者の視点を持ってソフトウェアの品質を検証するという視点です。
先程、テストとは「期待した通りに動作する事を確認すること」と書きました。通常、開発者は自分が思い描いた通りに動作するように実装をするはずなので(例外もあるかもしれませんが)、基本的には「自分のイメージした通りに動作する事」という視点をもってテストを実施するかと思います。
一方、第三者の視点をもってテストを実施する場合、「求められる品質レベルに達しているか」を主眼としてテストを遂行します。また、第三者としてよりユーザーに近い立ち位置・目線で確認をします。

殺虫剤のパラドックスにご用心

ソフトウェアテスト技術者資格認定の運営組織であるJSTQBが定める「テストの7原則」の一つにこのような言葉があります。
これは、害虫に対して同じ殺虫剤を使い続けているとその殺虫剤に耐性を持った害虫が誕生する事になぞらえて、同じテストを何度も繰り返すと、最終的にはそのテストでは新しい欠陥を見つけられなくなるという意味です。
これは必ずしも第三者検証に限った話ではないのですが、「殺虫剤のパラドックス」を回避するためには、テストやテストデータ等を定期的に見直していく必要があります。QA=品質保証の一環として、こういった活動を継続的に行う事も、専門性をもったQAエンジニア・QAチームの重要な役割の一つです。

逸脱の標準化

ところで皆さまは「逸脱の標準化」という言葉をご存知でしょうか?
これは1986年に起きたスペースシャトルチャレンジャー号爆発事故において、その発生原因として、安全基準や規則を逸脱した行為が繰り返されることで、それが当たり前になってしまい、逸脱してることを気にかけなくなる現象の事を表した言葉です。
チャレンジャー号爆発の直接的な原因は低温によりゴム製のOリングがその役割(その柔軟性をもって隙間をふさぎ燃料が漏れ出すのを防ぐ)が機能不全に陥った事によるものですが、スペースシャトルの打ち上げに関してはしばしば安全基準の逸脱があった事が判明していたものの、事故には至っていないという事実からNASAはこれらの逸脱を放置していました。
この逸脱の放置こそが事故に至った真の原因であり、研究者はこれを「逸脱の標準化」と名付けました。
え?急にスペースシャトル?なんの関係が??
と思われた方もいらっしゃるかもしれませんが、ソフトウェア開発の現場において、似たような事例は数多く存在するように思われる方も多いのではないでしょうか?(似たような言葉に割れ窓理論というものもありますね)
私は組織の中でQAという役割・機能の必要性を説く際に、よくこの事例を引用します。第三者性をもって品質を担保する事の重要性を、端的に表している言葉・事例ではないでしょうか。

まとめ

ソフトウェア開発におけるQA=品質保証の位置づけ、そして第三者としての視点をもったQAの必要性についてお話をさせて頂きました。
開発者自ら行うテストとの差異についても記載しましたが、優劣の問題ではなくどちらも同様に大切であり、どちらか一方だけやれば良いというものではありません。
組織や開発の規模、開発スタイル、求められる品質基準は企業・団体により様々ですが、「テスト」と「QA」の両方をバランスよく併用する事でソフトウェアの品質向上及び開発プロセスの改善・効率化に大きな効果を発揮すると思います。
ご清覧いただきありがとうございました!

最後に

アソビューでは一緒に働くメンバーを募集しています! QAエンジニア・スペシャリストも絶賛募集中ですので、ぜひ採用ページをご覧ください!

www.asoview.com

開発チームが開発生産性に対して裁量権を持つ重要性

アソビューでエンジニアリングマネージャーをしている服部です。

事業会社で自社ITサービスを運営しているプロダクト開発組織は開発において様々な裁量権を持っています。
アソビューのプロダクト開発組織にはプロダクトマネージャー(PdM)、CTO、TechLead、エンジニアリングマネージャー(EM)、開発チームの大きく5つの役割があります。

今回は開発チームが持っている裁量権の重要性に関して考えていることを書いていきます。

プロダクト開発組織が持つ裁量権とは

まず、事業会社のプロダクト開発組織はどういった裁量権を持っているのでしょうか。
会社の組織構造や文化・事業戦略等に依存しますが、下記のような裁量があると考えています。

  1. プロダクトの機能と優先順位の決定
  2. リリース計画とスケジューリング
  3. 技術選定とアーキテクチャの設計
  4. 開発手法・プロジェクト進行管理方法の選定
  5. ユーザーリサーチ手法の選択
  6. 予算管理と人員配置

プロダクト組織全体だと1~6の裁量権はありますが、 「実行する責任はあるが、説明する責任は無い」等、責任の範囲がプロダクト組織内に存在する役割に依存していることが多いと考えています。
アソビューのマーケットプレイス事業での開発を例に、RACIマトリクスを用いて役割と責任の所在を見える化することで、実際にもつ裁量を見える化してみます。

RACIチャート
R: 実行責任(Responsble) A: 説明責任(Accountable) C: 協業先(Consulted) I: 報告先(Informed)

このチームの場合、「リリース計画とスケジューリング」と「開発手法・プロジェクト進行管理方法の選定」に実行と説明の責任、また「技術選定とアーキテクチャの設計」に協業先としての責任を持っています。
他の事項に関しては報告を受ける立場ではありますが、明確な責任はありません。

「リリース計画とスケジューリング」と「開発手法・プロジェクト進行管理方法の選定」と「技術選定とアーキテクチャの設計」に裁量を持っているということは、
「最短でプロダクトを成長させるために、今いる人数で利用する技術や開発手法を工夫する」ことに責任があると同義であり、チームの開発生産性に裁量を持っていると言い換えられます。

事業成長とプロダクト開発の関係

事業の成長にプロダクトの成長は欠かせません。
休日の便利でお得な遊び予約サイト「アソビュー!」ですと、

  • 新しい商品を陳列するための開発
  • 商品の情報を豊富に掲載するための開発
  • ゲストがもっと商品を見つけやすくするための開発
  • etc…

挙げ始めるとキリがないですが上記のような開発をなくしては、事業は緩やかな成長しか見込めません。
プロダクト組織の開発生産性が事業を左右すると言っても過言ではありません。

リリースの期日を自由に変更できるという勘違い

採用面談をしていると、「事業会社なので開発チームでリリースの日程を決められるんですよね?」
と聞かれることがありますが、これに対しては半分YESで半分NOです。
SESや受託開発はリリース期日が決められており、それに間に合わせるための契約をしているため、原則リリース期日を受託会社からの提案で変更するということはできません。
事業会社であれば、社員は直雇用なのでリリース期日を緩めることができる。と思われている方がいらっしゃるのかもしれません。ですが、事業会社は事業成長とプロダクト開発が密接に関わっています。
リリースの期日をチームに任せてはいますが、緩めることを許容しているわけではありません。
リリースの期日を緩めるのは、事業成長を鈍化させており最終的には自分たちの首を締めていることになるからです。

ただし、例外として緊急対応が重なってしまったり、着手中案件よりも優先度が高いものをどうしても実施する流れになった場合は上記の限りではないです。

持っている裁量権を工夫して、事業成長に貢献してほしい

事業会社のプロダクト開発組織では弊社と同じように、開発生産性に対して開発チームが裁量権を持っていることが多いのではないでしょうか。
開発生産性に対して責任を持っているということは、事業成長を推進するのも停滞させるのも開発チームに委ねられていると言っても過言ではないです。
スクラム開発をやっているけれどウォーターフォールに変えてみるだったり、CI/CDの高速化を専門チームに任せずやってみる、などなど既存の枠組みにとらわれずやれることはたくさんあると思います。

開発チームには、持っているこれらの裁量権を駆使して、どうすれば事業成長に貢献できるか考えて行動してほしいと考えています。

最後に

アソビューでは一緒に働くメンバーを募集しています!
事業成長や組織改善にコミットしたいエンジニアの方がいらっしゃいましたら、 カジュアル面談もありますので、少しでも興味があればご応募いただければと思います。 www.asoview.com

アソビュー!の技術情報を発信する公式アカウントもありますのでぜひフォローお願いします! https://twitter.com/Asoview_dev

エンジニアがDATA Saberになぜ取り組むのか?「データを活用して知見(Insight)を得る」一連のプロセスを学ぶ

アソビューのデータ基盤ユニットでデータエンジニアをやっている米澤です。

本日は私が現在取り組んでいる「DATA Saber」という、BIツール「Tableau」を学ぶプログラムについて語ってみたいと思います。

私の経歴

このブログに投稿するのは初めてなので、まず自己紹介を。

私は2023年3月からアソビューにJOINいたしました。 経歴はちょっと変わっていて、以下のような職種の変遷を辿っており、アソビューは6社目になります。

  1. エンジニア
  2. Webディレクター
  3. Webマーケッター
  4. データアナリスト
  5. データサイエンティスト
  6. データエンジニア

この経歴なので、厳密なエンジニアかと問われると自分でもよくわかりません。 興味・関心がある仕事にジョブチェンジし続けていたら、今の職種(職場)にたどり着いたという感じです。現在はデータエンジニアとしてお仕事しているので「エンジニア」という立ち位置ですが、今後はまた別の職種に就いているのかもしれません。

同じような経験値を積んでいる方は少ないかもしれませんが、私の目線で得た何かしらの知見をブログで公開することで、何か1つでもみなさまのお役に立てれば嬉しいです。

DATA Saberとは

DATA Saberについて、このブログで取り上げるのはこれが初めてではありません。

以前、弊社のCPO(Chief Product Officer)である横峯が下記のブログを書いており、DATA Saberそのものについて詳しく書かれていますので、詳細はこのブログを見ていただいた方が良いかと思います。

tech.asoview.co.jp

私が実際に取り組んだ中で感じた点から概要をお話すると、BIツール「Tableau」を学ぶための無料のプログラムです。

Tableauには、Tableau社が提供する公式(有料)の資格がいくつかありますが、これらの資格とは一線を画します。DATA SaberではTableauについても学びますが、「データを活用して知見(Insight)を得る」一連のプロセスを学ぶプログラム、だと感じています(よって、ここで学んだことはExcelでの分析でも多少は使えます)。自分の業務の中で何かしら疑問を持ち、仮説を立てて、その仮説をデータを使って検証していく、所謂PDCAサイクルをより細分化したプロセスだと思います。

なぜ取り組むのか?

では、なぜエンジニアの自分がそのプログラムに取り組むのか?

私の経歴は前述の通りですが、元々データを見るのは好きでした。細かい作業も好きで、データ分析を楽しいと思える性格だと思います。なので、データアナリストという仕事もそれなりに楽しくやっていました。訳あってジョブチェンジはしましたが、今でもデータを見るのは好きです。前職でもTableauを使っていました。

なので、正直言って、そんな自分がこのプログラムに取り組むのはそれほど苦ではありません。 しかし、これはあくまで私の性格に依った要因で、このプログラムに取り組んでいる理由ではないです。

理由は、私が「データエンジニア」だから、です。

データエンジニアはこの業界でもまだ新しい職種かと思います。 アソビューにJOINして半年以上データエンジニアとして業務を行ってきて、データエンジニアはデータ基盤を構築してデータを活用する人にパスするだけの仕事ではなく、組織において「データを活用する」ための潤滑油になるべき職種だと感じています。データを「水」と考えたときに、もちろん蛇口から綺麗で安全な水が出ることを保証する「配管工=データエンジニア」と考えることもできますが、その水を使ってどんな料理を作るのか?という「料理人」の気持ちを理解する必要があると思っています。そのためには、自分自身も「料理ができる」ことが重要。そうすれば、どんな水(データ)が欲しいのか、が本当の意味で理解できるようになる。現時点で、私はデータエンジニアをそう捉えています。

このプログラムに合格すれば、いきなりその資格が得られる、とは思いませんが、その目標に一歩近づくことはできます。 それが、私がこのプログラムに取り組む理由です。

プログラムのその先

DATA Saberのプログラムは3ヶ月で終わりますが、重要なのはその後です。

私は、あまり特定の職種だけに限定して仕事をするのが好きではありません。専門性は大事ですが、専門分野に閉じこもって、その領域以外の仕事をしない、という態度が好きではない、と言い換えても良いです。

データ分析は、データアナリスト(サイエンティスト)などの専門職種の人にお任せすべき部分もありますが、どの職種であっても自分で行うべきことだと私は考えています。 どの職種にも自分達に関わる何かしらのデータがあり、そのデータを活用することで、業務が改善する余地が必ずあります。そのためには、自分でデータを見てみよう、簡単なもので良いから分析してみよう、という気持ちが大事です。Tableauにこだわる必要はないですが、このツールは「ちょっとデータを見てみよう」という気持ちに答えてくれるツールだと感じてます。

アソビュー社で、データエンジニアの役割を果たしながら、データ活用推進の手助けをどう行っていけば良いか?

仮にDATA Saberになれた(試験に合格した)として、その先に待ち構えている大きな課題ですが、取り組んでいきたいと思います。

アソビューでは「生きるに、遊びを。」をミッションに、一緒に働くメンバーを募集しています。ご興味がありましたらお気軽にご応募いただければと思います。

www.asoview.com

新規プロダクト開発におけるプロジェクトマネジメント 理想 vs 現実

はじめに

自己紹介

こんにちは。 アソビュー株式会社にてプロジェクトマネージャーをやっております杉浦と申します。

これまでに携わったプロジェクト

私はこれまで10年以上に渡り在庫管理システムや生産管理システム開発のプロジェクトマネージャーをやらせていただいてきました。現在アソビューでは新たな領域におけるプロダクト開発に挑戦しており毎日四苦八苦しながらも来たるべきローンチに向け邁進しております!

プロジェクトマネジメントについて

今日はこれまでの私の経験から新規プロダクト開発におけるプロジェクトマネジメントの難しさや課題について共有させていただけたらと思います。

プロジェクトマネジメント

プロジェクトマネージャーの仕事

プロジェクトマネジメントにおけるタスクについてはその開発規模やプロダクトの性質により変わりますがITシステムの開発については概ね下記のようなものがあります。

タスク 内容
交渉    業務担当者や経営者等のステークホルダと交渉します。具体的には納期やスコープの調整、予算調整等がありますがプロジェクトも終盤になると"機能を削らせてほしい"、"納期を遅らせてほしい"、"予算を増やしてほしい"等発注者側からするとネガティブなお願いをすることが多く最も忍耐が必要なタスクの1つです。
調整 ユーザー部門やその他関連部門とプロダクトリリースの順番やそれに合わせた運用スケジュール諸々の調整を行います。外部リソースの調達や協力会社への業務依頼なども含みます。
計画 プロジェクト全体のマイルストーン~開発フェーズ毎の詳細なスケジュール管理までステークホルダや開発フェーズにより必要に応じた異なる粒度の計画を見積や事業計画等を前提に作成します。
見積 見積の方法にはファンクションポイント法や積上、トップダウン、三点見積・・・等古来から様々な見積方法がありますが大変難しくプロジェクト失敗の要因として最も多いのがこの見積です。どのようにやっても概ね3割程度の誤差が出るので今後はAI等を活用するのがいいように思いますし誤差の範囲としてはそれほど大差ないのではないかとすら思います。
コスト管理 開発人員リソース、インフラの運用コスト、開発・検証等用のハードウェアやデバイス等が主なコストになりますがITシステム開発のコストは開発人員リソースが大部分を占めるためプロジェクトが炎上すればするほど致命的なコスト増につながります。
リスクヘッジ 個人的にプロジェクトマネジメントにおいて最も重要タスクと思っています。納期、品質、特許等リスクは多岐にわたりますがプロジェクト開始時点からどの程度リスクを拾えるかがプロジェクト成功のカギになりますので可能な限りリスクを洗い出し先手先手を常に打ち続けることが重要です。
要件定義 アプリケーションが何をするのかを定義していきます。粒度は様々ありますがこれといって定められた表記法も無くあいまいになりがちです。システム開発の肝となるタスクで完成したプロダクトが使えないのは要件定義がポンコツだからと言っても過言じゃありません。個人的には要件定義は質より量、書き方より漏れが無いだったりあいまいじゃないといったところに価値を置いています
上記以外 上記以外にもテスト計画、セキュリティ、リリース計画、保守計画、特許・法務等色々あったりします。

理想 vs 現実

ITプロダクト開発についてはこの20年間くらいの間に様々な開発技法やプロジェクト運用方法等が生み出されてきました。どれも素晴らしい技術なのですがなぜか十分に活かしきれないケースが多いように思います。ここではいくつか掻い摘んでその原因や私なりの解決法を説明したいと思います。

1. アジャイル開発は難しい

一般的にアジャイル開発は素晴らしく一早くウォーターフォール開発を脱却しアジャイル開発に移行すれば開発者は皆救われる!!と思われていますが実施にやると何故かうまくいかないというかなかなかアジャイルにならなかったりします。その原因を少し考えてみました!

  • 長期間リリースできないので実質ウォーターフォール開発だ!

上記の絵はMVP開発でよく使用される資料なのですが簡単に言うと

小さなプロダクトを少しずつ作って都度顧客からフィードバックをもらいながら作るから最終的に出来上がるプロダクトは(この絵の場合車!)は顧客の要望からズレてないはずだ!

を説明していますが実際にやろうとするとなかなかうまくいかないことが多いです。良くあるのが上の絵でいうところのスケボーの開発に3カ月くらい必要だったりします。モックを使ったりすれば早いのですがそれだったら正直figmaのシミュレータを使用した方がよっぽど早くフィードバックを得られます。

  • ある程度機能が結合してないと興味を持ってもらえない

モック等を使用してある程度のフィードバックは得られます。ただ、プロダクトの本質的な課題に関する指摘等はある程度の機能が実装されていないと得られません。例えば

QRコード出荷指示書を発行しハンディターミナルでQRコードをスキャンするとダッシュボードに出荷実績が追加される

といった要件がある場合、出荷指示書のモックを作成し提供すると出力項目の内容やその表示位置に対してフィードバックは得られやすいです。

          

但し上記のようにQRコードが並んでいた場合、実際にスキャナを使用すると頻繁に誤スキャンが発生したりします。これはスキャナがカメラでスキャン範囲のQRコードを認識しているため、QRコードはある程度コード間の距離を置いて表示するか少しずらして表示する必要があったりします。こういったことは実際にスキャンしてみないと分からなかったりします。しかしながらこういった実際でのアプリケーションの挙動が現場では最も重要だったりするものです。

  • 誰が仕様を決めるのか?

アジャイル開発はスクラム開発やXP、リーン開発等の総称ですがXPでいうところのオンサイト顧客、スクラムでいうところのプロダクトオーナーがプロダクトの要件については責務負うとされています。しかしながら実際はプロダクトオーナーをプロジェクトマネージャーが兼務している場合が多く、マネジメント業務に忙殺されるようなことがあると仕様が策定できずスプリントが回らなくなります。個人的にはプロジェクトマネージャーとプロダクトオーナーとは兼務すべきでないと思っています。顧客の要求を分析しこれを要件や設計モデルに落とすアジャイルサムライ で言うところのドメインマスターなる役割を専門的に担うメンバーがスクラムには必要と感じています。

  • どうやって仕様を決めるのか?

ひと昔前まではユーザーからシステム要求を聞き出しそれをエクセルシートにまとめシステム要件としていました。この手法にはいくつか欠点があり、その一つが限られた少人数によってシステム要件が確定するためシステム要求に対して抜けや漏れが発生しやすいということでした。そこで登場したのがユーザーストーリーマッピングです。内容は割愛しますがユーザーストーリーマッピングを実施すると複数の意見を得られるため抜けや漏れを防ぎやすくなります。ユーザーストーリーマッピングの運用で注意したいのは、ユーザーストーリーマッピングを開発メンバーだけで行ってしまうことです。ユーザーストーリーマッピングのメンバーにはユーザー部門から開発領域となるドメインに関して深い見識を持つメンバーが不可欠です。例えば、勤怠管理システムを作る場合等はバックオフィス系の機能を除けば比較的うまくとは思います。それは勤怠管理が私たちにとって身近でありシステム要求を抽出すことが比較的容易だからです。ところがこれが生産管理システム等の一般的には馴染みの薄い業務ドメインに深く関わるシステムとなると話が変わってきます。生産管理に関するナレッジがメンバー間に無い場合、生産管理に使用する作業指示書であったり部品表といった主要なモデルを抽出できないため要求分析の段階で手詰まりとなる可能性が高いです。

  • じゃあ結局どうする!?

アジャイル開発については色々課題はありますが、システム要求の変化の速さが著しい現代においてウォーターフォール開発を続けていくことはリスクが高いように思います。そこで私は下記のようななんちゃってアジャイル的な手法でプロジェクトを進めることが多いように思います。こうすると完ぺきではないにしろまぁまぁなところには着地できたりします!

  • なんちゃってアジャイル
    • 最初はスケボーじゃなくてギリ走れるくらいの車を作る。走れるようになったらユーザーに見てもらう
    • 車ができるまではmockの代わりにfigma等のツールを使ってフィードバックを得る。figmaと同じくらい高速に実装できるならmockでもOK
    • ふんわりとした要件書を作ってこれをスプリントの入力とする。細かい仕様はユーザーのフィードバックを得ながら練り上げる
    • 詳細な仕様などは時間をかけても良いので開発者に口伝で伝える。実装と要件書の乖離を認め場合によっては実装を正とし要件書の方を寄せておく
    • ユーザーストーリーマッピングには必ず本物のユーザーを含める
    • 納期は可能な限りぼんやりさせておく。ユーザーには開発状況によるスコープ調整の可能性を匂わせておく

2. タスク管理は難しい タスク管理はプロジェクト管理において最も重要なタスクの一つです。タスクを積み上げた結果で見積を行ったりリードタイム計算しスケジュールを定めたりします。また管理者は逐次計画に沿ったタスクを開発者に投入し開発者が目の前のタスクに集中すれば、何れゴールにたどり着ける環境を作ることが重要です。

  • 何年やっても見積は当たらない

見積もりが何故ずれるかという説明の1つに不確実性コーンというものがあります。ざっくり説明するとプロジェクトの初期段階では不確定要素が多いので見積もりには4倍くらいの誤差があり、プロジェクトの進行とともに不確実な部分が少なくなってきて誤差は収束に向かうという話です。但しこれを高らかに宣言したところで受けれてもらえないユーザーがほとんどかと思います。

特にSierの場合要求の完了の段階で概算見積という名の正式見積を発行し、これが修正されることは非常に稀です。実際には下記の図でハイライトした部分の誤差のみが認めてもらえます。下振れは許されても上振れはゆるされないことが多いのです!回避方法としてはフェーズ毎に契約を細かく分けるなどがありますが実際はこれに応じてくれる顧客はあまり多くはありません。

  • 結局納期が1番大切!

納期と品質をトレードオフするなら絶対に品質だと思います。しかし多くの場合品質を犠牲にしてでも納期を守ることを余儀なくされます。プロジェクトの成否を予算や利益で測るのならば予定の期日までに先に宣言した品質で納品できたプロジェクトが成功ということになります。ただ予定の期日に完了を合わせるのは実際には大変難しくその理由は様々ですが結局そのためには品質を妥協したりスコープを調整して機能を落としたりします。個人的には契約の時点で未来を予見し納品の期日をピタリと当てたりすることにどれほどの価値があるのか疑問です。期日通りにアプリケーションを使い始めるとどれだけ便益に寄与するのかがいまいち理解できません。

  • ストーリーポイントの罠

上記はバーンダウンチャートと言って、現在のタスクの総量や1日あたりのベロシティ(生産能力)をストーリーポイントという基準値をもって評価し、タスクの完了までにかかる日数を計算するチャートです。実はこのストーリーポイントには注意が必要です。例えばタスクの総量が500spでベロシティが50spだったとします。必要日数は10日になるはずですが実際はそうはいきません。現在のアプリケーションエンジニアリングは最低でもフロントエンドとバックンドで分業となる場合が多いです。タスク総量500spの内、全てがバックエンドのタスクでバンクエンドのベロシティが25spだったと仮定した場合、10日ではなく20日が必要なリードタイムになります。そのためストーリーポイントやベロシティもバックエンドとフロントエンド、もしくは開発領域が属人的になればなるほど細分化しないと正確な製造リードタイムは分かりません。実際には開発者は1日中開発をしているわけではなく、打合せに参加していたり新しいアーキテクチャやテクノロジーについてのキャッチアップに時間を割いていたりします。そのような間接的な作業時間も含め可動率を考慮しリードタイム計算したうえでスケジュールを管理する必要があります。あとタスク間の依存関係やクリティカルパスも重要でベロシティが足りていてもタスクの依存関係の問題で次のタスクに仕掛かれない状況も発生します。スケジュール管理者は開発者の手待ちが発生しないように常に100%可動できる状況を作る必要があります。

  • じゃあ結局どうする!?

結局のところ開発スケジュールを完全にコントロールすることは私にとって極めて難しいのであきらめます。その代わり嘘偽りなくこれを顧客と共有しプロジェクトが最良の結果をもたらせるように不断の努力を継続することが大切です。プロジェクトの目的の納期に間に合わせることではなくどれだけ有益なプロダクトを提供できるかだと思っているからです。

  • 私が心がけているタスク管理はこれ!
    • クリティカルパスを考慮した本当の納期を把握する
    • 契約内容等にとらわれず真実の納期を顧客に偽りなく報告する
    • 可能な限りリスクを可視化し工数を積む
    • 将来の負債を今現実としてとらえる
    • 機能に優先順位をつけスコープ調整含めギリギリまで顧客と調整し続ける
    • 最重要はプロダクトの価値!

余談ですが先日車を購入したんですが注文してから納車までに半年かかりました。最初に概ねの納車時期を確認しその後納車日の近くになるとディーラーから納車できる旨の連絡が来ました。納車を待つのは私だけでなく世の中みんなそうなので特に腹も立ちませんでしたし問題とも思いませんでした。システム開発もこれくらいおおらかだと皆んな幸せになるように思います。

おわりに

今回は私が普段行っているプロジェクトマネジメントについて少しでも知ってもらえたらと思い書かせていただきました。書いていて思ったのですが自分はまだプロジェクトマネージャーとして未熟な点が多々あり最近それがやっとわかってきたということです。これまでプロジェクトマネジメントについてエンジニアの経験によるなりゆきでやってきた部分が多く技術的に向き合ってこなかったと反省しています。実はプロジェクトマネジメントにも色々スキルや技法があるのですが実際には活用されていなかったり学ぶ機会も限られていたりします。今後はこういった技術を積極的にキャッチアップし今開発中のプロダクトが少しでも誰かにとって有益なものになるよう日々精進していきたいと思います。

www.asoview.com

システム障害への備えと、いざというときの動き方

こんにちは、アソビューCTOの江部です。

ようやく暑さが少し緩やかになって、夏の終わりを感じるようになった今日このごろ、皆様いかがお過ごしでしょうか。 アソビューは毎年、とくにゴールデンウィークや夏休みが繁忙期になるのですが、今年もなんとか乗り切ることができて安堵しているところです。

今回は、システムを運用する会社であれば避けては通れないシステム障害への備えについて、アソビューの取り組みを紹介しようかと思います。

弊社のサービスは、一般的には予約サイトと認知されていますが、コアとなるシステムにはレジャー施設・イベント向けに提供しているチケット発券および入場管理SaaSがあります。 各レジャー施設の売上とオペレーションを支えるミッションクリティカル度合いの高いシステムになっていますので、いざ問題が発生した場合、重大なケースでは全国の施設の現場で大混乱が起こるなど、ただではすまない事態となります。 そういった涙なしでは語れない様々な苦境をのリ超えて来たわけですが、その経験から障害に対する備えといざというときの対応フローが確立されてきました。 ということで、いざ障害に向き合う際に、あわてず効率的に動けるような取り組みや決め事を、一部ですが簡単に紹介します。 特に、一般的に企業で準備されるインシデント対応フローのフォーマットに表れない部分を取り上げていければとおもっています。 業種や業態などによってとるべき対応が異なることは大いにあるかとおもいますが、誰かの参考になれば幸いです。

障害発生報告と対応開始までの流れをルール化する

第一発見者のアクション

いざ問題が発生したときに、全員が迅速に動けるよう、ルール化し事前に周知しておくようにしましょう。 とくに、障害発生の疑いがあった場合にファーストアクションとしてどうすべきかは、誰でも第一発見者になりうるので、全員ルールを把握しておくことが大事です。 アソビューの場合は、非常にシンプルで

とにかく疑わしかったら24時間365日、Slackのhotlineチャンネルに@channelに報告する

というルールにしています。

投稿された報告

重要なポイントとしては、

第一発見者になった場合の報告の心理的ハードルを下げることです。 こういった広範囲に通知のいくような投稿は誰しも躊躇するものです。

  • 自分だけの事象だったらどうしよう
  • まちがって報告してお騒がせにならないかな・・

などの心配もあるとはおもいますが、

結果的に誤報でも全然OK! おしえてくれてありがとう!

というルールとスタンスを明確にすることが重要です。

障害発生宣言とコミュニケーションチャンネルの開設

つぎに、報告があがってから対応開始するまでの一連の流れです。

  1. 報告された内容を調査した結果障害であると判断された場合、障害発生を宣言
  2. 障害対応専用のSlackチャンネルを開設
    • 関連する情報を集約し、分散をせぐことにより状況の見通しをよくするため
    • 命名規則: #incdent_YYYYMMDD_[障害タイトル]
  3. Pagerdutyを発火し各領域のキーマン全員に対して通知する。
    • 業務時間外に規模の大きい障害が発生し広範囲の対応が必要と想定される場合に発火
  4. オンラインのブリッジコールを開設する。
    • 顧客対応の話題とシステム対応の話題が混合しないよう、システム復旧チームと顧客対応チームを分けて開設する。
    • ブリッジ役は両方のチャンネルに参加する。

上記の4ステップはどんな内容かに関わらず自然に動けるよう、とくに繁忙期前にフローの読み合わせを行います。

障害発生時の対応責任者を事前に決めておく

障害が発生した場合、それぞれの領域の責任者およびその代行者、代行順位を決めておくことで、誰が旗を振るべきかを事前に明確にしておきます。 アソビューの場合では以下の領域で、それぞれ代行順位4位までを設定しています。

  • 顧客(対ゲスト・・・一般消費者)
  • 顧客(対パートナー・・・レジャー事業者)
  • システム
  • ブリッジング役・・・顧客担当とシステム担当間の橋渡し役

各対応チームのフォーメーションと役割を事前に決めておく

どのようなシステム障害であっても、調査・復旧・根本対応・再発防止・報告の一連のやるべきことはそう大差ありません。 スポーツのフォーメーションのように、ある程度ポジションを決めておいて、いざ発生したときにはポジションに人をアサインしていくことで初動を効率的に行うことができます。 アソビューでは以下のようなフォーメーションを事前に想定しています。

コマンダー

システム担当対応責任者として障害対応の旗振り役を担う。対応方針の決定、担当者の指名、各担当者への作業指示、報告等を担う。通常はCTOまたはそれに次ぐマネジメント上位者が担当。

原因調査担当

発生している現象の原因調査とそのための情報収集を任務とする。障害領域の開発担当が担うケースが多い。

応急処置担当

定めた手順・ルールに則りサービスの再起動、軽微な修正コードのデプロイなどを行い復旧を試みる。SRE+αで対応することが多い

影響範囲担当

ある程度原因が判明したタイミングで、上記以外の人員で影響範囲を確認する

根本対応担当

原因判明後、障害の原因に対する根本的対応を行う

記録担当

発生したイベントや実施した対応をタイムラインで記録したり、ドキュメント上の情報を整理したりする。

上記のポジションは各事象によってコマンダーがタイミングや必要性を判断してアサインします。 場合によっては流動的に変える事もあれば、複数兼務するケースもありえます。 このようにある程度TODOを想定したポジションを想定しておくことで、全員が同じボールを追いかけるような非効率な動きにならないようにすることができます。

責任者とポジションのイメージ

ブリッジング担当者について

顧客対応の担当者(営業メンバーやカスタマーサポートなど)は、顧客からの問い合わせや報告に対応するために、タイムリーに状況を把握しておく必要があります。

一方で、システム担当は目前の障害への対応に注力しているので、細かいレポーティングをすることは難しいことが多いです。

これらをつなぐ役としてブリッジング役を設置し、システム対応および顧客対応両方のオンラインミーティングに入室します。ブリッジング役は、システム対応チームの状況を取りまとめて適宜顧客対応チームに情報共有を行います。

システムチームの会話を理解し適切に翻訳できる知識とコミュニケーションスキルが求められるので、役割を果たせる人員は限られていることが多いです。よって予め想定する人とその代行者を決めておくことが重要です。(アソビューではプロダクトとビジネスの理解の範囲が広いCXOクラスが担います。)

記録用共同編集ドキュメントを早期に用意する

記録担当となる人が、障害対応開始から早期に共同編集ドキュメントを用意し共有します。 このドキュメントに対応メンバーで随時追記していき、誰でも閲覧できるようにします。 弊社ではConfluence上に記録しています。

障害対応メモ

この記録は障害報告書のベースになり、かつポストモーテムを効果的に実施するために必要不可欠な情報となります。 あとでまとめて正確に書き起こすのはかなり大変なので、対応実施の都度きちんと記録を残しておくことが重要です。 報告書と同様のフォーマットで残しておくと便利です。

  • 発生事象
    • 何が起こったか
  • 経緯・復旧作業の対応履歴
    • 〇〇時〇〇分: DB再起動、〇〇時〇〇分: 〇〇の修正をデプロイ、〇〇の復旧を確認、など
  • 影響範囲
    • 顧客軸
    • 機能軸
    • 時間軸
    • 二次被害の有無
  • 原因調査記録と考察
    • ログやデータのスナップショットなど
    • ファクトから導ける仮説とその検証内容
  • 最終的な原因
  • 再発防止策

その他の取り組み、心構え、気をつけること

障害対応は本当に大きいテーマであり、幅も広ければ奥も深い領域なのでなかなかこのブログのみで整理しきるのは難しいのですが、他にもいろいろ抑えるポイントがありますので思いつく限りを羅列してみます。

  • 顧客ファーストで考える。顧客への影響・被害を最小化すること、適時に適切な情報を提供することを第一優先に考える。
  • 日頃から障害は起こるものだということを全社員が認識する。アソビューはアクセスの急激な増加によって痛い目をみたことが何度もあるので、引き金になりそうなイベントや予定の情報を必ず共有するようビジデブのみんなにもお願いをし、全員で障害を未然に防ぐ意識をする。
  • SLOに基づくSRE活動を着実に実行する。
  • 休憩や食事の時間の確保をわすれずとるようにする。(集中してるとわすれがち)
  • 当日中に対応しなければならないことはなにか、可能な限り早めに決める。復旧と最低限の再発防止は時間に関わらず直ちにする必要があるが、必要以上に夜おそくまで対応せず休む。報告事項の整理や継続調査など翌日以降もやることは多い。
  • システムとしての対応が終わったあとも、顧客への説明や謝罪の対応をしている仲間を認識し、必要な支援を提供する。
  • ポストモーテムを実施し組織としての学びにつなげる
    • https://tech.asoview.co.jp/entry/2022/12/14/114049#%E3%83%9D%E3%82%B9%E3%83%88%E3%83%A2%E3%83%BC%E3%83%86%E3%83%A0
    • 再発防止策を確実に実行する。
      • 予防(こうした障害の再発をポジティブに防ぐにはどうしたらいいか)
      • 検出(同様の障害を正確に検出するまでの時間を減らすにはどうすべきか)
      • 緩和(次回この種の障害が起きたときの深刻度や影響度の%を減らすにはどうしたらいいか)
      • 修正(次回障害が検出されたときにどうすればより速く回復できるか)
  • 繁忙期前にはインシデント対応フローの読み合わせを部門横断でおこなう。
    • Pagerdutyの通知発火テストなど、可能な範囲で訓練を行う。

さいごに

いささかまとまりのない文章になってしまいました。 とにかくいざというときに慌てず効率的に動くために大事なことは、事前に想定された準備と心構えにつきます。 アソビューでは着実に規模の大きな障害は少なくなっており、なかなかこういった対応を実践することはあまりないのですが、今後もよりブラッシュアップしていこうとおもっています。

アソビューでは「生きるに、遊びを。」をミッションに、一緒に働くメンバーを募集しています!ご興味がありましたらお気軽にご応募いただければと思います!

www.asoview.com

開発組織におけるマネジメントのアプローチ。プロダクト・プロジェクト・ピープルの3種を改善する方法

はじめに

アソビュープロダクトマネージャーの野上です。
今回は、私が担当している開発組織におけるマネジメントのアプローチについて紹介します。

私の担当について

アソビューに入社してプロダクトマネジメントをメインに25名程の開発組織のリーダーも兼任しています。
弊社メイン事業であるウラカタチケットのプロダクトマネジメントを担当しており、ビジネスと開発をつなぐ役割も担っているためステークホルダーとしては80名超の方とお仕事させてもらっています。
メイン事業のプロダクトマネジメントをしながらチームのマネジメントも兼任している背景から、どのようにマネジメントを行い推進していくかについて少しでも参考になれば幸いです。

背景

昨年11月に入社してすぐ今のポジションを担当させていただいたのですが、着任してすぐいくつか課題が見つかりました。

  • 事業計画と開発計画が紐づいていない
  • 開発優先度が明確になっておらず、また納期設定がされていないまま開発が進んでいる
  • 開発チームメンバーにて役割が明確ではなく、メンバー同士で会話がされていない

こういったチーム状態だったためビジネス側からも「プロダクトマネジメントに加え開発チームを立て直して欲しい」という声を頂いてました。
私自身も事業成長するために必要な開発組織でないことに危機感を覚えたため、どうすれば良いのか課題を整理することにしました。

3つのマネジメントにて整理する

整理した結果、改善すべき点を「事業軸」「案件軸」「人軸」の3つの軸に分けることができました。幸いにも開発チームメンバーの開発スキルに関しては優秀な人が多く技術面に関してはさほど触れる必要はなかったため、マネジメントを整理してメンバーと認識を合わせて推進できれば解決できると思いました。なので、3つの軸について3つのマネジメントをすることを決めました。

  • 事業軸:プロダクトマネジメント
  • 案件軸:プロジェクトマネジメント
  • 人軸:ピープルマネジメント

実際に3つのマネジメントについて整理した上でやるべきことを定義した内容はこちらです。

では、3つのマネジメントについて取り組んでいることを紹介します。

プロダクトマネジメントについて

プロダクトマネジメントの役割は会社・業種業態・組織・事業フェーズによって異なりますが、プロダクトマネージャーとして一番大事なことは「事業成長のために一番ボトルネックになっている課題を改善し続けること」だと思っています。
私が着任して一番の課題だったのは「事業計画にあったロードマップになっていない」ことでした。そのためロードマップを作成するために

  • 事業計画の理解
  • 各ステークホルダーが担当しているKPIの理解
  • パートナー様(ご契約頂いている企業様)が抱えている問題

この3つの事項を重点的に理解するようにしました。とにかくビジネス側と認識があっていないと正しく開発の推進ができないためビジネス側のキーマンにひたすらヒアリングを行いました。さらにパートナー様が抱えている問題を理解するために毎週営業チームに商談を入れて頂いています。
事業計画にあったロードマップを作成するとなるとどうしてもGMVと利益のみにフォーカスされがちですが、それだけではなく企業様の声も理解することで新しいGMVと利益を作るための開発のみではなく運用改善のバランスを取れたロードマップにすることを意識しました。ロードマップを作成するにあたってSLOなど保守も重要であるため開発リソースの余幅も意識するようにしています。

ロードマップについては週1回事業責任者とアップデートのすり合わせを行うことで事業計画と開発の進捗のずれがないようにしています。ロードマップにて事業と開発との接続を実施しています。さらに私自身事業の成功に責任を持つために目標設定に関しては事業責任者と同じ目標(事業計画の数値)を設定しています。そうすることで事業計画を達成するために開発をコミットメントしていくこととビジネス側と開発が一体となることができていると思っています。
※プロダクトマネジメントの詳細については、別のブログで紹介できればと思います。

プロジェクトマネジメントについて

プロジェクトマネジメントについて重要なことは開発案件遂行するために「プロジェクト体制をしっかりと構築し効率良くプロジェクトを完成まで導くこと」です。
プロジェクトマネジメントにてやるべきことを主に3つ定義しました。

  • ロードマップに沿った開発計画の作成
  • 開発計画に沿った開発進捗管理とリソース調整
  • 案件毎に要件定義作成と要件スコープの調整

プロダクトマネジメントにてビジネス側と開発が接続されロードマップも作成できているためプロジェクトマネジメントについてはロードマップに沿って開発計画を作成して案件を遂行していくことがメインになります。
ロードマップにて優先度や納期が整理できるようになり開発スキルに関しては大きな課題ではなかったため、プロジェクトが効率良く推進できるようになりました。

ピープルマネジメントについて

一番大事にしていることは「マネジメントコスト = 人数*時間」にならないようにすることです。理由としては兼任しているためプロダクトマネジメントの時間を確保するために開発の部分については役割を明確にして開発メンバーに裁量を渡すようにしています。

  • ビジネス側とのコミュニケーションをどのように取るか
  • 開発することによってどういった問題解決をしたいかという部分のみを伝えてそれ以降の工程は任せる

これらの裁量を渡すことでメンバー自身が考える機会となり、チームの成長に結びつきます。 任せる上で大事にしていることは

  • 狙いを伝える
  • 失敗をしても怒ったりしない、すぐに課題を明確にしてメンバーと話し合い改善点をすり合わせる
  • チャレンジした上でキャパオーバーするものは手伝うまたは他のメンバーにサポートしてもらう

こういったことを意識しています。裁量を渡すことと丸投げすることを勘違いしがちであるため、そうならないように気を付けることが必要です。

また、特に繁忙期になるとどうしてもタスク消化を優先とし会話が減ってしまうため、チームメンバーと雑談会を月1設定しています。その際は私は聞き役となり近況や心境を聞くようにしています。私だけではなくチームメンバー同士の相互理解にもつながります。お互いを知ることでお互いを配慮したコミュニケーションができるようになり必要に応じてメンバー同士で会話する機会が増えたと思います。

まとめ

マネジメントのアプローチについて紹介させて頂きましたが、なぜそれが必要かは事業成長するために課題解決することが大事でそのためにマネジメントが必要だと思ったからです。
私自身常にどんな課題があっても必ず前に進めるというのを意識し、これを体現していくことで周りからの信頼も勝ち取れ、更に自分に情報が集まりやすくなる好循環が生まれると思っています。 ここで前に進めると表現したのは、必ずしも自分で解決する必要はないと思っています。重要なのは「野上に聞けば何かしら前に進む」と周りから思ってもらえることが大事なので、自分で解決してもよいですし、解決に適任な人に繋ぐこと自体にバリューがあると思っています。
まだまだ課題はありますが、事業成長するために開発組織として前進しています。メンバーも増える予定なためより裁量を渡していき私はメインであるプロダクトマネージャーに専念し事業をリードできるようにしていければと思います。

最後に

アソビューではより良いプロダクトを世の中に届けられるよう共に挑戦していくエンジニアを募集しています。 カジュアル面談もやっておりますので、お気軽にエントリーください! お待ちしております。 www.asoview.com