SharePoint Interview Questions & Answers

Web Developer (Program Associate, Student Assistance) - HESAA

Official SharePoint Documentation Job Description Resume - CRM

SharePoint Basics

Foundational SharePoint concepts every web developer should know.

What is SharePoint?

SharePoint is Microsoft's web-based collaboration and document management platform that enables organizations to create websites, intranets, and portals for storing, organizing, sharing, and accessing information from any device. It integrates with Microsoft 365 and provides features like document libraries, lists, workflows, and team collaboration tools.

Deployment Options:

  • SharePoint Online: Cloud-based (part of Microsoft 365), no server management
  • SharePoint Server: On-premises with full infrastructure control

What is a Site Collection?

A site collection is the top-level container in SharePoint that includes a primary site and all subsites beneath it.

Key Characteristics:

  • Administrative Boundary: Has its own site collection administrators
  • Security Boundary: Permissions managed at this level
  • Storage: Storage quotas applied per site collection
  • Features: Can activate/deactivate features independently

What are the different types of SharePoint sites?

Team Site

  • Purpose: Collaboration workspace for teams
  • Use When: Team needs to work together on documents and projects
  • Example: Department team site for internal collaboration

Communication Site

  • Purpose: Broadcasting information to broad audience
  • Use When: Sharing news and reports one-way
  • Example: Company intranet homepage, news site

Hub Site

  • Purpose: Connecting related sites with shared navigation
  • Use When: Organizing related sites under common theme
  • Example: HR Hub connecting benefits, policies, training sites

What are Lists in SharePoint?

Lists are data storage structures similar to database tables, storing items with customizable columns.

Common Uses:

  • Task tracking and project management
  • Issue tracking
  • Contact directories
  • Event calendars
  • Custom business data

Features:

  • Multiple views for displaying data
  • Sorting, filtering, and grouping
  • Workflow triggers
  • Versioning and permissions

What are Libraries in SharePoint?

Document libraries are specialized lists designed for storing files with associated metadata.

Key Features:

  • Version History: Track every change to documents
  • Check-in/Check-out: Prevent editing conflicts
  • Co-authoring: Multiple users edit simultaneously
  • Office Integration: Open/edit directly in Office apps
  • Metadata: Custom columns for organization

What's the difference between Lists and Libraries?

Lists:

  • Store structured data (text, numbers, dates)
  • No files as primary content
  • Example: Task list, contacts

Libraries:

  • Store files/documents as primary content
  • Each file has metadata
  • Version history and co-authoring
  • Example: Document library, image library

Similarities:

  • Both use columns and views
  • Both support permissions and workflows

What are Web Parts?

Web parts are modular components that add functionality to SharePoint pages - think of them as building blocks.

Common Web Parts:

  • Text, Image, File Viewer: Basic content display
  • Document Library: Show documents from a library
  • News, Events: Display news posts and calendar events
  • Quick Links: Navigation shortcuts
  • Hero: Large banner with images
  • Power BI: Embed reports and dashboards

Custom Web Parts:

Built using SharePoint Framework (SPFx) with TypeScript/React for custom functionality.

What are Content Types?

Content types are reusable templates that define metadata, workflows, and document templates for specific types of content.

Example - Contract Content Type:

  • Columns: Contract Number, Vendor, Start Date, End Date, Dollar Amount
  • Document Template: Standard contract template
  • Workflow: Approval routing to legal team
  • Retention: Keep for 7 years

Benefits:

  • Ensure consistency across sites
  • Reusable across multiple libraries
  • Centralized management

What is Metadata?

Metadata is "data about data" - additional information describing documents or list items through columns/fields.

Examples:

  • Author, Created Date (automatic)
  • Department, Project Name, Status (custom)
  • Document Type, Priority, Category

Benefits:

  • Findability: Search by metadata fields
  • Organization: Create views without folders
  • Automation: Route based on metadata values
  • Reporting: Generate reports using metadata

Best Practice: Use metadata instead of deep folder structures for better organization and searchability at scale.

What's the difference between Modern and Classic SharePoint?

Modern SharePoint:

  • Clean, responsive, mobile-friendly design
  • Faster performance
  • Modern pages, communication sites, hub sites
  • Teams integration
  • Recommendation: Use for all new sites

Classic SharePoint:

  • Older UI, less mobile-friendly
  • Master pages and custom code
  • SharePoint Designer workflows (deprecated)
  • More customization but harder to maintain

What are Permission Levels?

Permission levels are predefined sets of permissions determining what users can do.

Standard Levels:

  • Full Control: Complete control, can manage permissions
  • Edit: Add, edit, delete items and pages
  • Contribute: Add/update items, can't delete others' content
  • Read: View-only access
  • Limited Access: Access specific item when directly shared

What are Views?

Views are customized ways to display list/library data, controlling which columns appear and how items are organized.

View Types:

  • Standard View: List format with columns
  • Calendar View: Calendar format by date
  • Datasheet View: Excel-like grid for bulk editing
  • Gantt View: Project timeline visualization

View Settings:

  • Column selection and order
  • Sorting and filtering
  • Grouping by column values
  • Item limits for performance

What is Versioning?

Versioning tracks and stores historical versions of documents/items every time they're modified.

Version Types:

  • Major Versions: 1.0, 2.0, 3.0 (published content)
  • Minor Versions: 1.1, 1.2, 2.1 (drafts, visible to editors only)

Benefits:

  • Recovery: Restore previous versions if needed
  • Audit Trail: See who changed what and when
  • Compare: See differences between versions
  • Compliance: Meet regulatory requirements

Best Practice: Enable versioning on all document libraries. Set version limits (e.g., keep last 50 major, 10 minor) to manage storage.

Intermediate SharePoint Questions

Build on basics with configuration, administration, and power user topics.

What is the difference between Site Columns and List Columns?

Site Columns:

  • Created at site collection level
  • Reusable across multiple lists and libraries
  • Centrally managed - updates propagate to all instances
  • Best for enterprise-wide metadata standards
  • Example: "Department" column used across all sites

List Columns:

  • Created directly in a specific list or library
  • Only available in that one list/library
  • Changes don't affect other lists
  • Best for one-off, list-specific needs
  • Example: "Project Phase" only needed in one project list

Best Practice: Create site columns for any metadata you'll use in multiple places. This ensures consistency and makes governance easier.

What is Managed Metadata and the Term Store?

Managed Metadata is a centralized, hierarchical taxonomy system for creating consistent terminology across SharePoint.

Term Store:

  • Central repository for managing taxonomy
  • Organized into Term Groups → Term Sets → Terms
  • Supports hierarchies and synonyms
  • Enterprise-wide or local to site collection

Example Structure:

Term Group: Departments

  • Term Set: Corporate Departments
    • Terms: Human Resources, Finance, IT, Marketing
    • Sub-terms under IT: Infrastructure, Development, Security

Benefits:

  • Enforces consistent terminology
  • Prevents variations (HR vs Human Resources vs People Team)
  • Supports refiners in search
  • Enables type-ahead suggestions
  • Can be multilingual

Explain SharePoint Search and how to configure it.

SharePoint Search Components:

  • Crawl: Search crawler discovers and indexes content
  • Index: Stores searchable content and metadata
  • Query: Users search and results are returned

Configuration Tasks:

Content Sources (On-Prem):

  • Define what to crawl (SharePoint sites, file shares, external content)
  • Set crawl schedules (full vs incremental)

Managed Properties:

  • Map crawled properties to managed properties
  • Make properties searchable, queryable, refinable, sortable
  • Example: Map "ows_Department" to "Department" managed property

Search Schema:

  • Configure managed properties
  • Set up refiners (filters) for search results
  • Create custom result types

Result Sources:

  • Define where to search (local SharePoint, entire tenant, external)
  • Apply query transformations

Improving Search Results:

  • Promote important results (Best Bets/Promoted Results)
  • Query rules for specific searches
  • Result types for different content (documents, people, videos)
  • Search verticals (All, Files, Sites, People)

What are Document Sets and when would you use them?

Document Sets allow you to group related documents together and manage them as a single entity.

Key Features:

  • Container for multiple related documents
  • Shared metadata across all documents in the set
  • Welcome page for the document set
  • Can have workflows applied to the entire set
  • Version history at the set level

Use Cases:

  • Project Deliverables: Group all documents for a project phase
  • Legal Cases: All documents related to a case
  • Proposals: Cover letter, proposal, budget, appendices
  • Employee Records: Resume, offer letter, background check, I-9

Example:

Construction Project Document Set:

  • Shared metadata: Project Name, Client, Budget, Project Manager
  • Contains: Blueprints, Permits, Contracts, Schedules, Photos
  • Workflow: Route entire set for approval

Configuration: Enable Document Set content type in library, configure allowed content types and shared columns, customize welcome page.

What's the difference between SharePoint Groups and Active Directory Groups?

SharePoint Groups:

  • Created and managed within SharePoint
  • Scoped to a specific site or site collection
  • Contain users and/or AD groups
  • Assigned SharePoint permission levels
  • Examples: "Team Site Members", "HR Site Owners"
  • Use when: Permissions are specific to one SharePoint site

Active Directory Groups:

  • Created and managed in Active Directory (or Azure AD)
  • Enterprise-wide scope
  • Can be used across multiple systems (not just SharePoint)
  • IT manages membership
  • Examples: "HR Department", "Finance Team"
  • Use when: Groups already exist enterprise-wide

Best Practice: Use AD groups for permissions whenever possible. This centralizes access management and ensures consistency across systems. Use SharePoint groups only for site-specific scenarios where AD groups don't exist.

Hybrid Approach:

Add AD groups to SharePoint groups. For example, add "HR Department" (AD group) to "HR Site Members" (SharePoint group). This gives you flexibility while maintaining central control.

How does the SharePoint Recycle Bin work?

Two-Stage Recycle Bin:

Stage 1: First-Stage Recycle Bin (User Level):

  • When users delete items, they go here first
  • Users can restore their own deleted items
  • Items retained for 93 days (SharePoint Online default)
  • Items count against storage quota
  • Accessible from site settings or left navigation

Stage 2: Second-Stage Recycle Bin (Site Collection Level):

  • When items are deleted from first-stage or 93 days expire
  • Only site collection admins can access
  • Items retained for additional time (up to 93 more days)
  • Last chance to restore before permanent deletion

What Can Be Restored:

  • Documents and list items
  • Lists and libraries
  • Folders
  • Document versions (if deleted)

Important Notes:

  • Deleting a site sends entire site to recycle bin
  • Recycle bin has storage quota (200% of site quota)
  • Items are permanently deleted after retention period
  • Version history is preserved when restoring

What are Site Collection Features vs Site Features?

Site Collection Features:

  • Activated at site collection level
  • Affect entire site collection and all subsites
  • Only site collection admins can activate/deactivate
  • Examples:
    • SharePoint Server Publishing Infrastructure
    • Document Sets
    • Content Type Syndication Hub
    • In-Place Records Management

Site Features:

  • Activated at individual site level
  • Only affect that specific site
  • Site owners can activate/deactivate
  • Examples:
    • Team Collaboration Lists (creates default lists)
    • Wiki Page Home Page
    • SharePoint Server Publishing
    • Following Content

Dependency:

Some site features require corresponding site collection features to be activated first.

Example: "SharePoint Server Publishing" (site feature) requires "SharePoint Server Publishing Infrastructure" (site collection feature).

How do you configure Alerts in SharePoint?

Alert Types:

  • Item/Document Alerts: Notify when specific items change
  • List/Library Alerts: Notify when anything in list/library changes

Alert Configuration Options:

When to Send:

  • All changes
  • New items only
  • Existing items modified
  • Items deleted
  • Web discussions (if enabled)

Filter Criteria:

  • Anything changes
  • Someone else changes an item
  • Someone else changes an item created by me
  • Someone else changes an item last modified by me

Delivery Frequency:

  • Send email immediately
  • Daily summary
  • Weekly summary

Setting Up Alerts:

  1. Navigate to list/library or specific item
  2. Click "..." menu → Alert me
  3. Configure alert settings
  4. Click OK

Managing Alerts:

  • Users manage their own alerts from user profile
  • Site owners can manage all alerts for a site
  • Alert quotas can be set by admins

Power Automate Alternative: For more complex notifications, use Power Automate instead of alerts. You get better control over triggers, conditions, and notification content.

What is Information Architecture in SharePoint?

Information Architecture (IA) is the structural design of how content is organized, navigated, and discovered in SharePoint.

