Use Case: Planning a Phased Migration from Skype for Business to Microsoft Teams

Introduction: The Inevitable Migration

As Microsoft announced the retirement of Skype for Business Online in July 2021, organizations worldwide faced the critical task of migrating their unified communications infrastructure to Microsoft Teams. This migration represents more than a simple platform switch—it’s an opportunity to modernize collaboration workflows, enhance security posture, and improve user experience across the enterprise.

This use case examines a comprehensive phased migration strategy implemented by a global manufacturing company with 8,500 employees across 15 countries, providing practical insights into planning, executing, and optimizing a large-scale Teams migration.

Microsoft Teams Migration Strategy

Pre-Migration Assessment and Planning

Current State Analysis

The organization’s existing Skype for Business infrastructure included:

Infrastructure Components:

  • Skype for Business Server 2019: On-premises deployment with 3 front-end pools
  • Edge Servers: 2 edge servers for external connectivity
  • Mediation Servers: 4 mediation servers for PSTN integration
  • SQL Server Backend: Always On availability group for high availability
  • Session Border Controllers: AudioCodes SBCs for PSTN connectivity

Usage Patterns:

  • Active Users: 7,200 daily active users
  • Voice Usage: 45,000 PSTN calls per month
  • Conferencing: 2,500 scheduled meetings per week
  • Instant Messaging: 150,000 messages per day
  • File Sharing: Limited usage due to poor integration

Migration Readiness Assessment

Technical Readiness Evaluation:

# PowerShell script for Skype for Business readiness assessment
Import-Module SkypeForBusiness

# Check user distribution across pools
$UserPools = Get-CsUser | Group-Object RegistrarPool | Select-Object Name, Count
Write-Host "User Distribution Across Pools:"
$UserPools | Format-Table -AutoSize

# Analyze voice routing configuration
$VoiceRoutes = Get-CsVoiceRoute
Write-Host "Current Voice Routes: $($VoiceRoutes.Count)"

# Check conferencing policies
$ConferencingPolicies = Get-CsConferencingPolicy
Write-Host "Conferencing Policies: $($ConferencingPolicies.Count)"

# Assess dial plan complexity
$DialPlans = Get-CsDialPlan
foreach ($DialPlan in $DialPlans) {
    $NormalizationRules = $DialPlan.NormalizationRules.Count
    Write-Host "Dial Plan: $($DialPlan.Identity) - Rules: $NormalizationRules"
}

# Check for custom applications
$TrustedApplications = Get-CsTrustedApplication
if ($TrustedApplications) {
    Write-Host "Custom Applications Found:"
    $TrustedApplications | Select-Object Identity, ApplicationId | Format-Table
}

Network Readiness Assessment:

  • Bandwidth Analysis: Current usage patterns and capacity planning
  • Quality of Service: Existing QoS policies and optimization requirements
  • Firewall Configuration: Required ports and protocols for Teams
  • Proxy Configuration: Bypass requirements for Teams traffic

Migration Strategy and Phasing

Four-Phase Migration Approach

Phase 1: Foundation and Pilot (Weeks 1-4)

  • Objective: Establish Teams infrastructure and validate with pilot group
  • Scope: 100 users from IT and early adopters
  • Key Activities:
    • Teams tenant configuration and security baseline
    • Pilot user provisioning and training
    • Network optimization and monitoring setup
    • Integration testing with existing systems

Phase 2: Departmental Rollout (Weeks 5-12)

  • Objective: Migrate departments with lower voice requirements
  • Scope: 2,500 users from HR, Finance, and Marketing
  • Key Activities:
    • Department-specific Teams configuration
    • User migration in batches of 250-500
    • Voice routing configuration for basic calling
    • Comprehensive user training programs

Phase 3: Operations and Manufacturing (Weeks 13-20)

  • Objective: Migrate operations teams with complex voice requirements
  • Scope: 3,500 users from Operations and Manufacturing
  • Key Activities:
    • Advanced voice routing and emergency calling
    • Integration with manufacturing systems
    • Mobile device optimization for factory floor
    • Specialized training for operational workflows

Phase 4: Executive and Specialized Groups (Weeks 21-24)

  • Objective: Migrate remaining users and decommission Skype for Business
  • Scope: 2,500 users including executives and specialized groups
  • Key Activities:
    • Executive-level features and security configuration
    • Final system integrations and customizations
    • Skype for Business infrastructure decommissioning
    • Post-migration optimization and support

Technical Implementation Details

