Mobile Code Impact Assessment
Overview
Core principle: Systematically evaluate code changes for potential impact on mobile platform functionality, ensuring offline capabilities, API compatibility, and cross-platform consistency remain intact.
Critical assessment: Mobile platform operates offline-first with local storage, synchronization, digital signatures, and field operations - changes must preserve these capabilities.
When to Use This Skill
Trigger Conditions:
- Before deploying any backend API changes
- When modifying data structures or schemas
- Before implementing authentication changes
- When updating database schemas or migrations
- Before modifying file upload/download functionality
- When changing offline synchronization logic
- Before implementing new features that affect mobile users
- When troubleshooting mobile app issues after backend changes
Mandatory Application:
- Required for all backend code changes
- Must be completed before mobile app releases
- Required for database schema changes
- Must be verified before production deployments
- Required for API contract modifications
Step-by-Step Procedure
Step 1: Change Analysis and Categorization
Analyze the proposed code changes and categorize their potential mobile impact:
// Change impact analysis framework
const changeImpactAnalysis = {
changeCategories: {
api_contract_changes: {
risk_level: 'HIGH',
mobile_impact: ['API calls', 'Data synchronization', 'Offline functionality'],
assessment_required: ['API compatibility', 'Response format validation', 'Error handling']
},
data_schema_changes: {
risk_level: 'CRITICAL',
mobile_impact: ['Local storage', 'Data synchronization', 'Offline operations'],
assessment_required: ['Schema migration', 'Data integrity', 'Sync conflicts']
},
authentication_changes: {
risk_level: 'HIGH',
mobile_impact: ['User sessions', 'API access', 'Offline authentication'],
assessment_required: ['Token handling', 'Session management', 'Security compliance']
},
file_handling_changes: {
risk_level: 'MEDIUM',
mobile_impact: ['Document uploads', 'Offline file storage', 'Media handling'],
assessment_required: ['File format support', 'Storage limitations', 'Sync performance']
},
business_logic_changes: {
risk_level: 'MEDIUM',
mobile_impact: ['Workflow execution', 'Validation rules', 'Business rules'],
assessment_required: ['Logic consistency', 'Rule enforcement', 'Error scenarios']
}
},
changeScopeAnalysis: {
database_changes: ['Schema migrations', 'Data seeding', 'Query optimizations'],
api_changes: ['Endpoint modifications', 'Request/response formats', 'Authentication'],
frontend_changes: ['UI components', 'State management', 'User interactions'],
infrastructure_changes: ['Server configuration', 'Caching layers', 'CDN updates']
},
impactSeverityLevels: {
CRITICAL: 'Breaks core mobile functionality - blocks deployment',
HIGH: 'Affects key mobile features - requires immediate attention',
MEDIUM: 'Minor impact on mobile experience - plan for future release',
LOW: 'Negligible impact - monitor in production'
}
};
// Analyze specific changes
function analyzeCodeChanges(changes) {
const impactAssessment = {
categories: [],
severity: 'LOW',
affected_mobile_features: [],
required_testing: [],
mitigation_strategies: []
};
for (const change of changes) {
const category = categorizeChange(change);
const impact = assessMobileImpact(change, category);
impactAssessment.categories.push(category);
impactAssessment.affected_mobile_features.push(...impact.features);
impactAssessment.required_testing.push(...impact.testing);
if (getSeverityLevel(impact.risk) > getSeverityLevel(impactAssessment.severity)) {
impactAssessment.severity = impact.risk;
}
}
impactAssessment.mitigation_strategies = generateMitigationStrategies(impactAssessment);
return impactAssessment;
}
Change Categorization:
- API contract modifications
- Data schema changes
- Authentication system updates
- File handling modifications
- Business logic updates
- Infrastructure changes
Step 2: Mobile Platform Feature Mapping
Map backend changes to specific mobile platform capabilities:
// Mobile platform feature mapping
const mobilePlatformFeatures = {
offline_storage: {
dependencies: ['database_schema', 'api_endpoints', 'file_handling'],
critical_components: ['SQLite_ENCRYPTED', 'FILESYSTEM_ENCRYPTED', 'COMPRESSED_ARCHIVE'],
failure_impacts: ['Data loss', 'Sync failures', 'Offline inoperability']
},
synchronization_engine: {
dependencies: ['api_endpoints', 'conflict_resolution', 'queue_management'],
critical_components: ['HYBRID_SYNC_ENGINE', 'CONFLICT_RESOLUTION', 'DELTA_COMPRESSION'],
failure_impacts: ['Data inconsistency', 'Sync conflicts', 'Performance degradation']
},
digital_signatures: {
dependencies: ['crypto_services', 'certificate_management', 'timestamp_authority'],
critical_components: ['ECDSA_SIGNATURES', 'CERTIFICATE_VALIDATION', 'OFFLINE_SIGNING'],
failure_impacts: ['Legal document invalidity', 'Compliance violations', 'Business process blocks']
},
field_operations: {
dependencies: ['location_services', 'sensor_integration', 'workflow_engine'],
critical_components: ['GPS_TRACKING', 'SENSOR_DATA_CAPTURE', 'OFFLINE_WORKFLOWS'],
failure_impacts: ['Field work interruption', 'Safety compliance issues', 'Productivity loss']
},
multi_modal_capture: {
dependencies: ['file_upload', 'media_processing', 'storage_quota'],
critical_components: ['PHOTO_CAPTURE', 'VIDEO_RECORDING', 'AUDIO_TRANSCRIPTION'],
failure_impacts: ['Evidence collection failure', 'Quality inspection blocks', 'Documentation gaps']
},
user_authentication: {
dependencies: ['auth_endpoints', 'token_management', 'biometric_support'],
critical_components: ['JWT_TOKENS', 'BIOMETRIC_UNLOCK', 'OFFLINE_AUTH'],
failure_impacts: ['App inaccessibility', 'Security breaches', 'User experience degradation']
}
};
// Map changes to affected features
function mapChangesToFeatures(changes, featureMap) {
const affectedFeatures = new Map();
for (const change of changes) {
for (const [feature, config] of Object.entries(featureMap)) {
if (config.dependencies.some(dep => change.type.includes(dep))) {
if (!affectedFeatures.has(feature)) {
affectedFeatures.set(feature, {
feature: feature,
changes: [],
risk_level: 'LOW',
impact_description: ''
});
}
const featureInfo = affectedFeatures.get(feature);
featureInfo.changes.push(change);
// Assess risk level
if (config.critical_components.some(comp => change.affects.includes(comp))) {
featureInfo.risk_level = 'CRITICAL';
} else if (change.type.includes('breaking')) {
featureInfo.risk_level = 'HIGH';
}
// Generate impact description
featureInfo.impact_description = generateImpactDescription(feature, change, config);
}
}
}
return Array.from(affectedFeatures.values());
}
Feature Mapping:
- Offline storage capabilities
- Synchronization engine
- Digital signatures
- Field operations workflows
- Multi-modal data capture
- User authentication
Step 3: API Compatibility Assessment
Evaluate API changes for mobile app compatibility:
// API compatibility assessment
const apiCompatibilityAssessment = {
endpoint_changes: {
breaking_changes: ['URL changes', 'Method changes', 'Required parameter additions'],
compatible_changes: ['Optional parameter additions', 'Response field additions', 'Documentation updates'],
versioning_strategy: ['Semantic versioning', 'Deprecation headers', 'Migration guides']
},
request_format_changes: {
breaking: ['Content type changes', 'Required field additions', 'Field type changes'],
compatible: ['Optional field additions', 'Field format flexibility', 'Backward compatibility']
},
response_format_changes: {
breaking: ['Field removal', 'Structure changes', 'Error format changes'],
compatible: ['Field additions', 'Optional field changes', 'Metadata additions']
},
authentication_changes: {
breaking: ['Token format changes', 'Endpoint protection changes', 'Permission model changes'],
compatible: ['Additional auth methods', 'Token refresh improvements', 'Security enhancements']
}
};
// Assess API compatibility
function assessApiCompatibility(apiChanges, mobileRequirements) {
const compatibilityReport = {
breaking_changes: [],
compatible_changes: [],
migration_required: false,
mobile_app_update_needed: false,
backward_compatibility_maintained: true
};
for (const change of apiChanges) {
if (isBreakingChange(change, mobileRequirements)) {
compatibilityReport.breaking_changes.push({
change: change,
impact: assessBreakingImpact(change),
mitigation: suggestBreakingMitigation(change)
});
compatibilityReport.migration_required = true;
compatibilityReport.mobile_app_update_needed = true;
compatibilityReport.backward_compatibility_maintained = false;
} else {
compatibilityReport.compatible_changes.push({
change: change,
impact: assessCompatibleImpact(change),
benefits: identifyCompatibilityBenefits(change)
});
}
}
return compatibilityReport;
}
// Check if change breaks mobile compatibility
function isBreakingChange(change, mobileRequirements) {
// Check against mobile platform requirements
if (change.type === 'endpoint_removal' && mobileRequirements.critical_endpoints.includes(change.endpoint)) {
return true;
}
if (change.type === 'response_format_change' && change.breaks_existing_parsing) {
return true;
}
if (change.type === 'authentication_change' && change.requires_app_update) {
return true;
}
return false;
}
API Assessment:
- Endpoint compatibility
- Request/response format changes
- Authentication modifications
- Breaking vs compatible changes
- Migration requirements
Step 4: Data Structure Impact Analysis
Evaluate database and data structure changes for mobile implications:
// Data structure impact analysis
const dataStructureImpact = {
schema_changes: {
table_additions: { impact: 'LOW', mobile_handling: 'Automatic sync' },
table_removals: { impact: 'CRITICAL', mobile_handling: 'Migration required' },
column_additions: { impact: 'LOW', mobile_handling: 'Backward compatible' },
column_removals: { impact: 'HIGH', mobile_handling: 'Data migration needed' },
column_type_changes: { impact: 'CRITICAL', mobile_handling: 'Schema migration' },
index_changes: { impact: 'MEDIUM', mobile_handling: 'Performance impact' }
},
data_migration_requirements: {
offline_data_preservation: 'Maintain data during migration',
conflict_resolution: 'Handle concurrent mobile changes',
rollback_capability: 'Ability to revert failed migrations',
testing_validation: 'Verify mobile app compatibility'
},
synchronization_implications: {
data_sync_performance: 'Impact on sync speed and battery usage',
conflict_resolution_complexity: 'Increased conflict scenarios',
offline_functionality: 'Potential offline capability disruption',
data_integrity: 'Risk of data corruption or loss'
}
};
// Analyze data structure changes
function analyzeDataStructureChanges(changes, mobileDataModel) {
const impactReport = {
schema_changes: [],
migration_requirements: [],
sync_implications: [],
mobile_app_impacts: [],
risk_assessment: 'LOW'
};
for (const change of changes) {
const changeType = categorizeDataChange(change);
const mobileImpact = assessMobileDataImpact(change, mobileDataModel);
impactReport.schema_changes.push({
change: change,
type: changeType,
mobile_impact: mobileImpact
});
// Assess migration needs
if (mobileImpact.requires_migration) {
impactReport.migration_requirements.push({
change: change,
migration_type: determineMigrationType(change),
complexity: assessMigrationComplexity(change),
testing_requirements: defineMigrationTesting(change)
});
}
// Evaluate sync implications
const syncImpact = evaluateSyncImplications(change, mobileDataModel);
if (syncImpact.significant) {
impactReport.sync_implications.push(syncImpact);
}
// Update risk assessment
impactReport.risk_assessment = escalateRiskLevel(impactReport.risk_assessment, mobileImpact.risk);
}
return impactReport;
}
// Categorize data structure changes
function categorizeDataChange(change) {
if (change.action === 'ADD_TABLE') return 'table_addition';
if (change.action === 'DROP_TABLE') return 'table_removal';
if (change.action === 'ADD_COLUMN') return 'column_addition';
if (change.action === 'DROP_COLUMN') return 'column_removal';
if (change.action === 'MODIFY_COLUMN') return 'column_modification';
return 'unknown';
}
// Assess mobile-specific data impact
function assessMobileDataImpact(change, mobileDataModel) {
const impact = {
requires_migration: false,
affects_offline_storage: false,
impacts_sync_performance: false,
breaks_existing_functionality: false,
risk: 'LOW'
};
// Check if change affects mobile data model
if (mobileDataModel.tables.includes(change.table)) {
impact.affects_offline_storage = true;
if (['DROP_TABLE', 'DROP_COLUMN', 'MODIFY_COLUMN'].includes(change.action)) {
impact.requires_migration = true;
impact.breaks_existing_functionality = true;
impact.risk = 'CRITICAL';
}
}
return impact;
}
Data Structure Analysis:
- Schema change categorization
- Migration requirement assessment
- Synchronization implications
- Mobile app data model impacts
Step 5: Offline Capability Assessment
Evaluate changes for impact on offline mobile functionality:
// Offline capability assessment
const offlineCapabilityAssessment = {
storage_impact: {
local_database_changes: 'SQLite schema modifications',
file_storage_changes: 'Offline file handling updates',
cache_invalidation: 'Offline cache management',
storage_quota_changes: 'Device storage limitations'
},
synchronization_impact: {
api_endpoint_changes: 'Sync endpoint modifications',
data_format_changes: 'Sync payload structure changes',
conflict_resolution_updates: 'Conflict handling improvements',
network_optimization_changes: 'Bandwidth and performance optimizations'
},
functionality_impact: {
offline_workflow_changes: 'Field operation process updates',
signature_capability_changes: 'Digital signature functionality',
data_capture_changes: 'Multi-modal data collection',
validation_rule_changes: 'Offline business rule enforcement'
}
};
// Assess offline capability impact
function assessOfflineCapabilityImpact(changes, offlineCapabilities) {
const offlineImpactReport = {
storage_impacts: [],
sync_impacts: [],
functionality_impacts: [],
offline_compatibility: 'COMPATIBLE',
required_updates: [],
risk_assessment: 'LOW'
};
for (const change of changes) {
// Assess storage impact
const storageImpact = evaluateStorageImpact(change, offlineCapabilities.storage);
if (storageImpact.significant) {
offlineImpactReport.storage_impacts.push(storageImpact);
}
// Assess sync impact
const syncImpact = evaluateSyncImpact(change, offlineCapabilities.sync);
if (syncImpact.significant) {
offlineImpactReport.sync_impacts.push(syncImpact);
}
// Assess functionality impact
const functionalityImpact = evaluateFunctionalityImpact(change, offlineCapabilities.functions);
if (functionalityImpact.significant) {
offlineImpactReport.functionality_impacts.push(functionalityImpact);
}
}
// Determine overall compatibility
offlineImpactReport.offline_compatibility = determineOfflineCompatibility(offlineImpactReport);
offlineImpactReport.required_updates = generateRequiredUpdates(offlineImpactReport);
offlineImpactReport.risk_assessment = calculateOfflineRisk(offlineImpactReport);
return offlineImpactReport;
}
// Evaluate storage impact
function evaluateStorageImpact(change, storageCapabilities) {
const impact = {
significant: false,
type: 'none',
description: '',
mitigation: ''
};
if (change.affects.includes('database_schema')) {
impact.significant = true;
impact.type = 'schema_change';
impact.description = 'Database schema change requires offline storage migration';
impact.mitigation = 'Implement schema migration with backward compatibility';
}
if (change.affects.includes('file_handling')) {
impact.significant = true;
impact.type = 'file_handling';
impact.description = 'File handling change affects offline document storage';
impact.mitigation = 'Update offline file storage mechanisms';
}
return impact;
}
// Determine offline compatibility
function determineOfflineCompatibility(impactReport) {
const hasBreakingChanges = [
...impactReport.storage_impacts,
...impactReport.sync_impacts,
...impactReport.functionality_impacts
].some(impact => impact.type.includes('breaking'));
if (hasBreakingChanges) {
return 'BREAKING_CHANGES';
}
const hasSignificantImpacts = [
...impactReport.storage_impacts,
...impactReport.sync_impacts,
...impactReport.functionality_impacts
].some(impact => impact.significant);
if (hasSignificantImpacts) {
return 'REQUIRES_UPDATES';
}
return 'COMPATIBLE';
}
Offline Assessment:
- Storage capability impacts
- Synchronization changes
- Offline functionality effects
- Compatibility determination
Step 6: Cross-Platform Compatibility Verification
Ensure changes work across iOS, Android, and web platforms:
// Cross-platform compatibility verification
const crossPlatformCompatibility = {
ios_compatibility: {
api_support: 'iOS-specific API requirements',
storage_limitations: 'iOS storage constraints',
background_processing: 'iOS background execution limits',
app_store_guidelines: 'Apple App Store requirements'
},
android_compatibility: {
api_level_support: 'Android API level requirements',
permission_model: 'Android permission system',
background_services: 'Android background execution',
play_store_guidelines: 'Google Play Store requirements'
},
web_compatibility: {
browser_support: 'Progressive Web App requirements',
service_worker_support: 'Offline service worker capabilities',
storage_apis: 'Web storage API limitations',
pwa_guidelines: 'PWA installation and usage requirements'
},
flutter_compatibility: {
widget_support: 'Cross-platform widget compatibility',
plugin_availability: 'Platform-specific plugin support',
performance_characteristics: 'Cross-platform performance',
deployment_targets: 'Supported platform versions'
}
};
// Verify cross-platform compatibility
function verifyCrossPlatformCompatibility(changes, platformRequirements) {
const compatibilityReport = {
ios_compatibility: 'COMPATIBLE',
android_compatibility: 'COMPATIBLE',
web_compatibility: 'COMPATIBLE',
flutter_compatibility: 'COMPATIBLE',
platform_specific_issues: [],
universal_fixes: [],
deployment_blockers: []
};
for (const change of changes) {
// Check iOS compatibility
const iosIssues = checkPlatformCompatibility(change, platformRequirements.ios);
if (iosIssues.length > 0) {
compatibilityReport.ios_compatibility = 'ISSUES_FOUND';
compatibilityReport.platform_specific_issues.push(...iosIssues.map(issue => ({ platform: 'iOS', ...issue })));
}
// Check Android compatibility
const androidIssues = checkPlatformCompatibility(change, platformRequirements.android);
if (androidIssues.length > 0) {
compatibilityReport.android_compatibility = 'ISSUES_FOUND';
compatibilityReport.platform_specific_issues.push(...androidIssues.map(issue => ({ platform: 'Android', ...issue })));
}
// Check web compatibility
const webIssues = checkPlatformCompatibility(change, platformRequirements.web);
if (webIssues.length > 0) {
compatibilityReport.web_compatibility = 'ISSUES_FOUND';
compatibilityReport.platform_specific_issues.push(...webIssues.map(issue => ({ platform: 'Web', ...issue })));
}
// Check Flutter compatibility
const flutterIssues = checkPlatformCompatibility(change, platformRequirements.flutter);
if (flutterIssues.length > 0) {
compatibilityReport.flutter_compatibility = 'ISSUES_FOUND';
compatibilityReport.platform_specific_issues.push(...flutterIssues.map(issue => ({ platform: 'Flutter', ...issue })));
}
}
// Identify universal fixes
compatibilityReport.universal_fixes = identifyUniversalFixes(compatibilityReport.platform_specific_issues);
// Determine deployment blockers
compatibilityReport.deployment_blockers = identifyDeploymentBlockers(compatibilityReport);
return compatibilityReport;
}
// Check platform-specific compatibility
function checkPlatformCompatibility(change, platformReqs) {
const issues = [];
// Check API compatibility
if (change.type === 'api_change' && platformReqs.api_support) {
if (!platformReqs.api_support.includes(change.api_version)) {
issues.push({
type: 'api_incompatibility',
description: `${change.description} not supported on this platform`,
severity: 'HIGH',
fix: `Implement platform-specific API handling`
});
}
}
// Check storage limitations
if (change.type === 'storage_change' && platformReqs.storage_limitations) {
if (change.storage_requirement > platformReqs.storage_limitations.max) {
issues.push({
type: 'storage_limitation',
description: `Storage requirement exceeds platform limit`,
severity: 'MEDIUM',
fix: `Implement storage optimization or chunking`
});
}
}
return issues;
}
Cross-Platform Verification:
- iOS compatibility assessment
- Android compatibility assessment
- Web/PWA compatibility assessment
- Flutter cross-platform evaluation
Step 7: Risk Assessment and Mitigation Planning
Generate comprehensive risk assessment and mitigation strategies:
// Risk assessment and mitigation planning
function generateRiskAssessmentAndMitigation(impactAnalysis, compatibilityReport) {
const riskAssessment = {
overall_risk_level: 'LOW',
risk_factors: [],
mitigation_strategies: [],
testing_requirements: [],
deployment_recommendations: [],
rollback_plan: null
};
// Assess overall risk
riskAssessment.overall_risk_level = calculateOverallRisk([
impactAnalysis.severity,
compatibilityReport.deployment_blockers.length > 0 ? 'CRITICAL' : 'LOW',
impactAnalysis.offline_compatibility === 'BREAKING_CHANGES' ? 'CRITICAL' : 'LOW'
]);
// Identify risk factors
riskAssessment.risk_factors = identifyRiskFactors(impactAnalysis, compatibilityReport);
// Generate mitigation strategies
riskAssessment.mitigation_strategies = generateMitigationStrategies(riskAssessment.risk_factors);
// Define testing requirements
riskAssessment.testing_requirements = defineTestingRequirements(riskAssessment.risk_factors);
// Provide deployment recommendations
riskAssessment.deployment_recommendations = generateDeploymentRecommendations(riskAssessment);
// Create rollback plan if needed
if (riskAssessment.overall_risk_level === 'CRITICAL' || riskAssessment.overall_risk_level === 'HIGH') {
riskAssessment.rollback_plan = createRollbackPlan(impactAnalysis, compatibilityReport);
}
return riskAssessment;
}
// Calculate overall risk level
function calculateOverallRisk(riskLevels) {
const riskHierarchy = { 'LOW': 1, 'MEDIUM': 2, 'HIGH': 3, 'CRITICAL': 4 };
const maxRisk = Math.max(...riskLevels.map(level => riskHierarchy[level] || 1));
return Object.keys(riskHierarchy).find(key => riskHierarchy[key] === maxRisk) || 'LOW';
}
// Identify specific risk factors
function identifyRiskFactors(impactAnalysis, compatibilityReport) {
const riskFactors = [];
// API compatibility risks
if (impactAnalysis.api_compatibility.breaking_changes.length > 0) {
riskFactors.push({
type: 'api_breaking_changes',
severity: 'HIGH',
description: `${impactAnalysis.api_compatibility.breaking_changes.length} breaking API changes`,
impact: 'Mobile app functionality breaks'
});
}
// Data structure risks
if (impactAnalysis.data_impact.migration_requirements.length > 0) {
riskFactors.push({
type: 'data_migration_required',
severity: 'CRITICAL',
description: 'Data structure changes require mobile migration',
impact: 'Offline data integrity at risk'
});
}
// Offline capability risks
if (impactAnalysis.offline_compatibility === 'BREAKING_CHANGES') {
riskFactors.push({
type: 'offline_breaking_changes',
severity: 'CRITICAL',
description: 'Changes break offline functionality',
impact: 'Field operations cannot continue offline'
});
}
// Cross-platform risks
const platformIssues = compatibilityReport.platform_specific_issues.length;
if (platformIssues > 0) {
riskFactors.push({
type: 'platform_compatibility_issues',
severity: platformIssues > 2 ? 'HIGH' : 'MEDIUM',
description: `${platformIssues} platform compatibility issues`,
impact: 'Inconsistent behavior across platforms'
});
}
return riskFactors;
}
// Generate mitigation strategies
function generateMitigationStrategies(riskFactors) {
const strategies = [];
for (const risk of riskFactors) {
switch (risk.type) {
case 'api_breaking_changes':
strategies.push({
strategy: 'api_versioning',
description: 'Implement API versioning to maintain backward compatibility',
effort: 'MEDIUM',
timeline: '2-3 sprints'
});
break;
case 'data_migration_required':
strategies.push({
strategy: 'mobile_migration_support',
description: 'Implement mobile data migration with conflict resolution',
effort: 'HIGH',
timeline: '3-4 sprints'
});
break;
case 'offline_breaking_changes':
strategies.push({
strategy: 'offline_compatibility_layer',
description: 'Create compatibility layer for offline functionality',
effort: 'HIGH',
timeline: '2-3 sprints'
});
break;
case 'platform_compatibility_issues':
strategies.push({
strategy: 'platform_specific_implementations',
description: 'Implement platform-specific handling for compatibility issues',
effort: 'MEDIUM',
timeline: '1-2 sprints'
});
break;
}
}
return strategies;
}
Risk Assessment:
- Overall risk level calculation
- Specific risk factor identification
- Mitigation strategy generation
- Testing requirement definition
- Deployment recommendation creation
Step 8: Impact Report Generation and Recommendations
Create comprehensive impact report with actionable recommendations:
// Generate comprehensive impact report
function generateComprehensiveImpactReport(allAssessments) {
const impactReport = {
executive_summary: generateExecutiveSummary(allAssessments),
detailed_findings: {
change_analysis: allAssessments.changeAnalysis,
feature_mapping: allAssessments.featureMapping,
api_compatibility: allAssessments.apiCompatibility,
data_impact: allAssessments.dataImpact,
offline_assessment: allAssessments.offlineAssessment,
cross_platform: allAssessments.crossPlatform
},
risk_assessment: allAssessments.riskAssessment,
recommendations: {
immediate_actions: [],
short_term_mitigation: [],
long_term_improvements: [],
testing_requirements: [],
deployment_strategy: null
},
approval_requirements: determineApprovalRequirements(allAssessments),
timeline_estimates: estimateImplementationTimeline(allAssessments)
};
// Generate recommendations
impactReport.recommendations = generateActionableRecommendations(allAssessments);
return impactReport;
}
// Generate executive summary
function generateExecutiveSummary(assessments) {
const summary = {
overall_risk: assessments.riskAssessment.overall_risk_level,
critical_findings: [],
recommended_actions: [],
deployment_readiness: 'UNKNOWN'
};
// Identify critical findings
if (assessments.apiCompatibility.breaking_changes.length > 0) {
summary.critical_findings.push('Breaking API changes detected');
}
if (assessments.offlineAssessment.offline_compatibility === 'BREAKING_CHANGES') {
summary.critical_findings.push('Offline functionality breaking changes');
}
if (assessments.crossPlatform.deployment_blockers.length > 0) {
summary.critical_findings.push('Cross-platform deployment blockers identified');
}
// Determine deployment readiness
if (summary.overall_risk === 'CRITICAL') {
summary.deployment_readiness = 'BLOCKED';
summary.recommended_actions.push('Address critical issues before deployment');
} else if (summary.overall_risk === 'HIGH') {
summary.deployment_readiness = 'REQUIRES_APPROVAL';
summary.recommended_actions.push('Obtain stakeholder approval for high-risk changes');
} else {
summary.deployment_readiness = 'READY';
summary.recommended_actions.push('Proceed with standard deployment process');
}
return summary;
}
// Generate actionable recommendations
function generateActionableRecommendations(assessments) {
const recommendations = {
immediate_actions: [],
short_term_mitigation: [],
long_term_improvements: [],
testing_requirements: [],
deployment_strategy: null
};
// Immediate actions for critical issues
if (assessments.riskAssessment.overall_risk_level === 'CRITICAL') {
recommendations.immediate_actions.push(
'STOP deployment and address critical mobile compatibility issues',
'Schedule emergency review with mobile development team',
'Implement temporary workarounds for blocking issues'
);
}
// Short-term mitigation
recommendations.short_term_mitigation = assessments.riskAssessment.mitigation_strategies
.filter(strategy => strategy.effort !== 'HIGH')
.map(strategy => strategy.description);
// Long-term improvements
recommendations.long_term_improvements = [
'Implement automated mobile impact assessment in CI/CD pipeline',
'Create mobile compatibility testing framework',
'Establish mobile change approval process',
'Develop mobile impact assessment training program'
];
// Testing requirements
recommendations.testing_requirements = assessments.riskAssessment.testing_requirements;
// Deployment strategy
recommendations.deployment_strategy = determineDeploymentStrategy(assessments);
return recommendations;
}
// Determine deployment strategy
function determineDeploymentStrategy(assessments) {
const risk = assessments.riskAssessment.overall_risk_level;
switch (risk) {
case 'CRITICAL':
return {
strategy: 'BLOCKED',
reason: 'Critical mobile compatibility issues prevent deployment',
next_steps: 'Address critical issues and re-assess'
};
case 'HIGH':
return {
strategy: 'PHASED_ROLLOUT',
reason: 'High-risk changes require controlled deployment',
next_steps: 'Deploy to limited user group first, monitor closely'
};
case 'MEDIUM':
return {
strategy: 'STANDARD_DEPLOYMENT',
reason: 'Medium-risk changes can follow standard process',
next_steps: 'Include mobile testing in deployment verification'
};
default:
return {
strategy: 'FAST_TRACK',
reason: 'Low-risk changes can be deployed normally',
next_steps: 'Standard deployment process with mobile monitoring'
};
}
}
Impact Report Generation:
- Executive summary creation
- Detailed findings compilation
- Risk assessment integration
- Actionable recommendations
- Approval requirement determination
- Timeline estimation
Success Criteria
- Code changes analyzed for mobile platform impact
- Mobile platform features mapped to backend changes
- API compatibility assessed for breaking changes
- Data structure changes evaluated for mobile implications
- Offline capabilities assessed for disruption risks
- Cross-platform compatibility verified
- Risk assessment completed with mitigation strategies
- Comprehensive impact report generated with recommendations
- Deployment strategy determined based on risk level
Common Pitfalls
- Underestimating Offline Impact - Mobile platform is offline-first, changes must preserve offline capabilities
- API Breaking Changes - Mobile apps depend on stable API contracts
- Data Schema Changes - Mobile local storage must remain compatible
- Authentication Changes - Mobile offline authentication must be maintained
- Cross-Platform Inconsistencies - Changes must work across iOS, Android, and web
- Insufficient Testing - Mobile impact requires thorough testing before deployment
- Missing Stakeholder Communication - Mobile team must be involved in backend changes
Cross-References
Related Procedures
- Systematic Debugging - Troubleshooting mobile issues after changes
- Verification Before Completion - Validating mobile compatibility
- Writing Plans - Planning changes with mobile impact assessment
Related Skills
systematic-debugging- Mobile issue investigationverification-before-completion- Mobile compatibility validationwriting-plans- Change planning with mobile considerations
Related Agents
DevForge_AI_Team- Backend change development assistanceQualityForge_AI_Team- Mobile compatibility testing and validation