FIELD NOTE / SHAREPOINT / MIGRATION DISCOVERY
Four inventories that make a SharePoint migration priceable
Migration Manager can report scanned and transferred items. It cannot decide who accepts a site, whether a workflow still carries business value, which custom permission is legitimate, or what a successful search result looks like. Four joined inventories turn the estate into owned, testable work packages.
Resolve ownership with stable identifiers
Export every site with URL, site ID, template, storage, last activity, primary administrator, Microsoft 365 group ID and hub association. Resolve owners to current Entra object IDs. Record a business acceptor and technical support owner separately.
Use Get-SPOSite -Limit All for the tenant row and an approved site-level tool such as PnP PowerShell for lists, content types, role assignments and features. Save the module version and capture UTC. A former employee in an export becomes an ownership exception requiring a current accountable owner.
Assign one disposition and one reason
Each workload receives migrate, rebuild, retire, archive or temporary rehost. Store the decision owner, date, legal/records dependency, target, review trigger and deletion authority.
Measure item count, versions, bytes, last modified, file types, checked-out or locked items, unique permissions and records labels. Separate ordinary collaboration data from executable assets, forms, workflows, templates and published records. The populations have different acceptance rules.
Trace one business transaction through every dependency
Start from a named journey and capture each call: browser URL, SharePoint web application or site, list/library, workflow, service account, SQL or API endpoint, mail relay, file share, scheduled task and downstream record. Log the authentication type and failure behaviour.
For legacy farms, collect Get-SPFarm, Get-SPServer, Get-SPWebApplication, Get-SPAlternateURL, timer jobs, managed accounts, IIS bindings and certificate thumbprints under read-only authority. Correlation IDs and ULS timestamps connect the observed error to the component.
Build a risk-weighted sample
Include ordinary files, long paths, large files, unsupported characters, many versions, unique permissions, externally shared content, records, custom metadata, checked-out items, pages, InfoPath or custom forms and search-critical identifiers. Add deliberate non-migrants and inaccessible records.
The sample register stores source item ID/path, target item ID/URL, size, version count, metadata hash, permission class, disposition and expected search terms. This supports both positive and negative reconciliation.
Run one controlled pilot wave
Freeze the chosen source population or record the delta window. Retain scan and migration reports. Reconcile submitted, migrated, skipped and failed items by stable source identifier. Investigate every material class of failure before scaling.
Test application journeys and integrations with synthetic business records. File-copy success covers item transfer only. Test list formatting, Power Automate connections, web parts, custom code, search properties and external identity separately.
Accept indexed retrieval as a separate result
After migration, confirm crawl eligibility, mapped managed properties and persona-specific retrieval. Use known-item queries for project number, title phrase, author, record class and date. Record the query, persona, UTC, result rank and returned properties.
Run a prohibited-persona query against restricted items. Expected absence is part of the test pack. If a direct URL works while search fails, inspect the indexed security descriptor and query context before widening permissions.
Convert controlled populations into work packages
A work package names source population, target pattern, remediation class, dependencies, wave size, downtime, acceptance tests, rollback and evidence. Price standard populations separately from exception classes such as custom code, records, complex permissions and unsupported file types.
Use ranges where counts or access remain unresolved. A fixed price becomes defensible when the quantity, method, acceptance and risk allocation can be stated in the same row.
Record what the inventories miss
Scanners and admin exports do not reveal every human workaround, external dependency or content meaning. Interviews and observed journeys remain required. The acceptance sample estimates risk and leaves unsampled items outside the result. Review the inventory after each pilot because migration itself exposes new classes.