Teams Tenant Configuration

Security and Compliance Baseline:

# PowerShell script for Teams security configuration
Connect-MicrosoftTeams

# Configure meeting policies for security
$MeetingPolicy = @{
    Identity = "Global"
    AllowAnonymousUsersToStartMeeting = $false
    AllowAnonymousUsersToJoinMeeting = $true
    AutoAdmittedUsers = "EveryoneInCompanyExcludingGuests"
    AllowCloudRecording = $true
    AllowRecordingStorageOutsideRegion = $false
    AllowSharedNotes = $true
    AllowWhiteboard = $true
    AllowTranscription = $true
}
Set-CsTeamsMeetingPolicy @MeetingPolicy

# Configure messaging policies
$MessagingPolicy = @{
    Identity = "Global"
    AllowUserEditMessage = $true
    AllowUserDeleteMessage = $true
    AllowUserChat = $true
    AllowRemoveUser = $true
    AllowGiphy = $true
    GiphyRatingType = "Moderate"
    AllowMemes = $true
    AllowStickers = $true
    AllowUrlPreviews = $true
}
Set-CsTeamsMessagingPolicy @MessagingPolicy

# Configure app policies
$AppPolicy = @{
    Identity = "Global"
    AllowUserPinApps = $true
    AllowSideLoading = $false
    DefaultCatalogAppsType = "AllowedAppsList"
}
Set-CsTeamsAppPermissionPolicy @AppPolicy

Voice Configuration:

# Configure Teams voice routing
# Create voice routing policy
New-CsOnlineVoiceRoutingPolicy -Identity "Manufacturing-VRP" -OnlinePstnUsages @("Manufacturing-Usage")

# Configure calling policies
$CallingPolicy = @{
    Identity = "Manufacturing-Calling"
    AllowPrivateCalling = $true
    AllowWebPSTNCalling = $true
    AllowVoicemail = "AlwaysEnabled"
    AllowCallGroups = $true
    AllowDelegation = $true
    AllowCallForwardingToUser = $true
    AllowCallForwardingToPhone = $true
    PreventTollBypass = $false
    BusyOnBusyEnabledType = "Enabled"
}
New-CsTeamsCallingPolicy @CallingPolicy

# Configure emergency calling
$EmergencyPolicy = @{
    Identity = "Manufacturing-Emergency"
    NotificationGroup = "security@company.com"
    NotificationDialOutNumber = "+1234567890"
    NotificationMode = "ConferenceUnMuted"
}
New-CsTeamsEmergencyCallingPolicy @EmergencyPolicy

User Migration Process

Automated User Migration Script:

# PowerShell script for user migration from Skype for Business to Teams
param(
    [Parameter(Mandatory=$true)]
    [string[]]$UserList,
    [string]$LogPath = "C:MigrationLogsUserMigration.log"
)

Import-Module SkypeForBusiness
Import-Module MicrosoftTeams

function Write-MigrationLog {
    param([string]$Message)
    $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $LogEntry = "$Timestamp - $Message"
    Add-Content -Path $LogPath -Value $LogEntry
    Write-Host $LogEntry
}

