mcpField
F
feedback-summarization

feedback-summarization

github.com/happy-technologies-llc生産性4141 回インストール2 日前に更新
リポジトリ

feedback-summarization について

ServiceNow SPM のアジャイルイベント、ステークホルダー調査、プロジェクトレビューのフィードバックをまとめるスキルです。スクラムマスター、プロジェクトマネージャー、リーダーが改善テーマを特定し、アクションを作成してスプリントをまたいで追跡できます。

主な機能

  1. 01スプリントレトロスペクティブとコメントの抽出
  2. 02ステークホルダー調査回答の収集
  3. 03複数の情報源に共通するテーマの特定
  4. 04フィードバックの実行可能な分類
  5. 05優先度付きアクション項目の生成
  6. 06スプリントをまたぐアクション項目の追跡

活用シーン

  1. 01単一スプリントの振り返りフィードバックの要約
  2. 02四半期に繰り返された改善テーマの特定
  3. 03デリバリー品質に関する関係者の意見分析

MCP 対応

ServiceNow MCP ツールでスプリント、調査、ジャーナルデータを照会し、改善ストーリーを作成してレコードに要約を記録します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill feedback-summarization

インストール後、Claude Code で/feedback-summarizationを入力して読み込まれたか確認します。

詳細

フィードバックの要約

概要

このスキルは、ServiceNow SPM 内のアジャイルセレモニー、ステークホルダーアンケート、プロジェクトレビューで収集されたフィードバックを要約します。以下を対象としています。

  • rm_sprint のスプリントレトロスペクティブ記録とコメントからフィードバックを抽出する
  • asmt_assessment_instance のスプリントレビューのメモとステークホルダー評価を分析する
  • 複数のフィードバックソースに共通するテーマを特定する
  • フィードバックを実行可能なテーマ(プロセス、ツール、コミュニケーション、品質、作業負荷)に分類する
  • 集約したフィードバックから優先順位を付けたアクションアイテムを生成する
  • 継続的な改善に向けて、スプリントをまたいでアクションアイテムの解決状況を追跡する

使用するタイミング: スクラムマスターがレトロスペクティブのフィードバックを要約する必要がある場合、プロジェクトマネージャーがステークホルダーの意見を集約したい場合、リーダーシップがチーム横断で繰り返し見られる改善テーマを把握したい場合、または四半期計画会議の準備をする場合に使用します。

価値提案: 散在するフィードバックを構造化されたインサイトに変換し、個々のレトロスペクティブでは見落とされるスプリント横断のパターンを明らかにします。また、イテレーションをまたいで改善アクションを追跡することで、その実行に対する責任を明確にします。

前提条件

  • プラグイン: com.snc.sdlc.agile.2.0(Agile Development 2.0)、com.snc.assessment(任意。アンケート用)
  • ロール: scrum_master、scrum_admin、pa_admin、または admin
  • アクセス権: rm_sprint、rm_story、asmt_assessment_instance、およびジャーナルフィールドのテーブルへの読み取りアクセス
  • 知識: アジャイルセレモニー、レトロスペクティブの形式、チームのスプリントサイクルに関する理解

手順

ステップ 1:スプリントレトロスペクティブのデータを収集する

スプリントレコードと関連するジャーナルエントリーから、レトロスペクティブのフィードバックを取得します。

MCP を使用(Claude Code/Desktop):

Tool: SN-Query-Table
Parameters:
  table_name: rm_sprint
  query: release.product.sys_id=[product_sys_id]^state=3^ORDERBYDESCend_date
  fields: sys_id,number,short_description,start_date,end_date,state,story_points,capacity,retrospective_notes,velocity
  limit: 6

REST API を使用:

GET /api/now/table/rm_sprint?sysparm_query=release.product.sys_id=[product_sys_id]^state=3^ORDERBYDESCend_date&sysparm_fields=sys_id,number,short_description,start_date,end_date,state,story_points,capacity,retrospective_notes,velocity&sysparm_limit=6&sysparm_display_value=true

