Ctrl + k

or run

tessl search
Log in

guidewire-prod-checklist

tessl install github:jeremylongshore/claude-code-plugins-plus-skills --skill guidewire-prod-checklist
github.com/jeremylongshore/claude-code-plugins-plus-skills

Production deployment readiness checklist for Guidewire InsuranceSuite Cloud. Use when preparing for production deployment, conducting go-live reviews, or validating environment readiness. Trigger with phrases like "guidewire production", "go-live checklist", "deployment readiness", "production review", "guidewire cloud deploy".

Review Score

84%

Validation Score

13/16

Implementation Score

77%

Activation Score

90%

Guidewire Production Checklist

Overview

Comprehensive production readiness checklist for Guidewire InsuranceSuite Cloud deployment, covering security, performance, monitoring, and operational readiness.

Prerequisites

  • Completed development and testing phases
  • Access to Guidewire Cloud Console
  • Stakeholder sign-off on functionality

Production Readiness Checklist

Security

#ItemPriorityStatus
1OAuth2 credentials rotated for productionCritical[ ]
2Service accounts use least privilege API rolesCritical[ ]
3All secrets stored in secret manager (not code)Critical[ ]
4TLS 1.2+ enforced for all connectionsCritical[ ]
5PII data encryption configuredCritical[ ]
6Security audit logging enabledCritical[ ]
7Input validation on all API endpointsHigh[ ]
8Rate limiting configured appropriatelyHigh[ ]
9Webhook signature validation enabledHigh[ ]
10Penetration testing completedHigh[ ]

Configuration

#ItemPriorityStatus
11Environment-specific configs separatedCritical[ ]
12Database connection pools sized appropriatelyCritical[ ]
13JVM memory settings optimizedHigh[ ]
14Timeout values configured for productionHigh[ ]
15Retry policies with exponential backoffHigh[ ]
16Circuit breakers configuredHigh[ ]
17Feature flags for rollback capabilityMedium[ ]

Performance

#ItemPriorityStatus
18Load testing completed at 2x expected trafficCritical[ ]
19Database indexes optimizedCritical[ ]
20Query performance validatedHigh[ ]
21API response times < 2s for 95th percentileHigh[ ]
22Batch job schedules don't conflictHigh[ ]
23CDN configured for static assetsMedium[ ]
24Caching strategy implementedMedium[ ]

Monitoring & Observability

#ItemPriorityStatus
25Application health checks configuredCritical[ ]
26Error alerting to on-call teamCritical[ ]
27Dashboard for key metrics createdCritical[ ]
28Log aggregation configuredHigh[ ]
29Distributed tracing enabledHigh[ ]
30SLA monitoring configuredHigh[ ]
31Capacity alerts for resourcesMedium[ ]

Data & Integration

#ItemPriorityStatus
32Data migration validatedCritical[ ]
33Integration endpoints point to productionCritical[ ]
34Message queue configurations verifiedHigh[ ]
35Webhook endpoints registeredHigh[ ]
36Backup and recovery testedCritical[ ]
37Data retention policies configuredHigh[ ]

Operations

#ItemPriorityStatus
38Runbook documentation completeCritical[ ]
39On-call rotation establishedCritical[ ]
40Incident response plan documentedCritical[ ]
41Rollback procedure testedCritical[ ]
42Change management process definedHigh[ ]
43Support escalation path documentedHigh[ ]

Validation Scripts

Health Check Endpoint

// Production health check implementation
interface HealthStatus {
  status: 'healthy' | 'degraded' | 'unhealthy';
  version: string;
  timestamp: string;
  checks: {
    [key: string]: {
      status: 'pass' | 'fail';
      latency?: number;
      message?: string;
    };
  };
}