function Migrate-UserToTeams {
    param([string]$UserPrincipalName)
    
    try {
        Write-MigrationLog "Starting migration for user: $UserPrincipalName"
        
        # Get current Skype for Business user configuration
        $SfBUser = Get-CsUser -Identity $UserPrincipalName
        if (-not $SfBUser) {
            Write-MigrationLog "ERROR: User not found in Skype for Business: $UserPrincipalName"
            return $false
        }
        
        # Capture current configuration
        $UserConfig = @{
            VoicePolicy = $SfBUser.VoicePolicy
            DialPlan = $SfBUser.DialPlan
            ConferencingPolicy = $SfBUser.ConferencingPolicy
            LineURI = $SfBUser.LineURI
        }
        
        Write-MigrationLog "Captured SfB config for $UserPrincipalName - LineURI: $($UserConfig.LineURI)"
        
        # Move user to Teams Only mode
        Grant-CsTeamsUpgradePolicy -Identity $UserPrincipalName -PolicyName "UpgradeToTeams"
        Write-MigrationLog "Applied Teams Only policy to $UserPrincipalName"
        
        # Configure Teams voice settings if user had voice enabled
        if ($UserConfig.LineURI) {
            # Assign phone number in Teams
            Set-CsUser -Identity $UserPrincipalName -OnPremLineURI $UserConfig.LineURI
            
            # Apply appropriate voice policies
            Grant-CsTeamsCallingPolicy -Identity $UserPrincipalName -PolicyName "Manufacturing-Calling"
            Grant-CsOnlineVoiceRoutingPolicy -Identity $UserPrincipalName -PolicyName "Manufacturing-VRP"
            Grant-CsTeamsEmergencyCallingPolicy -Identity $UserPrincipalName -PolicyName "Manufacturing-Emergency"
            
            Write-MigrationLog "Configured voice settings for $UserPrincipalName"
        }
        
        # Assign Teams license if not already assigned
        $TeamsLicense = Get-MsolUser -UserPrincipalName $UserPrincipalName | Select-Object -ExpandProperty Licenses
        if (-not ($TeamsLicense.AccountSkuId -like "*TEAMS*")) {
            # License assignment logic here
            Write-MigrationLog "Teams license assigned to $UserPrincipalName"
        }
        
        # Wait for replication
        Start-Sleep -Seconds 30
        
        # Verify migration
        $TeamsUser = Get-CsOnlineUser -Identity $UserPrincipalName
        if ($TeamsUser.TeamsUpgradeEffectiveMode -eq "TeamsOnly") {
            Write-MigrationLog "SUCCESS: User $UserPrincipalName successfully migrated to Teams"
            return $true
        } else {
            Write-MigrationLog "WARNING: User $UserPrincipalName migration may not be complete"
            return $false
        }
        
    } catch {
        Write-MigrationLog "ERROR: Failed to migrate $UserPrincipalName - $($_.Exception.Message)"
        return $false
    }
}

# Main migration loop
$SuccessCount = 0
$FailureCount = 0

foreach ($User in $UserList) {
    $Result = Migrate-UserToTeams -UserPrincipalName $User
    if ($Result) {
        $SuccessCount++
    } else {
        $FailureCount++
    }
    
    # Rate limiting - pause between migrations
    Start-Sleep -Seconds 10
}

Write-MigrationLog "Migration batch completed - Success: $SuccessCount, Failures: $FailureCount"

Integration and Customization

Manufacturing System Integration

Production Line Communication:

  • Walkie-Talkie Integration: Teams walkie-talkie feature for production floor
  • Shift Handover Channels: Dedicated Teams channels for shift communications
  • Emergency Escalation: Automated escalation workflows using Power Automate
  • Equipment Status Integration: Real-time equipment status in Teams channels

Custom Teams App Development:

// Teams app manifest for manufacturing integration
{
    "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.11/MicrosoftTeams.schema.json",
    "manifestVersion": "1.11",
    "version": "1.0.0",
    "id": "manufacturing-integration-app",
    "packageName": "com.company.manufacturing.teams",
    "developer": {
        "name": "Manufacturing IT Team",
        "websiteUrl": "https://company.com",
        "privacyUrl": "https://company.com/privacy",
        "termsOfUseUrl": "https://company.com/terms"
    },
    "icons": {
        "color": "color.png",
        "outline": "outline.png"
    },
    "name": {
        "short": "Manufacturing Hub",
        "full": "Manufacturing Integration Hub"
    },
    "description": {
        "short": "Production line integration for Teams",
        "full": "Comprehensive manufacturing integration providing real-time production data, equipment status, and workflow automation within Microsoft Teams."
    },
    "accentColor": "#FFFFFF",
    "bots": [
        {
            "botId": "manufacturing-bot-id",
            "scopes": [
                "personal",
                "team",
                "groupchat"
            ],
            "commandLists": [
                {
                    "scopes": [
                        "personal",
                        "team",
                        "groupchat"
                    ],
                    "commands": [
                        {
                            "title": "Production Status",
                            "description": "Get current production line status"
                        },
                        {
                            "title": "Equipment Alert",
                            "description": "Report equipment issues"
                        },
                        {
                            "title": "Shift Report",
                            "description": "Generate shift handover report"
                        }
                    ]
                }
            ]
        }
    ],
    "composeExtensions": [
        {
            "botId": "manufacturing-bot-id",
            "commands": [
                {
                    "id": "productionSearch",
                    "type": "query",
                    "title": "Production Search",
                    "description": "Search production data",
                    "initialRun": true,
                    "parameters": [
                        {
                            "name": "searchKeyword",
                            "title": "Search",
                            "description": "Enter search terms"
                        }
                    ]
                }
            ]
        }
    ],
    "permissions": [
        "identity",
        "messageTeamMembers"
    ],
    "validDomains": [
        "company.com",
        "manufacturing.company.com"
    ]
}