詳細なフィードバックのためにジャーナル/作業メモを取得する:

Tool: SN-Query-Table
Parameters:
  table_name: sys_journal_field
  query: name=rm_sprint^element=work_notes^element_id=[sprint_sys_id]
  fields: value,sys_created_on,sys_created_by
  limit: 30
  order_by: -sys_created_on
ステップ 2:ステークホルダーアンケートの回答を収集する

スプリントレビューまたはステークホルダーアンケートの評価データを収集します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: asmt_assessment_instance
  query: metric_type.nameLIKEsprint review^ORmetric_type.nameLIKEstakeholder^state=complete^taken_on>=javascript:gs.monthsAgoStart(3)
  fields: sys_id,number,metric_type,user,user.department,taken_on,percent,state,trigger_id
  limit: 50
  order_by: -taken_on

個々の質問への回答を取得する:

Tool: SN-Query-Table
Parameters:
  table_name: asmt_assessment_instance_question
  query: instance.metric_type.nameLIKEsprint review^instance.taken_on>=javascript:gs.monthsAgoStart(3)^metric.datatype=string^string_valueISNOTEMPTY
  fields: string_value,metric.name,metric.question,instance.taken_on,instance.user.name
  limit: 100
  order_by: -instance.taken_on

REST API を使用:

GET /api/now/table/asmt_assessment_instance_question?sysparm_query=instance.metric_type.nameLIKEsprint%20review^metric.datatype=string^string_valueISNOTEMPTY^instance.taken_on>=javascript:gs.monthsAgoStart(3)&sysparm_fields=string_value,metric.name,instance.taken_on,instance.user.name&sysparm_limit=100&sysparm_display_value=true
ステップ 3:スプリントのパフォーマンス指標を分析する

フィードバックを実際のスプリントパフォーマンスデータと関連付けます。

MCP を使用:

Tool: SN-Execute-Background-Script
Parameters:
  description: Analyze sprint performance metrics for feedback context
  script: |
    var productId = '[product_sys_id]';
    var sprintMetrics = [];

    var sprint = new GlideRecord('rm_sprint');
    sprint.addQuery('release.product.sys_id', productId);
    sprint.addQuery('state', 3); // Complete
    sprint.orderByDesc('end_date');
    sprint.setLimit(6);
    sprint.query();

    while (sprint.next()) {
      var metrics = {
        sprint: sprint.short_description.toString(),
        number: sprint.number.toString(),
        dates: sprint.start_date.getDisplayValue() + ' to ' + sprint.end_date.getDisplayValue(),
        planned_points: parseInt(sprint.capacity) || 0,
        completed_points: parseInt(sprint.story_points) || 0,
        velocity: 0,
        stories: { total: 0, completed: 0, carried_over: 0 },
        defects_found: 0
      };

      metrics.velocity = metrics.planned_points > 0
        ? Math.round((metrics.completed_points / metrics.planned_points) * 100) : 0;

      // Story completion
      var stories = new GlideAggregate('rm_story');
      stories.addQuery('sprint', sprint.sys_id);
      stories.addAggregate('COUNT');
      stories.groupBy('state');
      stories.query();
      while (stories.next()) {
        var count = parseInt(stories.getAggregate('COUNT'));
        metrics.stories.total += count;
        var state = parseInt(stories.state);
        if (state >= 3) metrics.stories.completed += count;
        else metrics.stories.carried_over += count;
      }

      // Defects
      var defects = new GlideAggregate('rm_story');
      defects.addQuery('sprint', sprint.sys_id);
      defects.addQuery('classification', 'Defect');
      defects.addAggregate('COUNT');
      defects.query();
      if (defects.next()) metrics.defects_found = parseInt(defects.getAggregate('COUNT'));

      sprintMetrics.push(metrics);
    }

    gs.info(JSON.stringify(sprintMetrics, null, 2));
ステップ 4:フィードバックからテーマを特定する

収集したフィードバックを分析し、繰り返し見られるテーマを抽出します。