Key Components:

1. Site Structure:

  • Hub sites connecting related sites
  • Flat vs hierarchical structure
  • Site collection boundaries

2. Navigation:

  • Global navigation (top)
  • Local navigation (side/quick launch)
  • Hub navigation
  • Mega menus

3. Content Organization:

  • Lists and libraries structure
  • Folders vs metadata
  • Content types
  • Taxonomy (term store)

4. Search & Discovery:

  • Search configuration
  • Promoted results
  • Result sources
  • Refiners and filters

Best Practices:

  • Flat is Better: Avoid deep site hierarchies (max 2-3 levels)
  • Hub Model: Use hub sites instead of subsites
  • Consistent Naming: Standardize site, list, and column names
  • Metadata Over Folders: Use columns for organization
  • User-Centric: Design for how users think, not org chart

Real-World Example: At the university, I designed a hub-based IA with 25+ department sites. Each department had autonomy while maintaining consistent navigation and taxonomy through the hub. This improved findability and reduced navigation clicks by 40%.

How do you handle large lists in SharePoint (5,000 item threshold)?

SharePoint Online has a list view threshold of 5,000 items to maintain performance. Operations that exceed this can be throttled.

Strategies to Work with Large Lists:

1. Indexed Columns:

  • Create indexes on frequently filtered/sorted columns
  • Maximum 20 indexed columns per list
  • Queries using indexed columns can exceed 5,000 items
  • Best columns to index: Status, Department, Date fields

2. Filtered Views:

  • Create views that return fewer than 5,000 items
  • Filter on indexed columns
  • Example: View filtered by "Status = Active" if Active items < 5,000

3. Folders (Strategic Use):

  • Each folder acts as a separate scope for the threshold
  • Organize items into folders with < 5,000 items each
  • Example: Folders by year or department

4. Archive Old Data:

  • Move inactive items to archive library
  • Use retention policies to auto-archive
  • Keep active list under threshold

5. Off-Peak Operations:

  • Large operations allowed during off-peak hours (nights/weekends)
  • Schedule bulk updates and migrations accordingly

6. Compound Indexes:

  • Create indexes on two columns together
  • Useful for date ranges
  • Example: Index on "Year" + "Quarter"

What Triggers Threshold:

  • Unfiltered views retrieving all items
  • Queries on non-indexed columns
  • Complex calculations across all items
  • Syncing large libraries

Pro Tip: Always create indexes BEFORE the list exceeds 5,000 items. You can't add indexes to lists already over the threshold without admin intervention.

Advanced SharePoint Questions

Expert-level topics including development, architecture, and enterprise administration.

What is SharePoint Framework (SPFx) and how does it differ from classic customizations?

SharePoint Framework (SPFx) is the modern development model for building SharePoint customizations using open-source tools.

SPFx Characteristics:

  • Client-side development (JavaScript/TypeScript)
  • Runs in user's browser context
  • Built with React, Angular, Vue, or vanilla JavaScript
  • Uses modern tooling: Node.js, npm, Webpack, Gulp
  • Deployed as app packages (.sppkg)
  • Works in SharePoint Online and SharePoint 2019+

SPFx Components:

  • Web Parts: Client-side components for pages
  • Extensions: Application customizers, field customizers, command sets
  • Library Components: Reusable code across solutions

Classic Customizations vs SPFx:

Aspect Classic SPFx
Code Runs Server-side (full trust) Client-side
Language C#, .NET TypeScript/JavaScript
Deployment Farm solutions (.wsp) App packages (.sppkg)
Security Full trust, elevat ed permissions User context only
Compatibility On-Prem only Online & On-Prem

Real-World Experience: I developed custom SPFx web parts for course registration and student services using React and TypeScript. These integrated with external APIs and provided interactive interfaces that standard web parts couldn't deliver.

How do you use SharePoint REST API and Microsoft Graph API?

SharePoint REST API:

OData-based API for performing CRUD operations on SharePoint data.

Endpoint Format:

https://site/_api/web/lists/getbytitle('ListName')/items

Common Operations:

  • GET: Read lists, items, files
  • POST: Create new items
  • PATCH/MERGE: Update existing items
  • DELETE: Remove items

Example - Get List Items:

fetch("/_api/web/lists/getbytitle('Tasks')/items?$select=Title,Status&$filter=Status eq 'Active'", {
    method: 'GET',
    headers: {
        'Accept': 'application/json;odata=verbose'
    }
})
.then(response => response.json())
.then(data => console.log(data.d.results));
                        

Microsoft Graph API:

Unified API for accessing Microsoft 365 services (SharePoint, OneDrive, Teams, Outlook, etc.)

Endpoint Format:

https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items

Advantages Over REST API:

  • Unified endpoint for all M365 services
  • Better performance and batching
  • Modern authentication (OAuth 2.0)
  • Works across SharePoint, OneDrive, Teams
  • Better documentation and SDKs

Example - Get SharePoint Site:

GET https://graph.microsoft.com/v1.0/sites/{site-id}
Authorization: Bearer {access-token}
                        

When to Use Which:

  • SharePoint REST API: SharePoint-specific operations, legacy compatibility, on-premises
  • Microsoft Graph API: New development, cross-service scenarios, modern apps, better long-term support

Best Practice: Use Microsoft Graph API for new development. It's the strategic direction for Microsoft 365 integration and offers better performance and features.

How do you use PowerShell for SharePoint administration?

SharePoint Online PowerShell:

Setup:

# Install module
Install-Module -Name Microsoft.Online.SharePoint.PowerShell

# Connect
Connect-SPOService -Url https://contoso-admin.sharepoint.com
                        

Common Administrative Tasks:

# Get all site collections
Get-SPOSite

# Create new site collection
New-SPOSite -Url https://contoso.sharepoint.com/sites/ProjectA -Owner admin@contoso.com -StorageQuota 1024 -Title "Project A"

# Set site collection admin
Set-SPOUser -Site https://contoso.sharepoint.com/sites/HR -LoginName user@contoso.com -IsSiteCollectionAdmin $true

# Get site storage usage
Get-SPOSite -Identity https://contoso.sharepoint.com/sites/HR | Select Url, StorageUsageCurrent, StorageQuota
                        

PnP PowerShell (More Powerful):

Setup:

# Install
Install-Module -Name PnP.PowerShell

# Connect
Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/HR -Interactive
                        

Common Operations:

# Get list items
Get-PnPListItem -List "Tasks" -Fields "Title","Status"

# Add list item
Add-PnPListItem -List "Tasks" -Values @{"Title"="New Task"; "Status"="Active"}

# Upload file
Add-PnPFile -Path "C:\docs\report.docx" -Folder "Shared Documents"

# Apply site template
Invoke-PnPSiteTemplate -Path "template.xml"

# Bulk operations
$items = Get-PnPListItem -List "LargeList"
foreach($item in $items) {
    Set-PnPListItem -List "LargeList" -Identity $item.Id -Values @{"Status"="Archived"}
}
                        

Use Cases:

  • Bulk Operations: Update thousands of items at once
  • Site Provisioning: Automate site creation
  • Reporting: Extract data across site collections
  • Migrations: Content migration scripts
  • Governance: Audit permissions, clean up sites

Real-World Use: I used PnP PowerShell to automate the migration of 2TB content from SharePoint 2013 to SharePoint Online, including metadata mapping and permission validation across 5 web applications.

Explain SharePoint Hybrid configurations.

SharePoint Hybrid connects on-premises SharePoint Server with SharePoint Online, enabling integrated experiences across both environments.

Hybrid Scenarios:

1. Hybrid Search:

  • Unified search results from both on-prem and cloud
  • Two approaches:
    • Cloud Hybrid Search: All content indexed in SharePoint Online (recommended)
    • Federated Hybrid Search: Separate indexes, federated results

2. Hybrid OneDrive:

  • Redirect on-prem users to OneDrive for Business in Office 365
  • Users get cloud storage while using on-prem SharePoint

3. Hybrid Sites:

  • Surface SharePoint Online sites in on-prem SharePoint
  • Appears in on-prem navigation and search

4. Hybrid Profiles:

  • Redirect from on-prem to Office 365 user profiles
  • Unified profile experience

5. Hybrid Taxonomy:

  • Synchronize term store from on-prem to cloud (or vice versa)
  • Maintain consistent metadata

Prerequisites:

  • SharePoint Server 2013, 2016, 2019, or Subscription Edition
  • Azure AD Connect for identity synchronization
  • Server-to-Server trust configuration
  • Reverse proxy for external access (optional)

Configuration Steps (High Level):

  1. Run Hybrid Picker tool (automates most configuration)
  2. Authenticate with tenant admin
  3. Select hybrid scenarios to enable
  4. Tool configures OAuth, service applications, and connections
  5. Verify hybrid features working

Migration Strategy: I used hybrid configuration as a phased migration approach. Enabled hybrid search and OneDrive first, then gradually migrated site collections to Online over 6 months. This allowed users to continue working while migration progressed.

What are Data Loss Prevention (DLP) and Information Rights Management (IRM) in SharePoint?

Data Loss Prevention (DLP):

Automatically detect and protect sensitive information in SharePoint.

How It Works:

  • Create DLP policies in Microsoft 365 Compliance Center
  • Define sensitive information types (SSN, credit card, HIPAA data)
  • Set rules and actions when sensitive data detected
  • Applies to SharePoint sites, OneDrive, Teams

DLP Actions:

  • Notify users: Tip appears when sharing sensitive content
  • Block external sharing: Prevent sharing outside organization
  • Restrict access: Limit who can access documents
  • Alert admins: Send notifications to security team

Example Policy:

Protect Credit Card Numbers:

  • Condition: Document contains 16-digit credit card pattern
  • Action: Block external sharing, notify user, alert admin
  • Scope: All SharePoint sites

Information Rights Management (IRM):

Encrypt and control access to documents even after they're downloaded.

How It Works:

  • Enable IRM on document library
  • Documents encrypted when downloaded
  • Requires Azure Information Protection or AD RMS

IRM Restrictions:

  • Prevent printing
  • Prevent copying text
  • Prevent taking screenshots
  • Set expiration date for access
  • Require re-authentication

Use Cases:

  • Confidential Documents: HR records, financial data
  • Contracts: Prevent copying terms
  • Intellectual Property: Product designs, research
  • Time-Limited Access: Expire after project ends

DLP vs IRM:

  • DLP: Prevents sensitive data from leaving SharePoint; reactive/detective
  • IRM: Protects documents even after downloaded; preventive/persistent
  • Together: DLP detects and alerts; IRM enforces encryption and usage restrictions

How do you optimize SharePoint performance?

List & Library Optimization:

  • Indexed Columns: Create indexes on filtered/sorted columns
  • Limit Views: Return < 5,000 items using filtered views
  • Avoid Complex Calculations: No calculated columns on large lists
  • Strategic Folders: Use folders to segment large libraries
  • Archive Old Data: Move inactive content to separate library

Page Optimization:

  • Minimize Web Parts: Fewer web parts = faster load
  • Optimize Images: Compress images, use appropriate dimensions
  • Lazy Loading: Load content as user scrolls
  • CDN: Enable Office 365 CDN for static assets
  • Modern Pages: Use modern over classic (faster rendering)

Search Optimization:

  • Crawl Schedules: Optimize crawl frequency
  • Managed Properties: Only make necessary properties searchable
  • Result Sources: Narrow search scope
  • Query Rules: Optimize common queries

Network & Browser:

  • Browser Caching: Leverage client-side caching
  • Compress Files: Enable compression for downloads
  • OneDrive Sync: Use selective sync for large libraries
  • Minimal Download Strategy: Enable for classic sites

Code Optimization (SPFx/Custom Solutions):

  • Batch Requests: Use batch API calls ($batch)
  • Select Fields: Only retrieve needed fields ($select)
  • Caching: Cache API responses appropriately
  • Async Loading: Load data asynchronously
  • Debouncing: Limit API calls on rapid user input

Monitoring Performance:

  • Page Diagnostics Tool: Browser extension for analyzing pages
  • Network Tab: F12 tools to identify slow resources
  • SharePoint Health Score: Check service health
  • Storage Reports: Monitor storage usage trends

Real-World Impact: By implementing indexed columns and filtered views on a 15,000-item list, I reduced page load time from 45 seconds to under 3 seconds. The key was identifying which columns users filtered on and indexing those first.

What are Site Scripts and Site Designs in SharePoint Online?