Voice and Calling Optimization

Session Border Controller Configuration:

# AudioCodes SBC configuration for Teams Direct Routing
# Configure SIP trunk for Teams
configure voip
voip-gw 0
  description "Microsoft Teams Direct Routing"
  connection-mode server
  local-host 192.168.1.100
  remote-host sip.pstnhub.microsoft.com
  remote-port 5061
  transport-type tls
  dtmf-transport-type rfc2833
  fax-transport-type disable
  voice-volume 0
  input-gain 0
  voice-activity-detection enable
  echo-canceller-mode enable
  echo-canceller-nlp-mode enable
  silence-compression-mode enable
  
# Configure IP-to-IP routing
configure voip > gateway ip-to-ip-routing
ip-to-ip-routing 0
  description "Teams to PSTN"
  source-ip-group 1
  dest-ip-group 2
  call-progress-tones-source destination
  
# Configure number manipulation
configure voip > gateway manipulations
dest-phone-num-manipulation-table 0
  description "Teams Number Format"
  dest-pattern "+1([2-9][0-9][0-9][2-9][0-9][0-9][0-9][0-9][0-9][0-9])"
  dest-replacement-pattern "$1"
  
# Configure media settings
configure voip > media
rtp-base-port 6000
rtp-port-range 4000
media-security-behaviour prefer-srtp

User Training and Adoption

Comprehensive Training Program

Role-Based Training Modules:

User Role Training Duration Key Topics Delivery Method
End Users 2 hours Basic Teams usage, calling, meetings Virtual sessions + e-learning
Power Users 4 hours Advanced features, app integration, automation Hands-on workshops
Managers 3 hours Team management, analytics, governance Executive briefings
IT Support 8 hours Administration, troubleshooting, security Technical deep-dive sessions

Manufacturing-Specific Training:

  • Walkie-Talkie Usage: Push-to-talk functionality for production floor
  • Mobile Optimization: Teams usage on rugged mobile devices
  • Shift Communication: Handover procedures and documentation
  • Emergency Procedures: Emergency calling and escalation workflows

Change Management Strategy

Communication Plan:

  • Executive Sponsorship: CEO and department heads champion the migration
  • Regular Updates: Weekly progress updates and success stories
  • Feedback Channels: Multiple channels for user feedback and support
  • Success Metrics: Clear metrics and regular progress reporting

Support Structure:

  • Champions Network: 50 super-users across all departments
  • Help Desk Enhancement: Specialized Teams support tier
  • Self-Service Resources: Comprehensive knowledge base and video tutorials
  • Escalation Procedures: Clear escalation paths for complex issues

Migration Challenges and Solutions

Technical Challenges

Voice Quality Issues:

  • Challenge: Inconsistent voice quality in manufacturing environments
  • Root Cause: Network congestion and QoS configuration
  • Solution: Implemented dedicated VLAN for Teams traffic with strict QoS policies
  • Result: 95% improvement in voice quality metrics

Mobile Device Performance:

  • Challenge: Teams performance on older mobile devices
  • Root Cause: Hardware limitations and network connectivity
  • Solution: Device refresh program and WiFi infrastructure upgrade
  • Result: Consistent performance across all mobile devices

User Adoption Challenges

Resistance to Change:

  • Challenge: Long-term Skype for Business users resistant to change
  • Approach: Peer-to-peer training and gradual feature introduction
  • Solution: Champions network and success story sharing
  • Result: 92% user satisfaction rate post-migration

Feature Complexity:

  • Challenge: Teams feature richness overwhelming for some users
  • Approach: Simplified initial configuration and progressive disclosure
  • Solution: Role-based app policies and customized interfaces
  • Result: Reduced support tickets by 60%

Post-Migration Optimization

Performance Monitoring

Teams Analytics and Reporting:

# PowerShell script for Teams usage analytics
Connect-MicrosoftTeams

# Get Teams usage report
$UsageReport = Get-CsTeamsAnalyticsUserActivityReport -StartDate (Get-Date).AddDays(-30) -EndDate (Get-Date)

# Analyze meeting statistics
$MeetingStats = Get-CsTeamsAnalyticsMeetingReport -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date)
$AvgMeetingDuration = ($MeetingStats | Measure-Object MeetingDurationMinutes -Average).Average
$TotalMeetings = $MeetingStats.Count