async function healthCheck(): Promise<HealthStatus> {
  const checks: HealthStatus['checks'] = {};

  // Check PolicyCenter API
  checks.policycenter = await checkApiHealth('PolicyCenter', process.env.POLICYCENTER_URL!);

  // Check ClaimCenter API
  checks.claimcenter = await checkApiHealth('ClaimCenter', process.env.CLAIMCENTER_URL!);

  // Check BillingCenter API
  checks.billingcenter = await checkApiHealth('BillingCenter', process.env.BILLINGCENTER_URL!);

  // Check database connectivity
  checks.database = await checkDatabaseHealth();

  // Check message queue
  checks.messageQueue = await checkMessageQueueHealth();

  // Determine overall status
  const failedChecks = Object.values(checks).filter(c => c.status === 'fail');
  let overallStatus: HealthStatus['status'] = 'healthy';

  if (failedChecks.length > 0) {
    overallStatus = failedChecks.length >= 2 ? 'unhealthy' : 'degraded';
  }

  return {
    status: overallStatus,
    version: process.env.APP_VERSION || 'unknown',
    timestamp: new Date().toISOString(),
    checks
  };
}

async function checkApiHealth(
  name: string,
  baseUrl: string
): Promise<{ status: 'pass' | 'fail'; latency?: number; message?: string }> {
  const startTime = Date.now();
  try {
    const response = await fetch(`${baseUrl}/common/v1/system-info`, {
      headers: { Authorization: `Bearer ${await getToken()}` },
      signal: AbortSignal.timeout(5000)
    });

    return {
      status: response.ok ? 'pass' : 'fail',
      latency: Date.now() - startTime,
      message: response.ok ? undefined : `HTTP ${response.status}`
    };
  } catch (error) {
    return {
      status: 'fail',
      latency: Date.now() - startTime,
      message: error instanceof Error ? error.message : 'Unknown error'
    };
  }
}

Configuration Validation

// Validate production configuration
interface ConfigValidationResult {
  valid: boolean;
  errors: string[];
  warnings: string[];
}

function validateProductionConfig(): ConfigValidationResult {
  const errors: string[] = [];
  const warnings: string[] = [];

  // Required environment variables
  const requiredVars = [
    'GW_TENANT_ID',
    'GW_CLIENT_ID',
    'GW_CLIENT_SECRET',
    'GW_HUB_URL',
    'POLICYCENTER_URL',
    'CLAIMCENTER_URL',
    'BILLINGCENTER_URL',
    'DATABASE_URL',
    'ENCRYPTION_KEY'
  ];

  for (const varName of requiredVars) {
    if (!process.env[varName]) {
      errors.push(`Missing required environment variable: ${varName}`);
    }
  }

  // Check for development-only settings
  if (process.env.NODE_ENV !== 'production') {
    errors.push('NODE_ENV must be set to "production"');
  }

  if (process.env.DEBUG === 'true') {
    warnings.push('DEBUG mode is enabled - disable for production');
  }

  // Validate URLs are HTTPS
  const urlVars = ['GW_HUB_URL', 'POLICYCENTER_URL', 'CLAIMCENTER_URL', 'BILLINGCENTER_URL'];
  for (const urlVar of urlVars) {
    const url = process.env[urlVar];
    if (url && !url.startsWith('https://')) {
      errors.push(`${urlVar} must use HTTPS`);
    }
  }

  // Check timeout settings
  const apiTimeout = parseInt(process.env.API_TIMEOUT_MS || '30000');
  if (apiTimeout < 5000 || apiTimeout > 120000) {
    warnings.push(`API_TIMEOUT_MS (${apiTimeout}) should be between 5000-120000ms`);
  }

  return {
    valid: errors.length === 0,
    errors,
    warnings
  };
}

Pre-Deployment Verification

#!/bin/bash
# pre-deploy-check.sh

echo "=== Guidewire Production Pre-Deployment Check ==="

# Check required environment variables
echo "Checking environment variables..."
REQUIRED_VARS="GW_TENANT_ID GW_CLIENT_ID GW_HUB_URL"
for var in $REQUIRED_VARS; do
  if [ -z "${!var}" ]; then
    echo "ERROR: Missing required variable: $var"
    exit 1
  fi