Site Scripts and Site Designs automate site provisioning by applying predefined configurations to new sites.

Site Scripts:

JSON files that define specific actions to perform when a site is created.

What Scripts Can Do:

  • Create lists and libraries
  • Add columns to lists
  • Apply themes
  • Set regional settings
  • Add navigation links
  • Trigger Power Automate flows
  • Join hub sites
  • Install apps/solutions

Example Site Script (JSON):

{
  "actions": [
    {
      "verb": "createSPList",
      "listName": "Project Tasks",
      "templateType": 171,
      "subactions": [
        {
          "verb": "addSPField",
          "fieldType": "Choice",
          "displayName": "Priority",
          "choices": ["High", "Medium", "Low"]
        }
      ]
    },
    {
      "verb": "applyTheme",
      "themeName": "Blue"
    },
    {
      "verb": "joinHubSite",
      "hubSiteId": "12345678-1234-1234-1234-123456789012"
    }
  ]
}
                        

Site Designs:

Containers that bundle one or more site scripts together and make them available during site creation.

Creating Site Design:

# PowerShell
Add-SPOSiteDesign `
  -Title "Project Site Template" `
  -WebTemplate "64" `
  -SiteScripts "script-id-1","script-id-2" `
  -Description "Standard project site with tasks and documents"
                        

Workflow:

  1. Create site script (JSON) defining actions
  2. Upload script to tenant using PowerShell
  3. Create site design referencing script(s)
  4. Users select site design when creating new site
  5. Script automatically provisions configured elements

Use Cases:

  • Standardized Project Sites: Same lists, libraries, theme
  • Department Templates: HR, Finance, IT sites with specific needs
  • Compliance: Ensure all sites have required elements
  • Branding: Apply consistent themes and navigation

Limitations:

  • Can't delete items (only create)
  • Limited to specific actions (see Microsoft docs)
  • For complex provisioning, use PnP Provisioning Templates

Alternative: PnP Provisioning Templates offer more comprehensive provisioning capabilities including permissions, content, and complex configurations.

How do you implement Multi-Geo capabilities in SharePoint Online?

Multi-Geo allows organizations to store SharePoint and OneDrive data in multiple geographic locations while maintaining a single tenant.

Why Multi-Geo:

  • Data Residency: Meet regulatory requirements for data storage
  • Performance: Store data closer to users for faster access
  • Compliance: GDPR, data sovereignty laws

How It Works:

  • Central location (default) + satellite locations
  • Users assigned to preferred data location (PDL)
  • Their OneDrive and created sites stored in assigned geo
  • Unified search across all geos
  • Single tenant admin experience

Available Geo Locations:

  • North America, Europe, Asia Pacific
  • Australia, Canada, France, Germany, India
  • Japan, Korea, Norway, South Africa
  • Switzerland, UAE, UK, and more

Configuration:

1. Enable Multi-Geo:

  • Requires Microsoft 365 Multi-Geo license
  • Work with Microsoft to provision satellite locations

2. Set Preferred Data Location for Users:

# PowerShell
Set-MsolUser -UserPrincipalName user@contoso.com -PreferredDataLocation EUR
                        

3. Create Sites in Specific Geo:

New-SPOSite -Url https://contosoEUR.sharepoint.com/sites/ProjectEU -Owner admin@contoso.com
                        

User Experience:

  • Users unaware of which geo their data is in
  • Unified interface across all geos
  • Search returns results from all locations
  • Delve, Teams, SharePoint work seamlessly

Limitations:

  • Can't move existing user data between geos (OneDrive)
  • Can move sites between geos with PowerShell
  • Additional licensing cost
  • Some features may not be available in all geos

Governance Considerations:

  • Document which users/departments in which geos
  • Set PDL before users start using service
  • Plan for mergers/reorganizations
  • Test compliance and eDiscovery workflows

SharePoint Workflow Automation Tutorial

Master workflow automation with Power Automate and SharePoint - from basics to advanced scenarios.

Introduction to SharePoint Workflow Automation

What is Workflow Automation?

Workflow automation in SharePoint eliminates manual, repetitive tasks by automatically routing documents, sending notifications, collecting approvals, and updating data based on predefined business rules.

Why Automate Workflows?

  • Time Savings: Reduce manual processing from days to minutes
  • Consistency: Ensure every process follows the same steps
  • Accuracy: Eliminate human errors in routing and data entry
  • Visibility: Track progress and identify bottlenecks
  • Compliance: Maintain audit trails and enforce business rules

Real-World Impact: In my experience, implementing workflow automation for a Grant Management System reduced approval cycles from 14 days to 3 days - a 79% improvement. We built 40+ automated workflows that saved 65% of manual processing time across the organization.

Modern Workflow Tools

Power Automate (Recommended):

  • Cloud-based workflow platform
  • Integrates with 400+ services (SharePoint, Teams, Outlook, third-party APIs)
  • No-code/low-code visual designer
  • Robust error handling and monitoring
  • Use for: All new workflows in SharePoint Online

SharePoint Designer (Legacy - Deprecated):

  • Desktop application for SharePoint 2010/2013/2016
  • Limited to SharePoint-only workflows
  • No longer supported or updated by Microsoft
  • Use for: Maintaining existing legacy workflows only

Common Workflow Scenarios

  • Document Approval: Route documents for review and approval
  • Onboarding/Offboarding: Automate employee lifecycle processes
  • Purchase Requests: Multi-stage approval based on amount
  • Issue Tracking: Auto-assign and escalate support tickets
  • Content Publishing: Review and publish news/announcements
  • Data Collection: Process form submissions and update records

Getting Started with Power Automate

Accessing Power Automate

  1. Navigate to flow.microsoft.com or click "Automate" in SharePoint
  2. Sign in with your Microsoft 365 account
  3. You're ready to create flows!

Flow Types

1. Automated Flows (Event-Driven):

  • Triggered by events (item created, file uploaded, email received)
  • Run automatically when trigger condition is met
  • Example: "When a file is added to SharePoint, send approval email"

2. Instant Flows (Manual):

  • Triggered manually by button click
  • Appear in SharePoint as "Flow" button on items
  • Example: "Request approval for this document"

3. Scheduled Flows:

  • Run on a schedule (daily, weekly, monthly)
  • Great for batch processing and reports
  • Example: "Every Monday, send weekly summary email"

Key Components

Triggers:

  • When an item is created - New list item added
  • When an item is created or modified - Any change to item
  • When a file is created in a folder - New file uploaded
  • For a selected item - Manual trigger on specific item

Actions:

  • Send an email - Email notifications
  • Start and wait for approval - Approval workflows
  • Update item - Modify SharePoint data
  • Create item - Add new records
  • Get items - Retrieve list data
  • Condition - If/then logic
  • Apply to each - Loop through items

Expressions & Dynamic Content:

  • Dynamic Content: Reference data from previous steps (e.g., item Title, Created By)
  • Expressions: Formulas for calculations, date formatting, string manipulation
  • Examples: formatDateTime(), concat(), if(), length()

Tutorial 1: Simple Document Approval Workflow

Scenario

Create a workflow that automatically sends documents for manager approval when uploaded to a SharePoint library.

Prerequisites

  • SharePoint document library named "Pending Approval"
  • Column called "Status" (Choice: Draft, Pending, Approved, Rejected)
  • Column called "Approver" (Person or Group)

Step-by-Step Instructions

Step 1: Create the Flow

  1. Go to flow.microsoft.com
  2. Click "+ Create""Automated cloud flow"
  3. Name: "Document Approval Workflow"
  4. Trigger: Search for "When a file is created" (SharePoint)
  5. Click "Create"

Step 2: Configure Trigger

  • Site Address: Select your SharePoint site
  • Library Name: Select "Pending Approval"

Step 3: Get File Properties

  1. Click "+ New step"
  2. Search for "Get file properties" (SharePoint)
  3. Site Address: Same as trigger
  4. Library Name: Pending Approval
  5. Id: From dynamic content, select "ID"

Step 4: Send for Approval

  1. Click "+ New step"
  2. Search for "Start and wait for an approval"
  3. Approval type: "Approve/Reject - First to respond"
  4. Title: "Approval Request: " + [File name with extension]
  5. Assigned to: From dynamic content, select "Approver Email"
  6. Details:
    Please review the following document:
    
    Document: [File name with extension]
    Uploaded by: [Created By DisplayName]
    Uploaded on: [Created]
    
    Link: [Link to item]
                                    

Step 5: Add Conditional Logic

  1. Click "+ New step"
  2. Search for "Condition"
  3. Set condition:
    • Choose a value: From dynamic content, select "Outcome" (from approval step)
    • Operator: is equal to
    • Choose a value: Type "Approve"

Step 6: If Approved

In the "If yes" branch:

  1. Add action: "Update file properties"
    • Site Address: Your site
    • Library Name: Pending Approval
    • Id: ID from trigger
    • Status: Approved
  2. Add action: "Send an email (V2)"
    • To: Created By Email
    • Subject: "Document Approved: " + File name
    • Body: "Your document has been approved by [Response summary]"

Step 7: If Rejected

In the "If no" branch:

  1. Add action: "Update file properties"
    • Status: Rejected
  2. Add action: "Send an email (V2)"
    • To: Created By Email
    • Subject: "Document Rejected: " + File name
    • Body: "Your document was rejected. Reason: [Response summary]"

Step 8: Save and Test

  1. Click "Save" at the top
  2. Upload a test document to the library
  3. Set the "Approver" field
  4. Check your email for approval request
  5. Approve or reject and verify the workflow completes

Success! You've created your first automated approval workflow. The document will now automatically route to the specified approver and update the status based on their response.

Tutorial 2: Multi-Stage Approval with Escalation

Scenario

Create a purchase request workflow where requests under $1,000 go to the manager, and requests over $1,000 require both manager and director approval.

Setup

Create a SharePoint list called "Purchase Requests" with these columns:

  • Title (Single line text) - Item description
  • Amount (Currency)
  • Manager (Person or Group)
  • Director (Person or Group)
  • Status (Choice: Pending, Manager Approved, Director Approved, Rejected)

Building the Flow

1. Trigger

  • When an item is created (SharePoint)
  • Select your site and "Purchase Requests" list

2. Check Amount

Add Condition:

  • Condition: Amount is less than 1000

3a. If Amount < $1,000 (Simple Approval)

In "If yes" branch:

  1. Start and wait for approval
    • Title: "Purchase Request: " + Title + " - $" + Amount
    • Assigned to: Manager Email
    • Details: Include Title, Amount, Requester, Justification
  2. Add nested Condition: Check if Outcome = "Approve"
  3. If approved:
    • Update item: Status = "Approved"
    • Send email to requester: "Request approved!"
  4. If rejected:
    • Update item: Status = "Rejected"
    • Send email to requester with rejection reason

3b. If Amount ≥ $1,000 (Two-Stage Approval)

In "If no" branch:

  1. Stage 1 - Manager Approval:
    • Start and wait for approval from Manager
    • Title: "[Stage 1] Purchase Request: " + Title
  2. Add Condition: Check manager approval outcome
  3. If manager rejects:
    • Update item: Status = "Rejected by Manager"
    • Send email to requester
    • Terminate flow
  4. If manager approves:
    • Update item: Status = "Manager Approved - Pending Director"
    • Stage 2 - Director Approval:
      • Start and wait for approval from Director
      • Title: "[Stage 2] Purchase Request: " + Title
      • Details: Include "Manager approved on [date]"
  5. Add final Condition: Check director approval
  6. If approved:
    • Update item: Status = "Fully Approved"
    • Send email to requester and manager
  7. If rejected:
    • Update item: Status = "Rejected by Director"
    • Send email with reason

4. Add Timeout/Escalation (Optional)

For approvals that sit too long:

  1. In approval action settings, click "...""Settings"
  2. Enable "Timeout"
  3. Set duration: e.g., 3 days
  4. Add action after approval with "Configure run after":
  5. Check "has timed out"
  6. Send escalation email to approver's manager

Real-World Tip: This exact pattern was used in our Grant Management System. By automating the routing logic based on amount, we eliminated manual hand-offs and reduced approval cycles from 14 days to 3 days.

Tutorial 3: Automated Notification System

Scenario

Send automatic notifications when important announcements are posted to SharePoint.

Setup

Create "Announcements" list with:

  • Title - Announcement headline
  • Body (Multiple lines) - Full announcement
  • Priority (Choice: Normal, High, Urgent)
  • Department (Choice: All, HR, IT, Finance, etc.)
  • Expires (Date)