Write-Host "Teams Usage Summary (Last 30 days):"
Write-Host "Active Users: $($UsageReport.Count)"
Write-Host "Total Meetings (Last 7 days): $TotalMeetings"
Write-Host "Average Meeting Duration: $([math]::Round($AvgMeetingDuration, 2)) minutes"

# Voice quality analysis
$VoiceQuality = Get-CsTeamsAnalyticsCallQualityReport -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date)
$PoorCalls = ($VoiceQuality | Where-Object {$_.OverallCallRating -eq "Poor"}).Count
$TotalCalls = $VoiceQuality.Count
$PoorCallPercentage = if ($TotalCalls -gt 0) { ($PoorCalls / $TotalCalls) * 100 } else { 0 }

Write-Host "Voice Quality Summary (Last 7 days):"
Write-Host "Total Calls: $TotalCalls"
Write-Host "Poor Quality Calls: $PoorCalls ($([math]::Round($PoorCallPercentage, 2))%)"

Continuous Improvement

Monthly Optimization Reviews:

  • Usage Analytics: Review adoption metrics and identify improvement areas
  • Performance Tuning: Optimize network and infrastructure based on usage patterns
  • Feature Rollout: Gradual introduction of advanced Teams features
  • User Feedback: Regular surveys and feedback incorporation

Advanced Feature Implementation:

  • Teams Rooms: Conference room upgrade to Teams Rooms systems
  • Cloud Recording: Implementation of cloud recording policies and storage
  • Live Events: Company-wide communication and training events
  • Power Platform Integration: Workflow automation and custom applications

Results and Lessons Learned

Migration Outcomes

Technical Metrics:

  • Migration Timeline: Completed 2 weeks ahead of schedule
  • User Migration Success Rate: 99.2% successful migrations
  • Voice Quality: 15% improvement in call quality scores
  • Meeting Adoption: 40% increase in scheduled meetings
  • Collaboration: 300% increase in file sharing and co-authoring

User Experience Improvements:

  • Unified Experience: Single platform for all communication needs
  • Mobile Productivity: Enhanced mobile collaboration capabilities
  • Integration Benefits: Seamless integration with Office 365 applications
  • Advanced Features: Access to modern collaboration tools

Key Success Factors

  • Executive Sponsorship: Strong leadership support throughout the migration
  • Phased Approach: Gradual migration reduced risk and allowed for optimization
  • Comprehensive Training: Role-based training ensured user readiness
  • Technical Preparation: Thorough infrastructure assessment and optimization
  • Change Management: Proactive communication and support structure

Lessons Learned

  • Network Preparation is Critical: Invest heavily in network optimization before migration
  • User Training Cannot Be Rushed: Allow adequate time for comprehensive training
  • Champions Make the Difference: Peer support is more effective than top-down training
  • Monitor and Adjust: Continuous monitoring and optimization are essential
  • Plan for the Unexpected: Build buffer time and contingency plans

Future Roadmap

Advanced Teams Features

  • Teams Phone System: Full replacement of legacy PBX systems
  • Contact Center Integration: Customer service Teams integration
  • AI and Analytics: Advanced analytics and AI-powered insights
  • Compliance and eDiscovery: Enhanced compliance and legal hold capabilities

Manufacturing-Specific Enhancements

  • IoT Integration: Teams integration with manufacturing IoT systems
  • Augmented Reality: AR-enabled remote assistance and training
  • Workflow Automation: Advanced Power Platform integration
  • Predictive Analytics: AI-powered production optimization

Conclusion

The migration from Skype for Business to Microsoft Teams represents a significant transformation in organizational communication and collaboration capabilities. Success requires careful planning, phased execution, comprehensive training, and ongoing optimization.

Key takeaways from this migration include the importance of thorough preparation, the value of a phased approach, and the critical role of change management in ensuring user adoption. Organizations undertaking similar migrations should focus on technical readiness, user training, and continuous improvement to maximize the benefits of their Teams deployment.

“The migration to Teams wasn’t just about replacing Skype for Business—it was about transforming how our organization collaborates and communicates. The investment in proper planning and training has paid dividends in improved productivity and user satisfaction.” – IT Director, Global Manufacturing

As Teams continues to evolve with new features and capabilities, organizations should view their migration as the beginning of a journey toward modern, cloud-based collaboration rather than a one-time project. Continuous optimization and feature adoption will ensure maximum value from the Teams platform investment.

Leave a Comment

Your email address will not be published. Required fields are marked *