MCP を使用:

Tool: SN-Execute-Background-Script
Parameters:
  description: Categorize feedback into themes
  script: |
    var sprintIds = ['sprint_sys_id_1', 'sprint_sys_id_2', 'sprint_sys_id_3'];
    var themes = {
      process: { count: 0, items: [] },
      tools: { count: 0, items: [] },
      communication: { count: 0, items: [] },
      quality: { count: 0, items: [] },
      workload: { count: 0, items: [] },
      positive: { count: 0, items: [] },
      other: { count: 0, items: [] }
    };

    // Keyword mapping for theme detection
    var keywords = {
      process: ['standup', 'ceremony', 'planning', 'refinement', 'workflow', 'process', 'methodology', 'sprint', 'retro'],
      tools: ['jira', 'servicenow', 'jenkins', 'pipeline', 'tooling', 'environment', 'infrastructure', 'slow', 'broken'],
      communication: ['communication', 'unclear', 'alignment', 'stakeholder', 'meeting', 'update', 'inform', 'silos'],
      quality: ['bug', 'defect', 'testing', 'review', 'code review', 'quality', 'regression', 'production issue'],
      workload: ['overloaded', 'capacity', 'bandwidth', 'too many', 'burnout', 'deadline', 'overtime', 'scope creep'],
      positive: ['great', 'improved', 'well done', 'excellent', 'good job', 'kudos', 'thank', 'appreciate']
    };

    sprintIds.forEach(function(sprintId) {
      var journal = new GlideRecord('sys_journal_field');
      journal.addQuery('name', 'rm_sprint');
      journal.addQuery('element_id', sprintId);
      journal.addQuery('element', 'work_notes');
      journal.query();

      while (journal.next()) {
        var text = journal.value.toString().toLowerCase();
        var categorized = false;

        for (var theme in keywords) {
          keywords[theme].forEach(function(kw) {
            if (text.indexOf(kw) >= 0 && !categorized) {
              themes[theme].count++;
              themes[theme].items.push({
                text: journal.value.toString().substring(0, 200),
                sprint: sprintId,
                date: journal.sys_created_on.getDisplayValue()
              });
              categorized = true;
            }
          });
        }

        if (!categorized) {
          themes.other.count++;
          themes.other.items.push({
            text: journal.value.toString().substring(0, 200),
            sprint: sprintId
          });
        }
      }
    });

    gs.info(JSON.stringify(themes, null, 2));
ステップ 5:アクションアイテムを生成する

特定したテーマから、追跡可能なアクションアイテムを作成します。

MCP を使用:

Tool: SN-Create-Record
Parameters:
  table_name: rm_story
  fields:
    short_description: "Retro Action: Implement automated regression test suite for checkout flow"
    description: |
      ## Source
      Sprint retrospective feedback across Sprints 23-25

      ## Theme
      Quality - recurring defects in checkout flow detected late in sprint

      ## Feedback Summary
      - Sprint 23: "We found 3 production bugs in checkout that should have been caught"
      - Sprint 24: "Still seeing regression issues in payment processing"
      - Sprint 25: "Need automated tests before we add more features"

      ## Action
      Create ATF test suite covering all checkout scenarios. Target: 80% coverage of critical paths.

      ## Success Criteria
      - ATF suite running in CI/CD pipeline
      - Zero checkout regressions for 2 consecutive sprints
    classification: Improvement
    priority: 2
    state: -6
    epic: [improvement_epic_sys_id]
    sprint: [next_sprint_sys_id]
    story_points: 8
    product: [product_sys_id]
ステップ 6:フィードバック要約レポートを生成する

すべての分析を包括的な要約にまとめます。

MCP を使用:

Tool: SN-Add-Work-Notes
Parameters:
  table_name: rm_sprint
  sys_id: [current_sprint_sys_id]
  work_notes: |
    === FEEDBACK SUMMARY REPORT ===
    Product: Customer Portal
    Period: Sprints 23-25 (Feb 3 - Mar 14, 2026)
    Sources: 3 sprint retros, 12 stakeholder surveys, 45 work note entries

    SPRINT PERFORMANCE TREND:
    - Sprint 23: 34/40 pts completed (85% velocity)
    - Sprint 24: 38/40 pts completed (95% velocity) - Improved
    - Sprint 25: 32/45 pts completed (71% velocity) - Declined (scope increase)

    TOP THEMES (by frequency):
    1. QUALITY (18 mentions) - Recurring defects in checkout flow, need for automated testing
    2. WORKLOAD (14 mentions) - Scope creep in Sprint 25, team overloaded with support tickets
    3. COMMUNICATION (11 mentions) - Stakeholder requirements changing mid-sprint
    4. TOOLS (7 mentions) - CI/CD pipeline reliability issues causing deployment delays
    5. POSITIVE (9 mentions) - Improved sprint planning, better story refinement

    RECURRING ISSUES (appeared in 2+ sprints):
    - Checkout regression bugs (Sprints 23, 24, 25)
    - Mid-sprint scope changes (Sprints 24, 25)
    - Environment instability (Sprints 23, 25)

    ACTION ITEMS GENERATED:
    1. [P2] Create automated regression suite for checkout (8 pts) - Sprint 26
    2. [P2] Implement change freeze policy for mid-sprint scope (3 pts) - Sprint 26
    3. [P3] Investigate and stabilize CI/CD pipeline (5 pts) - Sprint 27
    4. [P3] Establish support ticket rotation to protect sprint capacity (2 pts) - Sprint 26

    STAKEHOLDER SENTIMENT:
    - Overall satisfaction: 72% (down from 78% last quarter)
    - Key concern: "Delivery predictability has decreased"
    - Key positive: "Quality of delivered features has improved"

    PREVIOUS ACTION ITEM STATUS:
    - [DONE] Improve story refinement process - Completed Sprint 24
    - [IN PROGRESS] Reduce meeting overhead - 50% reduction achieved
    - [NOT STARTED] Cross-training initiative - Deferred to Q2

    RECOMMENDATIONS:
    1. Protect sprint scope with formal change request process
    2. Invest in test automation to reduce manual regression effort
    3. Address stakeholder concern about predictability with revised velocity baseline
ステップ 7:スプリントをまたいでアクションアイテムを追跡する

フィードバックから生成されたアクションアイテムの解決状況を監視します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: rm_story
  query: classification=Improvement^epic=[improvement_epic_sys_id]
  fields: number,short_description,state,sprint,story_points,assigned_to,priority,sys_updated_on
  limit: 25
  order_by: -sys_created_on

REST API を使用:

GET /api/now/table/rm_story?sysparm_query=classification=Improvement^epic=[improvement_epic_sys_id]&sysparm_fields=number,short_description,state,sprint,story_points,assigned_to,priority&sysparm_limit=25&sysparm_display_value=true

ツールの使用方法

MCP ツールのリファレンス
ツール使用するタイミング
SN-Query-Tableスプリント、ストーリー、評価、ジャーナルエントリーを照会する
SN-Get-Record特定のスプリントまたは評価の詳細を取得する
SN-Natural-Language-Searchキーワードまたはトピックの説明からフィードバックを見つける
SN-Create-Record改善ストーリーとしてアクションアイテムを作成する
SN-Execute-Background-Script指標の集計、テーマの分類、一括分析を行う
SN-Add-Work-Notes要約レポートをスプリントまたはプロジェクトのレコードに投稿する
REST API リファレンス
エンドポイントメソッド目的
/api/now/table/rm_sprintGETスプリントレコードとレトロスペクティブデータを照会する
/api/now/table/rm_storyGET/POSTストーリーを照会し、アクションアイテムを作成する
/api/now/table/asmt_assessment_instanceGETステークホルダーアンケートの回答を取得する
/api/now/table/asmt_assessment_instance_questionGET個々のアンケート質問への回答を取得する
/api/now/table/sys_journal_fieldGET作業メモとコメントを読み取る
/api/now/table/rm_releaseGETリリースレベルでフィードバックを集約する