Flow Design

1. Trigger

  • When an item is created in Announcements list

2. Get Distribution List

Use Switch control to route based on department:

Switch on: Department

Case "All":
  Set variable RecipientGroup = "all-employees@company.com"

Case "HR":
  Set variable RecipientGroup = "hr-team@company.com"

Case "IT":
  Set variable RecipientGroup = "it-team@company.com"

Case "Finance":
  Set variable RecipientGroup = "finance-team@company.com"

Default:
  Set variable RecipientGroup = "all-employees@company.com"
                        

3. Format Email Based on Priority

Add Condition:

  • If Priority = "Urgent":
    • Set email subject: "🚨 URGENT: " + Title
    • Set importance: High
    • Use red formatting in body
  • If Priority = "High":
    • Set subject: "⚠️ Important: " + Title
    • Set importance: High
  • If Priority = "Normal":
    • Set subject: "📢 " + Title
    • Set importance: Normal

4. Send Email with Rich Formatting

Send an email (V2):

To: [RecipientGroup variable]
Subject: [Formatted subject from previous step]
Body (HTML):

<html>
<body style="font-family: Arial, sans-serif;">
  <div style="padding: 20px; background-color: #f0f0f0; border-left: 4px solid #0078d4;">
    <h2 style="color: #0078d4;">[Title]</h2>
    <p>[Body]</p>
    <hr>
    <p><strong>Priority:</strong> [Priority]</p>
    <p><strong>Department:</strong> [Department]</p>
    <p><strong>Expires:</strong> [Expires]</p>
    <p><a href="[Link to item]">View Full Announcement</a></p>
  </div>
</body>
</html>
                        

5. Post to Microsoft Teams (Optional)

  1. Add action: "Post message in a chat or channel" (Teams)
  2. Post as: Flow bot
  3. Post in: Channel
  4. Team: Select your team
  5. Channel: General or Announcements
  6. Message:
    **[Priority] Announcement: [Title]**
    
    [Body]
    
    [Link to item]
                                    

6. Schedule Expiration Reminder

Create a separate scheduled flow:

  1. Recurrence: Run daily at 8 AM
  2. Get items from Announcements where:
    • Expires is equal to tomorrow's date
  3. Apply to each item found
  4. Send email to announcement creator: "Your announcement expires tomorrow"

Real Implementation: I built this exact system for emergency communications at the university. During incidents, we could post urgent announcements that automatically reached 800+ staff within seconds via email and Teams. Response time improved by 85%.

Best Practices & Optimization

Performance Optimization

1. Minimize API Calls

  • Get once, use many: Retrieve list items once, then loop through them
  • Use $select: Only retrieve needed columns
    Get items with $select: Title,Status,AssignedTo
    Instead of getting all 50+ columns
                                    
  • Filter at source: Use Filter Query in Get Items instead of filtering after retrieval

2. Avoid Loops When Possible

  • Bad: Loop through 1000 items and update each (1000 API calls)
  • Good: Use batch operations or scheduled flows for bulk updates

3. Use Trigger Conditions

Prevent flow from running unnecessarily:

Trigger: When item is created or modified
Trigger Condition: @equals(triggerOutputs()?['body/Status'], 'Submitted')

This only runs when Status = "Submitted", not on every update
                        

Error Handling

1. Configure Run After

  • Click "..." on action → "Configure run after"
  • Select when action should run:
    • ✅ is successful (default)
    • ⚠️ has failed
    • ⏭️ is skipped
    • ⏱️ has timed out

2. Use Scope and Try-Catch

Scope: "Try"
  └─ Your actions here

Scope: "Catch" (configure to run after "Try" has failed)
  └─ Send error email to admin
  └─ Log error to SharePoint list
  └─ Terminate with failure message
                        

3. Error Notifications

  • Always notify someone when critical workflows fail
  • Include error details: action name, error message, item link
  • Log failures to a SharePoint "Error Log" list for tracking

Testing & Debugging

Test Mode

  1. Save flow
  2. Click "Test""Manually"
  3. Trigger the flow (e.g., create test item)
  4. Watch real-time execution
  5. Click on actions to see inputs/outputs

Debugging Tips

  • Add Compose actions: Use to display intermediate values
  • Check Run History: flow.microsoft.com → "My flows" → Select flow → "Run history"
  • Review error details: Click failed run → Click failed action → See error message
  • Use Peek Code: View JSON inputs/outputs for advanced debugging

Security Best Practices

  • Least Privilege: Flows run with permissions of flow owner - use service account if needed
  • Secure Inputs/Outputs: For sensitive data, enable "Secure Inputs" in action settings
  • Don't Hardcode Secrets: Use environment variables or Azure Key Vault
  • Audit Runs: Review run history periodically for suspicious activity

Naming Conventions

  • Flows: "Process - Trigger" format
    • Good: "Document Approval - New File"
    • Bad: "Flow1", "My Flow"
  • Actions: Descriptive names
    • Good: "Send approval to manager", "Update status to Approved"
    • Bad: "Send an email", "Update item"
  • Variables: Clear purpose
    • Good: varApproverEmail, varTotalAmount
    • Bad: var1, temp

Documentation

  • Add Notes: Use "Add a note" action to document complex logic
  • Export Flow: Regularly export flows as backup (Settings → Export)
  • Maintain Wiki: Document what each flow does, who owns it, dependencies
  • Version Control: For complex flows, maintain changelog in description

Advanced Techniques

1. Parallel Processing

Run multiple actions simultaneously for better performance:

  1. Add Parallel Branch (click "+" between actions)
  2. Configure different actions in each branch
  3. All branches run at same time

Example: After approval, simultaneously:

  • Branch 1: Update SharePoint item
  • Branch 2: Send email to requester
  • Branch 3: Post to Teams
  • Branch 4: Create task in Planner

2. Child Flows (Reusability)

Create reusable flows that can be called from other flows:

  1. Create flow with trigger: "When an HTTP request is received"
  2. Define input schema (JSON) for parameters
  3. Build your reusable logic
  4. Add "Response" action to return data
  5. In parent flow, use "HTTP" action to call child flow

Use Case: Create a "Send Notification" child flow used by multiple parent flows

3. Working with Arrays

Filter Array:

Action: Filter array
From: Get items results
Condition: item()?['Status'] equals 'Active'
Result: Only active items
                        

Select (Transform):

Action: Select
From: Get items results
Map:
  Name: item()?['Title']
  Email: item()?['AssignedTo']?['Email']
Result: Simplified array with just Name and Email
                        

Join:

Action: Join
From: Array of names
Join with: ", "
Result: "John, Mary, Steve" (comma-separated string)
                        

4. Dynamic Approvers

Route to different approvers based on conditions:

  1. Use Switch or Condition to determine approver
  2. Set variable: varApproverEmail
  3. In approval action, use variable for "Assigned to"
If Department = "HR":
  Set varApproverEmail = "hr-manager@company.com"
Else if Department = "IT":
  Set varApproverEmail = "it-manager@company.com"
Else:
  Set varApproverEmail = "general-manager@company.com"

Start approval → Assigned to: [varApproverEmail]
                        

5. Pagination for Large Lists

When working with lists > 5000 items:

  1. In "Get items" action settings
  2. Turn on "Pagination"
  3. Set threshold: 5000 (max per call)
  4. Flow automatically handles multiple calls

Warning: This can cause performance issues. Better to filter at source!

6. Delay and Schedule Actions

Delay:

  • Delay: Wait for specific duration (e.g., 1 hour)
  • Delay until: Wait until specific date/time

Example: Send reminder 3 days after request if no response

1. Send initial request
2. Delay: 3 days
3. Get item to check if still pending
4. If still pending: Send reminder
                        

7. Integration with Other Services

Common Integrations:

  • Microsoft Teams: Post messages, create channels, add members
  • Outlook: Send emails, create events, manage tasks
  • Planner: Create tasks, update progress
  • Forms: Process form responses
  • Excel Online: Read/write to Excel files in SharePoint
  • Dataverse: Work with Power Apps data
  • SQL Server: Query and update databases
  • HTTP: Call any REST API

Custom API Example:

Action: HTTP
Method: POST
URI: https://api.service.com/v1/users
Headers:
  Content-Type: application/json
  Authorization: Bearer [token]
Body:
{
  "name": "[Title from SharePoint]",
  "email": "[User Email]"
}
                        

Pro Tip: I've integrated Power Automate with external student information systems using HTTP actions. This allowed us to sync data between SharePoint and legacy systems automatically, eliminating manual data entry for 800+ student records.

Common Patterns & Use Cases

Pattern 1: Form Processing

Trigger: When form response submitted (Microsoft Forms or Power Apps)

  1. Get form response details
  2. Create item in SharePoint list
  3. Send confirmation email to submitter
  4. Notify team of new submission
  5. Route for approval if needed

Pattern 2: Document Lifecycle

  1. Draft → Review: Author completes draft, sets status to "Ready for Review"
  2. Review → Approval: Reviewer approves, routes to manager
  3. Approval → Published: Manager approves, document moves to published library
  4. Published → Archived: After expiration date, auto-archive

Pattern 3: Employee Onboarding

Trigger: New employee added to HR list

  1. Create AD account (via Azure AD connector)
  2. Create M365 license assignment task
  3. Create Planner tasks for IT (setup laptop, phone)
  4. Create Planner tasks for HR (benefits enrollment)
  5. Create Planner tasks for manager (workspace setup)
  6. Send welcome email with checklist
  7. Add to Teams channels
  8. Schedule reminders for follow-ups

Pattern 4: Issue Escalation

Trigger: Issue ticket created

  1. Auto-assign based on category (hardware → IT, software → Dev team)
  2. Send acknowledgment to requester
  3. Check daily if still "Open" and > 3 days old
  4. If yes, escalate to manager
  5. If > 7 days old, escalate to director
  6. When resolved, send satisfaction survey

Pattern 5: Content Approval & Publishing

Multi-person approval for sensitive content:

  1. Author submits content for approval
  2. Parallel approvals: Legal, Compliance, Marketing all review simultaneously
  3. If all approve, publish to external site
  4. If any reject, return to author with feedback
  5. Log all approvals for audit trail

Pattern 6: Weekly/Monthly Reports

Trigger: Recurrence (every Monday at 8 AM)

  1. Get items created last week
  2. Group by category/status
  3. Calculate totals and averages
  4. Create HTML table with results
  5. Send email report to management
  6. Create item in Reports library with data

Pattern 7: Data Synchronization

Keep two lists in sync:

  1. Trigger: Item created/updated in List A
  2. Check if item exists in List B (by ID or unique field)
  3. If exists: Update matching item in List B
  4. If not exists: Create new item in List B
  5. Log sync activity

Pattern 8: Conditional Notifications

