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.
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.