ベストプラクティス

  • 一貫してフィードバックを収集する: 各スプリントで同じふりかえり形式を使用し、期間ごとに傾向を比較できるようにします
  • 要約する前に分類する: まずフィードバックをテーマ別にグループ化してから要約します。生のリストのままでは、実行につなげにくくなります
  • アクションアイテムを正式に記録する: すべてのアクションアイテムについてストーリーまたはタスクを作成します。口頭での約束は忘れられてしまいます
  • 対応状況を共有する: 新しいフィードバックを集める前に、各ふりかえりの冒頭で前回のアクションアイテムの状況を確認します
  • 可能な限り数値化する: 「品質に関する問題」よりも「本番環境のバグ3件」のほうが実行につなげやすくなります
  • 観察結果と推奨事項を分ける: 起きたこと(テーマ)と、それに対して何をすべきか(アクション)を明確に区別します
  • チーム横断で集約する: チーム横断でテーマを分析すると、個々のチームのふりかえりでは見落とされる全体的な問題が明らかになります
  • スプリントごとのアクションアイテム数を制限する: スプリントごとに2~3件の改善アクションに集中します。多すぎると焦点がぼやけます

トラブルシューティング

ふりかえりのメモ欄が空の場合

原因: チームがふりかえりのフィードバックを retrospective_notes フィールドではなく、作業メモ、コメント、または外部ツールに保存している可能性があります 解決策: スプリントレコードについて sys_journal_field をクエリし、作業メモのエントリを見つけます。連携が必要な外部のふりかえりツールをチームが使用していないか確認します。

アンケートの回答がスプリントに紐づいていない場合

原因: 評価インスタンスにスプリントの sys_id が trigger_id として設定されていない可能性があります 解決策: 直接参照ではなく、日付範囲(アンケートの taken_on がスプリントの開始日と終了日の間にあること)でアンケートを照合します。

テーマの分類でフィードバックを見落とす場合

原因: キーワードベースの分類には限界があり、フィードバックで異なる用語が使われている可能性があります 解決策: チーム内で使われている言葉に合わせてキーワードリストを拡充します。より正確に分類するには、NLU またはテキスト分析 API の利用を検討します。

アクションアイテムが完了しない場合

原因: アクションアイテムは作成されているものの、次のスプリントで優先順位付けや担当者の割り当てが行われていません 解決策: スプリント計画にアクションアイテムのレビューを必須のステップとして追加します。改善ストーリーを作成する際は、sprint フィールドに次のスプリントを設定します。

例

例1:単一スプリントのふりかえりの要約

入力: 「スプリント25のふりかえりを要約してください」

手順: 対象のスプリントに対してステップ1、3、6を実行し、テーマ、指標、2~3件のアクションアイテムを含む焦点を絞った要約を作成します。

例2:四半期ごとの改善傾向

入力: 「前四半期に繰り返し現れた改善テーマは何ですか?」

手順: 四半期内のすべてのスプリントに対してステップ1~4を実行し、3回以上のスプリントで現れたテーマを特定してエスカレーションします。

例3:ステークホルダーの感情分析

入力: 「今四半期、ステークホルダーはデリバリー品質についてどう感じていますか?」

# 1. Query stakeholder assessments (Step 2)
# 2. Aggregate scores by question (quality-related questions)
# 3. Extract free-text comments about quality
# 4. Compare with previous quarter
# 5. Correlate with defect counts from Step 3

関連スキル

  • spm/agile-story-generation - 改善アクションアイテムからストーリーを生成します
  • spm/acceptance-criteria - 改善ストーリーの受け入れ条件を定義します
  • spm/project-insights - プロジェクトの健全性とベロシティを追跡します
  • spm/planning-summarization - スプリントとリリース計画を要約します
  • reporting/survey-analysis - アンケート回答を詳細に分析します
  • reporting/trend-analysis - 一般的な傾向分析機能

コメント