Smart notifications based on user preferences:

  1. Get user preferences from preferences list
  2. Check notification settings:
    • Email only
    • Teams only
    • Both
    • None
  3. Use Switch to route appropriately
  4. Respect quiet hours (don't send between 10 PM - 7 AM)

Lessons Learned: After building 40+ workflows, I've found that starting with these proven patterns saves hours of development time. Most business processes fit into one of these templates - customize from there rather than starting from scratch.

Troubleshooting Common Issues

Issue 1: Flow Not Triggering

Possible Causes:

  • Flow is turned off: Check flow status in flow.microsoft.com
  • Trigger condition not met: Verify trigger settings match your test
  • Permissions: Flow owner must have access to trigger location
  • Trigger conditions: Check if custom trigger conditions are too restrictive

Solution:

  1. Turn flow on if disabled
  2. Test manually: click "Test" → "Manually"
  3. Check run history for errors
  4. Simplify trigger conditions temporarily

Issue 2: "Item Not Found" Error

Cause:

Trying to get/update item that doesn't exist or was deleted

Solution:

  • Add error handling with "Configure run after"
  • Use "Get items" with filter instead of "Get item" by ID
  • Check if item exists before updating:
    Get items where ID equals [ID from trigger]
    Condition: length(Get items results) is greater than 0
    If yes: Update item
    If no: Log error or skip
                                    

Issue 3: "Forbidden" or Permission Errors

Cause:

Flow doesn't have permission to access resource

Solution:

  • Ensure flow owner has access to all lists/libraries
  • Check SharePoint connection in flow → Verify still valid
  • Re-establish connection: Remove and re-add action
  • For system-level flows, use service account with proper permissions

Issue 4: Approval Stuck or Not Reaching Approver

Causes:

  • Approver email incorrect
  • Approver not in tenant
  • Email in spam/junk folder
  • Approver field empty/null

Solution:

  • Add condition to check if approver field is empty before sending
  • Validate email format with expression
  • Add error handling for invalid approvers
  • Send test approval to yourself first
  • Check Approvals center (flow.microsoft.com → Approvals)

Issue 5: Flow Times Out

Cause:

Flow running longer than 30-day limit (yes, 30 days!)

Common Sub-Causes:

  • Waiting for approval that never comes
  • Delay action set too long
  • Infinite loop

Solution:

  • Set approval timeout: 7-14 days max
  • Add escalation path if no response
  • Use scheduled flows for long-running processes instead of delays
  • Add loop terminators (counter variable, max iterations check)

Issue 6: "Dynamic Content Not Available"

Cause:

Action output not accessible from current step

Solution:

  • Check if action is in different branch (can't access across branches)
  • Move action outside of condition/loop if needed
  • Use variables to store values you need later
  • Use "Compose" action to make data available

Issue 7: "Expression Cannot Be Evaluated"

Cause:

Syntax error or null value in expression

Solution:

  • Test expressions in small chunks
  • Handle null values:
    Bad: triggerOutputs()?['body/Manager']?['Email']
    Good: if(empty(triggerOutputs()?['body/Manager']), '', triggerOutputs()?['body/Manager']?['Email'])
                                    
  • Use coalesce() for default values
  • Check for typos in property names

Issue 8: "Loop Limit Exceeded"

Cause:

"Apply to each" processing more than 100,000 items

Solution:

  • Filter items before looping (use $filter in Get Items)
  • Process in batches with scheduled flows
  • Use pagination carefully
  • Consider if you really need to process all items

Issue 9: Workflow Runs Multiple Times

Causes:

  • Multiple updates to same item triggering flow each time
  • Flow updating the item that triggered it (infinite loop!)

Solution:

  • Use trigger conditions to run only on specific changes
  • Add flag column (e.g., "ProcessedByFlow" = Yes/No)
  • Check flag before processing:
    If ProcessedByFlow is not equal to Yes:
      Do workflow logic
      Set ProcessedByFlow = Yes
                                    

Debugging Checklist

  1. ✅ Check run history for error details
  2. ✅ Review inputs/outputs of failed action
  3. ✅ Test with simple data first
  4. ✅ Add Compose actions to see intermediate values
  5. ✅ Verify permissions on all resources
  6. ✅ Check SharePoint column names (case-sensitive in expressions)
  7. ✅ Test expressions in Expression Editor before saving
  8. ✅ Simplify: remove branches until it works, then add back
  9. ✅ Check Microsoft 365 Service Health for platform issues

Golden Rule: When a flow fails, don't panic. 90% of issues are permission problems, null values, or typos in expressions. Check the basics first before assuming complex problems.

Next Steps & Resources

Practice Projects

Build these flows to master the fundamentals:

  1. Simple Notification: Email when item added to list
  2. Birthday Reminder: Daily check for employee birthdays, send greetings
  3. Expense Approval: Route expense reports based on amount
  4. Weekly Digest: Summarize week's activities and email report
  5. Task Assignment: Auto-assign tasks based on department/category

Learning Path

Beginner (Weeks 1-2):

  • Complete Microsoft Learn modules on Power Automate basics
  • Build 5-10 simple flows (notifications, data collection)
  • Master triggers, actions, and basic conditions

Intermediate (Weeks 3-6):

  • Add approvals to workflows
  • Work with loops and arrays
  • Implement error handling
  • Build multi-stage workflows

Advanced (Weeks 7-12):

  • Create complex business processes
  • Integrate with external APIs
  • Build reusable child flows
  • Optimize performance
  • Implement governance and monitoring

Official Resources

  • Microsoft Learn: Free training modules
    • Automate a business process using Power Automate
    • Build approval flows with Power Automate
    • Use expressions in Power Automate
  • Power Automate Documentation: learn.microsoft.com/en-us/power-automate/
  • Power Automate Community: powerusers.microsoft.com/t5/Power-Automate-Community/ct-p/MPACommunity
  • YouTube Channels: Shane Young, Reza Dorrani, April Dunnam

Certification Path

Consider these Microsoft certifications:

  • PL-900: Microsoft Power Platform Fundamentals (entry-level)
  • PL-200: Microsoft Power Platform Functional Consultant (associate)
  • PL-400: Microsoft Power Platform Developer (associate)

Tools & Extensions

  • Power Automate Desktop: For RPA (robotic process automation)
  • Power Automate Mobile App: Manage approvals on-the-go
  • Flow Checker: Built-in tool to validate flows before publishing
  • Solution Checker: Validates entire solutions with flows

Community Best Practices

  • Join Power Platform user groups (local meetups)
  • Participate in Power Platform community calls (monthly)
  • Share your flows on community forums (anonymize sensitive data)
  • Follow Power Automate blog for new features

Advanced Topics to Explore

  • Custom Connectors: Build your own connectors for proprietary APIs
  • Solutions: Package flows for deployment across environments
  • Environment Strategy: Dev, Test, Production environments
  • ALM (Application Lifecycle Management): Source control for flows
  • Premium Connectors: Leverage enterprise connectors (SQL, SAP, etc.)
  • AI Builder: Add AI capabilities to flows (forms processing, object detection)

Final Advice: The best way to learn workflow automation is by solving real business problems. Identify a manual process at work, automate it, measure the impact, and share your results. After building 40+ workflows over 8 years, I can confidently say: the learning never stops, but the time savings are immediate and substantial.

Success Metrics

Track these to demonstrate workflow value:

  • Time Saved: Hours per week/month saved by automation
  • Process Speed: Days to complete before/after automation
  • Error Rate: Reduction in manual errors
  • Adoption: Number of flows in production, users impacted
  • Compliance: % of processes with audit trails

You're Ready! You now have the knowledge to build powerful SharePoint workflows with Power Automate. Start small, build confidence, and gradually tackle more complex scenarios. Remember: every expert was once a beginner who kept practicing. Good luck with your automation journey!

SharePoint Third-Party Integration Guide

Connect SharePoint with external systems using webhooks, APIs, and integration platforms.

Third-Party Integration Platforms: Power Automate vs Zapier

Power Automate (Recommended for SharePoint)

  • Native Microsoft integration: Deep SharePoint connectivity with 50+ SharePoint-specific actions
  • Included with M365: No additional cost for basic flows (up to usage limits)
  • Better performance: Direct access to SharePoint APIs, no third-party middleware
  • Security: Data stays within Microsoft ecosystem, same tenant authentication
  • Advanced features: Approval workflows, complex conditions, loops, error handling
  • Real-time triggers: Instant response to SharePoint events (no polling delay)
  • 400+ connectors: Salesforce, ServiceNow, SAP, Google Workspace, Slack, SQL Server, any REST API

Zapier

  • Works with SharePoint: But limited compared to Power Automate
  • Additional cost: Subscription required (starts at $20/month)
  • Limited SharePoint actions: Basic CRUD operations only
  • Polling-based: Checks for changes every 5-15 minutes (not real-time)
  • Use when: Connecting SharePoint to non-Microsoft apps that Power Automate doesn't support

Other Integration Platforms

  • Make (formerly Integromat): Similar to Zapier, visual automation
  • Workato: Enterprise integration platform for complex workflows
  • Tray.io: Advanced automation with custom logic
  • n8n: Open-source workflow automation

My Recommendation: Use Power Automate first. In 8 years of SharePoint work, I've built 40+ integrations - 95% used Power Automate. Only use Zapier when Power Automate doesn't support the specific third-party app you need.

Power Automate Connectors Include:

  • CRM: Salesforce, Dynamics 365, HubSpot
  • Collaboration: Slack, Teams, Zoom, Webex
  • Cloud Storage: Dropbox, Box, Google Drive, OneDrive
  • Databases: SQL Server, MySQL, Oracle, PostgreSQL
  • Communication: Twilio, SendGrid, Mailchimp
  • Social Media: Twitter, LinkedIn, Instagram
  • Enterprise: SAP, ServiceNow, Jira, Workday
  • Custom: HTTP connector for any REST API

Server-Side Code in SharePoint: Options and Architecture

Important: SharePoint Online Has No Traditional Server

SharePoint Online does NOT have a traditional server where you can run custom code. Microsoft moved away from server-side code for security, scalability, and multi-tenancy reasons.

Modern Architecture Options:

1. Azure Functions (Recommended for Server-Side Logic)

Azure Functions act as serverless compute - like having a server without managing infrastructure.

How it works:

SharePoint → Webhook/Power Automate → Azure Function → Process logic → Return data → SharePoint
                        

Use cases:

  • Complex calculations and data transformations
  • Integration with legacy systems and databases
  • Custom business logic that can't run in browser
  • Long-running background processes
  • External API orchestration

Example Azure Function (Node.js):

module.exports = async function (context, req) {
    // Receive data from SharePoint
    const itemData = req.body;

    // Process complex business logic
    const result = await processComplexCalculation(itemData);

    // Call external database
    const dbResult = await updateLegacySystem(result);

    // Return to SharePoint
    context.res = {
        status: 200,
        body: {
            success: true,
            data: result,
            dbRecordId: dbResult.id
        }
    };
};
                        

Triggering from SharePoint:

  • Power Automate HTTP action
  • SharePoint webhook (real-time)
  • Direct API call from SPFx web part
  • Scheduled timer trigger

2. SharePoint Framework (SPFx) - Client-Side Code

SPFx runs in the user's browser, not on a server.

What you CAN do with SPFx:

  • Build custom web parts (React, Angular, Vue, vanilla JS)
  • Call REST APIs (SharePoint, Graph, custom APIs)
  • Display data and create interactive UIs
  • Client-side business logic and data manipulation
  • Modern, responsive interfaces

What you CANNOT do with SPFx:

  • Run server-side processes or background jobs
  • Execute privileged operations outside user context
  • Access server file system or databases directly
  • Perform operations requiring elevated permissions

Example SPFx calling Azure Function:

// SPFx web part (TypeScript + React)
public async componentDidMount() {
    try {
        const response = await fetch(
            'https://myfunction.azurewebsites.net/api/process',
            {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(this.props.data)
            }
        );

        const result = await response.json();
        this.setState({ processedData: result });
    } catch (error) {
        console.error('Error calling Azure Function:', error);
    }
}
                        

3. Power Automate as Middleware

Power Automate can act as the "server" between SharePoint and external systems.

Flow architecture:

SharePoint Event
    → Power Automate triggers
    → HTTP POST to your API
    → Process data
    → HTTP Response
    → Update SharePoint with results
                        

Example scenario:

  1. Document uploaded to SharePoint library
  2. Power Automate detects new file
  3. Sends file to external OCR API
  4. Receives extracted text
  5. Updates SharePoint document metadata
  6. Sends notification email

Real-World Example: I integrated SharePoint with an external Student Information System using Azure Functions. The flow was: SharePoint webhook → Azure Function → SQL Database → Sync confirmation. This eliminated manual data entry for 800+ student records and kept systems in sync in real-time.

SharePoint Webhooks: Real-Time Event Notifications

YES! SharePoint Supports Webhooks

SharePoint has robust webhook support for real-time event notifications from lists and libraries.

How Webhooks Work:

1. Change occurs in SharePoint List/Library
2. SharePoint sends HTTP POST to your endpoint
3. Your endpoint receives notification within seconds
4. Process the event
5. Query SharePoint for changed item details
6. Perform your custom logic
                        

What Triggers Webhooks:

  • Item added to list
  • Item updated/modified
  • Item deleted
  • File uploaded to library
  • File modified
  • File deleted

What You Receive in Webhook Notification:

  • ✅ Notification that something changed
  • ✅ Resource identifier (list/library ID)
  • ✅ Change tokens for querying details
  • ✅ Subscription ID
  • ❌ NOT the actual changed data (you must query SharePoint to get it)
  • ❌ NOT which specific fields changed

Setting Up Webhooks:

Step 1: Create Endpoint to Receive Notifications

Your webhook endpoint (Azure Function, Node.js, .NET, etc.)

// Azure Function (Node.js)
module.exports = async function (context, req) {
    const validationToken = req.query.validationtoken;

    // SharePoint sends validation token on first registration
    if (validationToken) {
        context.res = {
            status: 200,
            body: validationToken
        };
        return;
    }

    // Process webhook notification
    const notifications = req.body.value;

    for (const notification of notifications) {
        // Get changed items from SharePoint
        const changes = await getSharePointChanges(
            notification.resource,
            notification.changeToken
        );

        // Process each changed item
        for (const change of changes) {
            await processChange(change);
        }
    }

    context.res = { status: 200 };
};
                        

Step 2: Register Webhook via REST API

// JavaScript/TypeScript
const registerWebhook = async () => {
    const response = await fetch(
        "https://tenant.sharepoint.com/sites/sitename/_api/web/lists/getbytitle('Documents')/subscriptions",
        {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                resource: "lists/GUID",
                notificationUrl: "https://yourfunction.azurewebsites.net/api/webhook",
                expirationDateTime: "2025-06-15T00:00:00Z",
                clientState: "optional-security-token-123"
            })
        }
    );

    const result = await response.json();
    console.log('Webhook registered:', result);
};
                        