done
echo "Environment variables OK"

# Test API connectivity
echo "Testing API connectivity..."
TOKEN=$(curl -s -X POST "${GW_HUB_URL}/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=${GW_CLIENT_ID}&client_secret=${GW_CLIENT_SECRET}" \
  | jq -r '.access_token')

if [ "$TOKEN" == "null" ] || [ -z "$TOKEN" ]; then
  echo "ERROR: Failed to obtain access token"
  exit 1
fi
echo "Authentication OK"

# Check PolicyCenter
PC_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
  "${POLICYCENTER_URL}/common/v1/system-info" \
  -H "Authorization: Bearer ${TOKEN}")

if [ "$PC_STATUS" != "200" ]; then
  echo "ERROR: PolicyCenter health check failed (HTTP $PC_STATUS)"
  exit 1
fi
echo "PolicyCenter OK"

# Check ClaimCenter
CC_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
  "${CLAIMCENTER_URL}/common/v1/system-info" \
  -H "Authorization: Bearer ${TOKEN}")

if [ "$CC_STATUS" != "200" ]; then
  echo "ERROR: ClaimCenter health check failed (HTTP $CC_STATUS)"
  exit 1
fi
echo "ClaimCenter OK"

echo "=== All pre-deployment checks passed ==="

Go-Live Runbook

T-24 Hours

  1. Final code freeze confirmed
  2. All production secrets deployed to secret manager
  3. DNS changes prepared (if applicable)
  4. Notify stakeholders of deployment window

T-4 Hours

  1. Run pre-deployment verification script
  2. Confirm monitoring dashboards accessible
  3. Verify on-call team availability
  4. Confirm rollback procedure ready

T-0 Deployment

  1. Deploy application to production
  2. Run smoke tests
  3. Verify health check endpoints
  4. Monitor error rates for 30 minutes

Post-Deployment

  1. Document deployment time and version
  2. Notify stakeholders of successful deployment
  3. Monitor closely for 24 hours
  4. Conduct post-deployment review

Monitoring Dashboard Queries

# Key metrics to monitor
dashboards:
  api_performance:
    panels:
      - title: Request Rate
        query: rate(http_requests_total[5m])

      - title: Error Rate
        query: rate(http_requests_total{status=~"5.."}[5m])

      - title: P95 Latency
        query: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))

      - title: Active Connections
        query: sum(guidewire_active_connections)

  business_metrics:
    panels:
      - title: Submissions Created
        query: rate(policycenter_submissions_created_total[1h])

      - title: Claims Filed
        query: rate(claimcenter_claims_created_total[1h])

      - title: Policies Issued
        query: rate(policycenter_policies_issued_total[1h])

Rollback Procedure

#!/bin/bash
# rollback.sh

echo "=== Starting Rollback ==="

# Get previous version
PREVIOUS_VERSION=$(kubectl get deployment my-app -o jsonpath='{.spec.template.spec.containers[0].image}' | cut -d: -f2)
echo "Current version: $CURRENT_VERSION"
echo "Rolling back to: $PREVIOUS_VERSION"

# Perform rollback
kubectl rollout undo deployment/my-app

# Wait for rollback
kubectl rollout status deployment/my-app --timeout=300s

# Verify health
HEALTH=$(curl -s http://my-app/health | jq -r '.status')
if [ "$HEALTH" != "healthy" ]; then
  echo "WARNING: Health check failed after rollback"
  exit 1
fi

echo "=== Rollback Complete ==="

Output

  • Completed production readiness checklist
  • Health check implementation
  • Configuration validation
  • Pre-deployment verification script
  • Go-live runbook

Resources

  • Guidewire Cloud Operations
  • InsuranceSuite Best Practices

Next Steps

For upgrade and migration procedures, see guidewire-upgrade-migration.