Step 3: Register Webhook via PowerShell (PnP)

# Connect to SharePoint
Connect-PnPOnline -Url "https://tenant.sharepoint.com/sites/sitename" -Interactive

# Add webhook subscription
Add-PnPWebhookSubscription -List "Documents" `
    -NotificationUrl "https://yourfunction.azurewebsites.net/api/webhook" `
    -ExpirationDate (Get-Date).AddMonths(6) `
    -ClientState "security-token-123"

# List existing webhooks
Get-PnPWebhookSubscriptions -List "Documents"
                        

Important Webhook Requirements:

  • HTTPS required: Endpoint must use SSL/TLS
  • Fast response: Endpoint must respond within 5 seconds
  • Validation: Must return validation token on registration
  • Expiration: Webhooks expire (max 6 months for lists), must renew
  • Public endpoint: Must be accessible from internet (SharePoint can't reach local dev)

Webhook Renewal:

# PowerShell - Renew webhook
Set-PnPWebhookSubscription -List "Documents" `
    -Subscription "webhook-id-guid" `
    -ExpirationDate (Get-Date).AddMonths(6)
                        

Complete Webhook Integration Example:

Scenario: Sync SharePoint list with external SQL database

1. User adds/updates item in SharePoint list
2. Webhook triggers within 2-3 seconds
3. Azure Function receives notification
4. Function queries SharePoint for changed item details
5. Function validates and transforms data
6. Function updates SQL database
7. Function updates SharePoint item with sync status
8. User sees "Last Synced: [timestamp]" in SharePoint
                        

Real Implementation: I built this exact system for student records. When staff updated SharePoint, the webhook fired instantly, Azure Function processed the change, updated the SQL database, and confirmed sync - all within 5 seconds. Before webhooks, we used scheduled polling every 15 minutes, leading to data lag and conflicts.

Complete Integration Architecture Patterns

Pattern 1: Power Automate Only (Simplest)

SharePoint → Power Automate → Third-party API → SharePoint
                        

Use when:

  • Simple integrations with no complex logic
  • Third-party service has Power Automate connector
  • No custom data transformation needed

Example:

SharePoint item created → Power Automate → Create Salesforce lead → Send Teams notification

Pattern 2: Power Automate + Azure Functions (Recommended)

SharePoint → Power Automate → Azure Function (custom logic) → External System → SharePoint
                        

Use when:

  • Need custom business logic or complex transformations
  • Integration with legacy systems without APIs
  • Data validation and enrichment required
  • Multiple external systems to orchestrate

Example:

SharePoint form submission → Power Automate → Azure Function validates and calculates → Updates SQL + CRM → Confirmation email

Pattern 3: Webhooks + Azure Functions (Real-Time)

SharePoint → Webhook (instant) → Azure Function → Process → SharePoint/External System
                        

Use when:

  • Need immediate response to changes (< 5 seconds)
  • High-volume events (hundreds per minute)
  • Critical business processes requiring instant sync

Example:

Inventory item updated → Webhook → Azure Function → Update ERP system → Confirm in SharePoint

Pattern 4: SPFx + Custom API (Client-Driven)

SPFx Web Part → Your REST API → Database/External System → Return data → Display in web part
                        

Use when:

  • User-initiated actions and interactions
  • Interactive dashboards with real-time data
  • Need rich UI with custom visualizations

Example:

User clicks "Check Availability" → SPFx calls inventory API → Displays real-time stock levels

Pattern 5: Logic Apps (Enterprise)

SharePoint → Logic Apps → Multiple systems → Complex orchestration → SharePoint
                        

Use when:

  • Enterprise-grade integrations across many systems
  • Complex workflows with branching logic
  • B2B integrations (EDI, AS2)
  • High availability requirements

Example:

Order in SharePoint → Logic App → Validate with inventory → Create SAP order → Update Salesforce → Notify Teams

Pattern 6: Scheduled Batch Processing

Timer Trigger → Azure Function/Power Automate → Get SharePoint items → Process batch → Update external system
                        

Use when:

  • Nightly data synchronization
  • Reporting and analytics
  • Non-time-critical bulk operations

Example:

Daily at 2 AM → Get all orders from last 24 hours → Generate report → Email to management → Archive to storage

Security, Authentication & Best Practices

Authentication Options:

1. Azure AD OAuth (Recommended for Microsoft Ecosystem)

  • Use for Azure Functions accessing SharePoint/Graph API
  • Supports app-only permissions (service principal)
  • Best security and auditability
// Get access token
const token = await getAccessToken(
    tenantId,
    clientId,
    clientSecret,
    'https://graph.microsoft.com/.default'
);

// Call Graph API
const response = await fetch(
    'https://graph.microsoft.com/v1.0/sites/site-id/lists',
    {
                                headers: { 'Authorization': `Bearer ${token}` }
    }
);
                        

2. API Keys (Simple External APIs)

  • Store in Azure Key Vault, never in code
  • Rotate keys regularly
  • Use different keys for dev/test/prod

3. Service Principal (Server-to-Server)

  • For Azure Functions accessing SharePoint
  • Granular permissions (least privilege)
  • No user context needed

4. Managed Identity (Azure Functions)

  • No secrets to manage
  • Azure automatically handles authentication
  • Best for Azure-to-Azure communication

Security Best Practices:

  • Secrets Management: Store all secrets in Azure Key Vault, not code or config files
  • HTTPS Only: All endpoints must use SSL/TLS
  • Validate Webhooks: Check clientState token to verify requests from SharePoint
  • Implement Retry Logic: Exponential backoff for transient failures
  • Log All API Calls: Audit trail for compliance and debugging
  • Rate Limiting: Respect API throttling limits
  • Input Validation: Never trust incoming data, validate everything
  • Error Handling: Don't expose sensitive information in error messages

Webhook Security:

// Validate webhook request
const validateWebhook = (req, expectedClientState) => {
    const clientState = req.body.value[0].clientState;

    if (clientState !== expectedClientState) {
        throw new Error('Invalid clientState - potential security breach');
    }

    return true;
};
                        

Performance Best Practices:

  • Batch Operations: Group API calls when possible (Graph API supports batching)
  • Async Processing: Use queues (Azure Queue Storage) for long-running tasks
  • Caching: Cache frequently accessed data (Redis, Azure Cache)
  • Pagination: Handle large result sets with paging
  • Throttling: Implement backoff when hitting rate limits

Error Handling Pattern:

try {
    // Call external API
    const result = await callExternalAPI(data);

    // Update SharePoint
    await updateSharePoint(result);

} catch (error) {
    // Log error
    await logError(error, data);

    // Retry logic
    if (isTransientError(error)) {
        await retryWithBackoff(callExternalAPI, data);
    } else {
        // Notify admin
        await sendErrorNotification(error);
    }
}
                        

Cost Comparison & Recommendations

Cost Breakdown:

Solution Cost Best For
Power Automate Included with M365 (with limits)
Premium: $15/user/month
Most integrations, built-in connectors
Azure Functions Consumption: ~$0.20/million executions
+ compute time
Custom logic, server-side processing
SharePoint Webhooks Free (built-in SharePoint feature) Real-time notifications
SPFx Development Free (framework)
Developer time only
Custom UI, client-side apps
Zapier Starts at $20/month
Scales with usage
Non-Microsoft apps without PA connector
Logic Apps ~$0.0001 per action
Pay per execution
Enterprise workflows, B2B integration

My Recommendations by Scenario:

Scenario 1: Simple Integration (e.g., SharePoint → Slack)

  • Solution: Power Automate only
  • Cost: Included with M365
  • Setup time: 15-30 minutes

Scenario 2: Complex Business Logic (e.g., SharePoint → Calculations → SQL → Email)

  • Solution: Power Automate + Azure Functions
  • Cost: M365 + ~$5-20/month for Functions
  • Setup time: 2-4 hours

Scenario 3: Real-Time Sync (e.g., SharePoint ↔ ERP System)

  • Solution: Webhooks + Azure Functions
  • Cost: M365 + ~$10-30/month for Functions
  • Setup time: 4-8 hours

Scenario 4: Custom Dashboard (e.g., Live Data Visualization)

  • Solution: SPFx web part + Azure Functions
  • Cost: M365 + ~$5-15/month for Functions
  • Setup time: 8-16 hours

Scenario 5: Rare Non-Microsoft App (e.g., SharePoint → Obscure CRM)

  • Solution: Zapier
  • Cost: $20-100/month
  • Setup time: 30 minutes - 1 hour

Cost Optimization Tip: Start with Power Automate. 80% of integrations can be handled with built-in connectors at no additional cost. Only add Azure Functions when you need custom logic. I've saved thousands by using Power Automate's HTTP connector instead of writing custom Azure Functions for simple REST API calls.

Summary Decision Tree:

Does Power Automate have a connector for your app?
├─ YES → Use Power Automate
│   └─ Need custom logic? → Add Azure Function
│
└─ NO → Is it a REST API?
    ├─ YES → Use Power Automate HTTP connector
    │   └─ Complex logic? → Add Azure Function
    │
    └─ NO → Is real-time critical?
        ├─ YES → Use Webhooks + Azure Functions
        │
        └─ NO → Last resort: Zapier or custom solution
                        

Technical Questions

Can you explain your experience managing SharePoint sites (Online or On-Prem)?

I have 8+ years of hands-on SharePoint experience across both Online and On-Premises environments:

SharePoint Online (2018-Present):

  • Lead administrator for SharePoint Online environment serving 800+ faculty and staff
  • Architected and implemented university-wide intranet portal with 25+ department sites
  • Managed site collections, hub sites, and modern team sites
  • Worked with SharePoint Online migration from On-Prem in a hybrid deployment (2TB of content)

SharePoint On-Premises:

  • Maintained SharePoint 2016 farm (3 servers) including patching, backups, and performance monitoring
  • Previously administered SharePoint 2010 and 2013 environments (5 web applications, 500+ users)
  • Performed server configuration, vulnerability assessments, and security patching
  • Led technical upgrade from SharePoint 2010 to 2013 including custom code remediation

Key Insight: The key difference I've found is that Online requires more focus on governance and user training, while On-Prem demands strong server administration skills for maintenance, patches, and capacity planning.

How do you handle permission levels and access control in SharePoint?

I follow a structured approach to SharePoint permissions:

Permission Strategy:

  • Least Privilege Principle: Users get minimum permissions needed for their role
  • AD Security Groups: Always use Active Directory groups, never individual user permissions (easier to manage at scale)
  • Inheritance: Break inheritance only when absolutely necessary; too many unique permissions create management nightmares
  • Standard Roles: Use built-in permission levels (Full Control, Edit, Contribute, Read) rather than custom levels when possible

Typical Structure:

  • Site Owners: Department heads or business owners (2-3 people max)
  • Site Members: Contributors who can add/edit content
  • Site Visitors: Read-only access
  • Separate groups: For sensitive document libraries (HR, Finance)

Best Practices:

  • Document all unique permissions and review quarterly
  • Use SharePoint groups mapped to AD groups for easier auditing
  • Implement site collection admin policies for governance
  • Regular access reviews to remove former employees or transferred staff
  • For SharePoint Online, leverage sensitivity labels and DLP policies for additional security

Real-World Experience: I've managed permissions for 800+ users and found that a well-documented governance plan prevents 90% of access issues.

Have you customized SharePoint pages or built workflows using Power Automate or SharePoint Designer?

I have extensive experience with both modern and classic SharePoint customization:

Power Automate (Current Focus):

  • Developed 40+ cloud flows reducing manual processing time by 65%
  • Grant Management System: Created multi-stage approval workflows that reduced approval cycles from 14 days to 3 days
  • Emergency Communication System: Built automated notification system using SharePoint lists as triggers
  • Document Routing: Created conditional flows that route documents to different departments based on metadata
  • Error Handling: Implemented try-catch patterns, parallel branches for notifications, and run-after configurations

SharePoint Designer (Legacy Experience):

  • Built SharePoint Designer workflows for SharePoint 2010/2013 environments
  • Created document approval workflows with multiple approval stages
  • HR Onboarding Workflow: Automated new employee documentation processing
  • Used custom task forms, InfoPath integration, and workflow variables

Page Customization:

  • Created custom SPFx web parts for course registration and student services
  • Designed modern SharePoint pages with hero web parts, news, events, and document libraries
  • Built custom master pages and page layouts for SharePoint 2013 (classic experience)
  • Faculty Resource Portal with comprehensive navigation, calendars, and departmental sites

Evolution: The transition from SharePoint Designer to Power Automate has been significant—Power Automate offers better reliability, error handling, and integration with the broader Microsoft ecosystem.

How would you diagnose a SharePoint site that is slow or returning errors?

I use a systematic troubleshooting approach:

Initial Assessment:

  1. User Reports: Clarify if it's site-wide or specific to certain users/browsers
  2. Browser Console: Check for JavaScript errors (F12 Developer Tools)
  3. Network Tab: Look for slow-loading resources or failed requests

Common Issues & Solutions:

SharePoint Online:

  • Large Lists: Check if lists exceed 5,000 item threshold; create indexed columns and filtered views
  • Custom Scripts: Disable custom scripts temporarily to see if third-party web parts are causing issues
  • Heavy Web Parts: Remove or replace resource-intensive web parts
  • Microsoft 365 Status: Check admin.microsoft.com for service health incidents

SharePoint On-Premises:

  • IIS Logs: Review logs for 404s, 500 errors, or timeouts
  • SQL Performance: Check database performance counters, blocking queries, index fragmentation
  • Server Resources: Monitor CPU, memory, disk I/O on SharePoint and SQL servers
  • Search Service: Verify search isn't consuming excessive resources during crawls
  • Patching Status: Ensure servers are current with CUs and security updates

Specific Scenarios:

  • Slow Page Load: Use SharePoint health analyzer, check for large images, optimize web part queries
  • Access Denied: Check ULS logs, verify permissions, test with different accounts
  • Workflow Errors: Review workflow history, check for orphaned workflows, verify service account permissions

Quick Wins: In my experience, 70% of issues are list threshold violations or permission problems—quick fixes that dramatically improve performance.

Have you ever performed a SharePoint migration or cleanup? What was the process?

Yes, I've led several migration projects:

Major Migration (SharePoint 2013 to SharePoint Online):

Planning Phase:

  • Assessed 2TB of content across 5 web applications
  • Identified ROT content (Redundant, Obsolete, Trivial)—eliminated 30% before migration
  • Created site inventory with owners, size, custom solutions, and workflows
  • Documented custom code that needed remediation or replacement

Migration Approach:

  • Used hybrid configuration for phased migration
  • Pilot migration with 3 department sites to test and refine process
  • Migrated site collections in waves based on business priority
  • Recreated SharePoint Designer workflows as Power Automate flows
  • Validated permissions, metadata, and version history post-migration

Cleanup Process:

  • Set storage quotas and site usage policies
  • Implemented retention policies to auto-delete old content
  • Removed duplicate files using duplicate detection tools
  • Archived inactive sites to separate site collection

Upgrade Project (SharePoint 2010 to 2013):

  • Pre-upgrade checker to identify compatibility issues
  • Custom code remediation for deprecated APIs
  • Test environment validation before production upgrade
  • Database attach method for site collection upgrades
  • Post-upgrade health checks and user acceptance testing

Key Lessons:

  • Communication is critical: Weekly updates to stakeholders prevented surprises
  • Cleanup first: Migrating junk is expensive—clean before migration
  • Test extensively: Pilot migrations revealed issues we fixed before full rollout
  • Training matters: Users needed guidance on modern SharePoint features

Challenge Overcome: The most challenging aspect was convincing site owners to delete old content—but showing storage savings and improved search helped get buy-in.

Scenario-Based SharePoint Questions

Suppose an internal department wants a new section on the intranet with forms and automated routing. How would you build it?

I would approach this project systematically using a phased implementation strategy:

Phase 1: Discovery & Planning (Week 1)

Requirements Gathering:

  • Stakeholder Meeting: Meet with department head and key users to understand their needs
    • What information needs to be collected?
    • Who submits the forms? (internal staff, specific roles, all employees)
    • What's the approval/routing logic? (sequential, parallel, conditional)
    • What are the SLA expectations for processing?
    • What notifications are needed?
  • Current Process Review: Document existing manual process to identify pain points
  • Security Requirements: Determine who needs access and what permission levels
  • Compliance Needs: Identify any retention, audit trail, or accessibility requirements

Phase 2: Site Architecture (Week 2)

SharePoint Site Structure:

  • Site Type: Create a modern Team Site or subsite under existing intranet hub
  • Navigation: Add to main intranet navigation for discoverability
  • Permissions:
    • Site Members: Department staff who can submit forms
    • Site Owners: Department heads/approvers (2-3 people)
    • Restrict edit access to prevent unauthorized modifications
  • Information Architecture:
    • Landing page with instructions and links to forms
    • SharePoint list/library to store submissions
    • Document library for reference materials/templates
    • Dashboard page to track submission status

Phase 3: Form Development

Form Solution Options:

Option A: Power Apps (Recommended for Complex Forms)

  • Build Canvas app with custom branding and logic
  • Implement conditional fields (show/hide based on selections)
  • Add data validation and field-level rules
  • Include file upload capabilities
  • Store submissions in SharePoint list
  • Embed app in SharePoint page

Option B: SharePoint List with Custom Form (Simple Forms)

  • Create SharePoint list with required columns
  • Customize form using JSON formatting or Power Apps
  • Use choice columns, lookup columns, and calculated fields
  • Set column validation rules

Form Features I'd Include:

  • Required field validation with clear error messages
  • Help text and tooltips for complex fields
  • Auto-populate fields (user name, email, date) where possible
  • Confirmation message upon successful submission
  • Save draft functionality for longer forms
  • Mobile-responsive design
  • WCAG 2.1 AA accessibility compliance

Phase 4: Automated Routing with Power Automate

Workflow Design:

Based on my experience building the Grant Management System (14 to 3-day approval reduction), I would create a cloud flow triggered when a new item is created:

  • Trigger: When an item is created in SharePoint list
  • Conditional Routing Logic:
    • Use Switch or Condition actions based on form fields (department, request type, amount, etc.)
    • Route to appropriate approver(s) based on business rules
    • Example: If request type = "Equipment", route to Operations Manager; if type = "Training", route to HR Director
  • Approval Actions:
    • Use "Start and wait for approval" action
    • Support for sequential approvals (Stage 1 → Stage 2 → Stage 3)
    • Support for parallel approvals (multiple approvers at same time)
    • Set approval timeout/escalation policies
  • Notifications:
    • Email submitter with confirmation and tracking number
    • Notify approvers with actionable approval link
    • Send status updates (approved, rejected, needs more info)
    • Final notification to submitter with outcome
  • Data Actions:
    • Update SharePoint item with approval status, approver comments, timestamps
    • Create tasks in Planner or To Do if action required
    • Log to separate audit list for reporting
    • Move approved requests to different folder/library if needed
  • Error Handling:
    • Configure run-after settings for failure branches
    • Send error notifications to admin if workflow fails
    • Include try-catch scope blocks for external API calls

Phase 5: Dashboard & Reporting

  • Status Dashboard: Create SharePoint page with filtered views
    • "My Submissions" - filtered to current user
    • "Pending Approvals" - items awaiting action
    • "Recently Completed" - last 30 days
  • Power BI Report (Optional): For advanced analytics
    • Average processing time
    • Approval rates by department
    • Submission volume trends
    • Bottleneck identification

Phase 6: Testing & Deployment

User Acceptance Testing:

  • Create test scenarios covering all routing paths
  • Test with actual department users (2-3 power users)
  • Verify approval flows, notifications, and edge cases
  • Test on mobile devices and different browsers
  • Accessibility testing with screen readers

Training & Documentation:

  • Create quick start guide with screenshots
  • Record 2-3 minute video tutorial
  • Host 30-minute training session for department
  • Document workflow logic for future maintenance
  • Create troubleshooting FAQ

Launch Plan:

  • Soft launch with pilot group (1 week)
  • Monitor for issues and gather feedback
  • Make adjustments based on real-world usage
  • Full rollout with announcement email
  • Schedule 2-week and 1-month check-ins

Post-Launch Support

  • Monitor workflow runs for failures in Power Automate portal
  • Review submission data for patterns or issues
  • Collect user feedback for continuous improvement
  • Document lessons learned for future form projects

Real-World Example: I used this exact approach to build the Grant Management System at the university, which reduced approval cycles from 14 days to 3 days. The key to success was involving stakeholders early, thoroughly testing routing logic, and providing excellent training and documentation.

Timeline Estimate

  • Simple form with basic routing: 1-2 weeks
  • Complex form with multi-stage approvals: 3-4 weeks
  • Enterprise solution with integrations: 6-8 weeks

Success Metrics: After deployment, I would track form completion rate, average processing time, user satisfaction scores, and workflow error rates to measure success and identify optimization opportunities.

Employees report broken links or outdated documents on the intranet. How would you manage updates and maintain accuracy?

This is a common challenge I've faced managing intranet sites for 800+ users. I would implement a multi-layered approach combining governance, automation, and proactive maintenance:

Immediate Actions (Week 1)

1. Create a Reporting Mechanism:

  • Feedback Form: Add a "Report an Issue" button on every intranet page
    • Simple Power Apps form or Microsoft Form
    • Fields: Page URL (auto-captured), Issue type (broken link, outdated content, error), Description, Reporter info
    • Submissions go to SharePoint list
  • Automated Triage: Power Automate flow triggers on new submission
    • Send confirmation to reporter
    • Notify site owner or content admin
    • Create task in Planner for tracking
    • SLA: Acknowledge within 1 business day, resolve within 5 days

2. Quick Fix Process:

  • Review reported issues daily (or set up alert for high-priority items)
  • For broken links:
    • Check if target page moved (use search or contact page owner)
    • Update link or remove if no longer relevant
    • Verify fix and notify reporter
  • For outdated content:
    • Contact document owner for updated version
    • Add "Last Updated: [Date]" stamp to pages
    • Remove truly obsolete content rather than leaving it

Proactive Detection (Weeks 2-3)

1. Automated Link Checking:

Power Automate Scheduled Flow:

  • Runs weekly or monthly (depending on site size)
  • Uses "Send an HTTP request to SharePoint" action to retrieve pages
  • Parses HTML content for links
  • Tests each link with HTTP request (checks for 404, 500 errors)
  • Compiles report of broken links
  • Emails report to site administrators

Alternative: Third-Party Tools:

  • Use tools like Screaming Frog, Dead Link Checker, or SharePoint-specific tools
  • Schedule quarterly comprehensive scans
  • Export results and create remediation plan

2. Content Freshness Monitoring:

  • Metadata Strategy: Add "Review Date" and "Content Owner" columns to document libraries
    • Set review cycle (quarterly, annually based on content type)
    • Calculate next review date automatically
  • Automated Reminders: Power Automate scheduled flow
    • Runs daily, checks for content due for review
    • Sends reminder email to content owner 30 days before due date
    • Escalates to manager if no action after 2 reminders
    • Example: "Your document 'Employee Handbook' is due for review on [date]. Please review and update or confirm it's still current."

Governance Framework (Ongoing)

1. Content Ownership Model:

  • Assign Clear Owners: Every page/document has a designated owner
    • Typically the department or subject matter expert
    • Document in site settings or separate tracking list
  • Ownership Matrix: Create SharePoint list mapping content areas to owners
    • Columns: Content Area, Primary Owner, Backup Owner, Review Frequency, Last Updated
    • Makes it easy to know who to contact for updates

2. Content Lifecycle Policies:

  • Retention Rules:
    • News articles: Keep for 2 years, then archive
    • Policies: Review annually
    • Meeting minutes: Permanent or per records policy
    • Project documents: Archive when project closes
  • Expiration Workflow:
    • Use SharePoint retention labels or custom Power Automate flow
    • Flag content approaching expiration
    • Auto-archive or delete per policy

3. Publishing Standards:

  • Create content publishing guidelines:
    • Use descriptive link text (not "Click here")
    • Include publish date on all pages/documents
    • Add contact info for questions
    • Test all links before publishing
    • Use relative URLs for internal links when possible
  • Provide training to content editors on best practices

Monitoring & Metrics

Track Key Indicators:

  • Issue Volume: Number of broken link/outdated content reports per month
  • Resolution Time: Average time to fix reported issues
  • Content Age: Percentage of content reviewed in last 12 months
  • Link Health: Percentage of links that are functional
  • User Satisfaction: Follow-up survey after issue resolution

Reporting Dashboard:

  • Create Power BI or SharePoint dashboard showing:
    • Open issues by status (New, In Progress, Resolved)
    • Issues by content area/department
    • Trend over time (are we improving?)
    • Content review compliance by department
  • Review monthly in governance committee meeting

Regular Maintenance Schedule

Daily:

  • Review and triage new issue reports
  • Fix critical/high-impact issues

Weekly:

  • Process accumulated issue reports
  • Update issue tracking list
  • Communicate with content owners on outstanding items

Monthly:

  • Run automated link checker
  • Review content due for refresh
  • Check metrics and update dashboard
  • Send reminder emails to owners with overdue reviews

Quarterly:

  • Comprehensive site audit (spot-check 10% of pages)
  • Review governance effectiveness with stakeholders
  • Update content ownership matrix
  • Identify and archive obsolete sections

Annually:

  • Full intranet content inventory and assessment
  • Update publishing standards and governance policies
  • Refresh training materials for content editors
  • Plan major content restructuring if needed

User Communication

  • Be Transparent: Add a "Content Freshness" indicator
    • Green badge: "Reviewed within last 6 months"
    • Yellow badge: "Under review"
    • Use modern SharePoint page properties or custom web part
  • Acknowledge Reports: Always thank users for reporting issues
    • Builds culture of shared responsibility for content quality
    • Automated thank you email helps
  • Promote the Reporting Tool: Regular reminders in newsletters, on homepage
    • "See something wrong? Report it!"

Technology Solutions

Power Automate Flows I Would Build:

  1. Issue Intake Flow: Form submission → Create list item → Notify owner → Create task
  2. Link Checker Flow: Scheduled → Parse pages → Test links → Report broken links
  3. Content Review Reminder Flow: Scheduled → Check due dates → Email reminders
  4. Expiration Alert Flow: Scheduled → Find expired content → Alert site admins
  5. Resolution Notification Flow: Item updated to "Resolved" → Thank reporter → Close task

Cultural Change

  • Content Owner Accountability: Include intranet content maintenance in job descriptions/performance reviews
  • Recognition: Highlight departments with excellent content maintenance
  • Training: Offer quarterly "Content Editor" training sessions
  • Leadership Support: Get executive buy-in for content quality initiatives

Real-World Results: When I implemented this system at the university, we reduced broken link reports by 75% within 6 months. The key was combining automated detection with a culture of content ownership. The "Report an Issue" button alone generated 40+ fixes in the first month—issues we didn't even know existed!

Success Criteria

I would consider the initiative successful when:

  • 95%+ of links are functional at any given time
  • 90%+ of content reviewed within required timeframe
  • Issue reports acknowledged within 1 business day
  • Average resolution time under 5 business days
  • Month-over-month decrease in issue reports (fewer problems occurring)
  • Positive user feedback about intranet content quality

Bottom Line: Broken links and outdated content are symptoms of missing governance. The solution isn't just fixing individual issues—it's building sustainable processes, clear ownership, and automated monitoring so problems are caught early or prevented entirely.

HESAA Mock Interview - Program Associate (Web Developer)

General interview questions for the HESAA Web Developer position.

Tell us about yourself and why you want to work at HESAA.

"I'm a software engineer with 3+ years of experience building web applications and internal systems using React, Java, MS SQL, and Salesforce. I've also developed public-facing portals and internal workflow automation tools for organizations like UNDP and Premier Aesthetix, and I've supported cross-functional teams with content, UI design, QA, and deployment.

What draws me to HESAA is the mission—helping students access financial aid. I want to apply my web development and UX skills in a public-sector environment where reliability, accessibility, and clarity directly impact families. I'm also excited about managing both a public website and an internal SharePoint-based intranet, because I've worked on similar dual-environment systems in my previous roles."

What is your experience with SharePoint?

You have experience with intranet management, document workflows, and enterprise systems — but not deep SharePoint development. The trick is to position yourself as very capable and quick to learn.

"I have hands-on experience maintaining and updating internal portals and document workflows that are similar to SharePoint environments. I've managed permissions, created internal content, and supported intranet-based communication systems. I've also worked with Microsoft ecosystems including Office 365, Power BI, MS SQL, and Azure authentication.

While I haven't built advanced custom SharePoint components yet, I understand the architecture, and I've used SharePoint for document routing, internal announcements, and collaboration. Given my background with enterprise systems and workflow automation, I'm very comfortable learning SharePoint development and administration quickly."

Have you managed a public website before?

"Yes. I've managed public-facing web applications and websites in multiple roles. At UNDP, I developed the SDG Solutions Lab site—building responsive layouts, updating content, and ensuring design consistency. At PAIC LLC, I managed the company website, handled hosting updates, added new pages, and ensured accuracy of public-facing content.

In all cases I was responsible for updating announcements, ensuring data accuracy, and coordinating with design teams. Those responsibilities align closely with managing hesaa.org."

This role involves ADA/WCAG compliance. What steps do you follow to ensure accessibility?

"My accessibility process includes:

  • Ensuring alt text for all images and decorative elements
  • Maintaining color contrast ratios that meet WCAG guidelines
  • Making sure components are fully keyboard-navigable
  • Using semantic HTML tags instead of div-heavy layouts
  • Using ARIA labels when necessary, but avoiding overuse
  • Testing with lighthouse and screen reader tools
  • Ensuring form fields have labels, error messages, and proper focus states

I've followed these practices in my UNDP project, which required compliance with global UX and accessibility standards."

Tell us about a time you improved a website's user experience.

"In my UNDP project, users struggled to navigate between different SDG sections. I redesigned the site architecture using a cleaner hierarchy, added breadcrumb navigation, and reorganized content into logical categories. I also optimized responsive design for mobile users. As a result, bounce rate decreased and users stayed on pages longer.

I would bring the same user-centered approach to improving hesaa.org—especially navigation and content clarity."

Do you have experience with Angular?

"My strongest frontend experience is with React TypeScript, which I've used extensively to build production systems. The concepts—components, state management, routing, services—translate well to Angular. I have also worked with TypeScript, which Angular heavily relies on.

I'm very comfortable learning Angular quickly and have studied the fundamentals such as modules, components, dependency injection, and lifecycle hooks. I'm confident I can contribute effectively using Angular."

How do you handle urgent content updates or last-minute requests?

"I prioritize accuracy and speed by following a structured process:

  1. Clarify the request to understand urgency and required changes.
  2. Double-check content for accuracy, typos, compliance, and potential user impact.
  3. Stage the update in a test environment whenever possible.
  4. Perform quick QA (broken links, formatting, device responsiveness).
  5. Deploy and monitor for any issues immediately after publishing.

This approach has helped me consistently deliver rapid yet reliable updates in previous roles with tight deadlines."

Can you explain a digital form workflow you built?

"In my UNDP and enterprise work, I built multiple forms that triggered automated workflows. For example, I developed an internal reporting form where the submission triggered routing based on user type. Using backend rules, the form data was validated, categorized, and forwarded to the correct department.

I also implemented email notifications, error handling, and a tracking mechanism so departments could see the submission history. This aligns closely with the workflow automation expected at HESAA."

How do you ensure accuracy when posting legal or policy documents online?

"My approach includes:

  • Reviewing document metadata and version numbers
  • Confirming with the originating department that it's the final approved document
  • Using consistent naming conventions and accessibility formatting
  • Double-checking all links, anchors, and references
  • Keeping an audit trail of updates and previous versions

Government websites rely on accuracy, and I take extra care to ensure the posted material is authoritative."

Describe a time you explained a technical issue to a non-technical stakeholder.

"When I worked on the Future Trends and Signals System, I had to explain API integration and authentication concepts to stakeholders who had little technical background. I used simple language and avoided jargon—for example, explaining JWT authentication as a 'temporary digital visitor pass' instead of using technical terms.

That clarity helped the team understand system behavior and make better decisions. I try to tailor my communication style to the audience."

Why should we hire you?

"You should hire me because I bring:

  • Hands-on experience developing and managing both public websites and internal platforms
  • Strong frontend skills (HTML, CSS, JS, responsive design, React, TypeScript)
  • Experience with enterprise workflow automation and content accuracy
  • A user-centered approach with attention to accessibility and ADA compliance
  • Experience working with government and public-sector organizations
  • The ability to learn new technologies like Angular or SharePoint administration very quickly

I'm committed to reliability, accuracy, and clear communication — all of which are essential to a public agency like HESAA."

SPFx vs Lightning Web Components (LWC)

Comparison between SharePoint Framework and Salesforce Lightning Web Components.

Lightning Web Components (LWC)

Purpose: LWC is Salesforce's modern framework for building UI components on the Salesforce platform, similar to how SPFx works for SharePoint.

Technology Stack: It uses standard web technologies (HTML, CSS, JavaScript) and aligns with modern web standards, much like SPFx.

Integration: LWC components run natively on the Salesforce platform and can be embedded in Lightning pages, apps, and communities.

Advantages:

  • High performance due to native rendering.
  • Works alongside older Aura components, but LWC is the recommended approach for new development.
  • Supports modular development and reusability.

Comparison to SPFx

Both frameworks aim to provide customization and extensibility for their respective platforms.

SPFx focuses on SharePoint Online and Microsoft 365, while LWC is for Salesforce Lightning Experience.

Both leverage modern JavaScript frameworks and tooling.

Feature Comparison Table

Feature SPFx (SharePoint Framework) LWC (Lightning Web Components)
Platform Microsoft 365 / SharePoint Online Salesforce Lightning Experience
Purpose Build custom web parts, extensions, and apps for SharePoint Build reusable UI components for Salesforce apps
Technology Stack TypeScript, React (optional), Node.js Standard Web Components (HTML, CSS, JavaScript)
Framework Type Client-side development framework Component-based framework using native web standards
Deployment Deployed to SharePoint Online or Microsoft Teams Deployed to Salesforce Org (Lightning Pages, Apps)
Tooling Yeoman generator, Gulp, npm Salesforce CLI, npm
Hosting SharePoint Online CDN or Azure CDN Salesforce Platform
Integration Works with SharePoint lists, libraries, and Microsoft Graph Works with Salesforce data via Apex and Lightning Data Service
Customization Scope SharePoint sites, Teams tabs, Microsoft 365 apps Salesforce Lightning pages, Communities, Mobile apps
Security Model OAuth with Microsoft Graph Salesforce security model (Profiles, Permissions)
Learning Curve Moderate (requires knowledge of SharePoint + modern JS) Moderate (requires Salesforce concepts + JS)

Interview Answer: How does your LWC experience translate to SPFx?

My experience with Lightning Web Components (LWC) in Salesforce translates very well to SharePoint Framework (SPFx) because both frameworks share a similar foundation in modern web development. LWC is built on standard web technologies like HTML, CSS, and JavaScript, and emphasizes component-based architecture, modularity, and reusability—principles that SPFx also relies on. In LWC, I've worked extensively with JavaScript ES6+, reactive data binding, and event-driven communication between components, which are directly applicable to SPFx development using TypeScript and React.

Additionally, I'm comfortable with CLI-based workflows, version control, and packaging components for deployment in Salesforce, which mirrors SPFx's use of Node.js, npm, and build tools like Gulp. Both frameworks require integration with platform APIs—Salesforce uses Apex and Lightning Data Service, while SPFx uses Microsoft Graph and SharePoint REST APIs—so my experience in handling asynchronous calls, managing state, and ensuring secure data access is highly relevant.

In short, the core skills—modern JavaScript, component-driven design, responsive UI development, and API integration—are common to both frameworks. This makes transitioning from LWC to SPFx a natural progression for me.