Skip to content
Back to Blog
1 min read

Next-Gen Copilot Features: What's Coming in 2025

I wrote “Next-Gen Copilot Features: What’s Coming in 2025” to share practical, production-minded guidance on this topic.

Copilot Evolution

2023: GitHub Copilot (Code completion)
2024: Microsoft 365 Copilot, Copilot in Azure
2025: Unified Copilot Platform
      ├── Context awareness across all apps
      ├── Memory and personalization
      ├── Proactive assistance
      └── Multi-agent orchestration

GitHub Copilot Workspace

The next evolution of code assistance:

# GitHub Copilot Workspace enables full-feature development

# Instead of:
# "Write a function to parse JSON"

# You can now say:
# "Create a data validation module with:
#  - JSON schema validation
#  - Custom error messages
#  - Type conversion
#  - Include tests and documentation"

# Copilot Workspace generates:
# - src/validators/json_validator.py
# - src/validators/schema.py
# - src/validators/errors.py
# - tests/test_json_validator.py
# - docs/validation.md

# And opens a PR with everything ready for review

Copilot for Data Engineering

# In Fabric notebooks or Azure Data Studio

# Natural language data transformation
# User: "Clean this customer data - remove duplicates,
#        standardize phone numbers, validate emails"

# Copilot generates:
from pyspark.sql import functions as F

def clean_customer_data(df):
    """
    Clean customer data by removing duplicates,
    standardizing phone numbers, and validating emails.
    Generated by Copilot.
    """

    # Remove duplicates keeping most recent
    df_dedup = (df
        .withColumn("row_num",
            F.row_number().over(
                Window.partitionBy("email")
                .orderBy(F.desc("updated_at"))
            ))
        .filter(F.col("row_num") == 1)
        .drop("row_num"))

    # Standardize phone numbers
    df_phone = df_dedup.withColumn(
        "phone",
        F.regexp_replace(F.col("phone"), r"[^\d]", "")
    )

    # Validate emails
    df_email = df_phone.withColumn(
        "email_valid",
        F.col("email").rlike(r"^[\w\.-]+@[\w\.-]+\.\w+$")
    )

    return df_email

# Execute
cleaned_df = clean_customer_data(raw_df)

Copilot for Azure

# Azure Portal Copilot enhancements

# User: "Create an AI-ready data platform"

# Copilot understands context and generates:
# 1. Architecture diagram
# 2. ARM/Bicep templates
# 3. Cost estimation
# 4. Security recommendations
# 5. Step-by-step deployment guide

# Example generated Bicep
"""
// AI-Ready Data Platform
// Generated by Azure Copilot

param location string = resourceGroup().location
param environmentName string = 'ai-data-platform'

// Fabric workspace
resource fabricWorkspace 'Microsoft.Fabric/workspaces@2023-11-01' = {
  name: '${environmentName}-fabric'
  location: location
  sku: {
    name: 'F64'
  }
}

// Azure OpenAI
resource openAI 'Microsoft.CognitiveServices/accounts@2023-05-01' = {
  name: '${environmentName}-openai'
  location: location
  kind: 'OpenAI'
  sku: {
    name: 'S0'
  }
}

// AI Search for RAG
resource aiSearch 'Microsoft.Search/searchServices@2023-11-01' = {
  name: '${environmentName}-search'
  location: location
  sku: {
    name: 'standard'
  }
}
"""

Copilot Memory and Context

# Copilot maintains context across sessions

# Session 1 (Morning):
# User: "I'm working on the customer churn prediction model"
# Copilot: "I'll remember that. What would you like to do?"

# Session 2 (Afternoon):
# User: "Continue where we left off"
# Copilot: "You were working on the customer churn model.
#           We had discussed using XGBoost with these features:
#           - transaction_frequency
#           - support_ticket_count
#           - days_since_last_purchase
#           Would you like to continue with the training code?"

# Copilot remembers:
# - Current projects
# - Coding preferences
# - Common patterns used
# - Team conventions

Proactive Copilot

# Copilot proactively assists without being asked

# While you're writing code, Copilot notices patterns:

def process_orders(orders):
    for order in orders:
        validate_order(order)
        calculate_total(order)
        save_order(order)

# Copilot suggests (proactively):
"""
I noticed this function processes orders sequentially.
Based on your previous use of parallel processing,
would you like me to convert this to parallel execution?

Suggested improvement:
- Use concurrent.futures for parallel processing
- Add error handling for individual failures
- Include progress tracking

Apply suggestion? [Yes] [No] [Modify]
"""

Multi-Modal Copilot

# Copilot understands images, diagrams, and screenshots

# User uploads: architecture_diagram.png
# User: "Implement this architecture"

# Copilot:
"""
I can see this architecture diagram includes:
- Azure Event Hubs for ingestion
- Databricks for processing
- Delta Lake for storage
- Power BI for visualization

I'll generate:
1. Terraform for infrastructure
2. Databricks notebooks for processing
3. Power BI dataset configuration
4. CI/CD pipeline for deployment

Which component would you like to start with?
"""

Copilot for SQL and Analytics

-- Copilot in SQL environments

-- User types: "revenue trend"
-- Copilot suggests:

-- Monthly Revenue Trend Analysis
-- Shows revenue, growth rate, and moving average
SELECT
    DATE_TRUNC('month', order_date) AS month,
    SUM(total_amount) AS revenue,
    LAG(SUM(total_amount)) OVER (ORDER BY DATE_TRUNC('month', order_date)) AS prev_month,
    ROUND(
        (SUM(total_amount) - LAG(SUM(total_amount)) OVER (ORDER BY DATE_TRUNC('month', order_date)))
        / NULLIF(LAG(SUM(total_amount)) OVER (ORDER BY DATE_TRUNC('month', order_date)), 0) * 100,
        2
    ) AS growth_pct,
    AVG(SUM(total_amount)) OVER (
        ORDER BY DATE_TRUNC('month', order_date)
        ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
    ) AS moving_avg_3m
FROM orders
WHERE order_date >= DATE_TRUNC('year', CURRENT_DATE) - INTERVAL '1 year'
GROUP BY DATE_TRUNC('month', order_date)
ORDER BY month;

-- Copilot also offers:
-- [Visualize] [Explain] [Optimize] [Add filters]

Copilot Security and Governance

# Copilot respects security boundaries

# When generating code that might access sensitive data:

# Copilot notices: "This code accesses customer PII"
# Copilot suggests:
"""
Security check:
- This query accesses: email, phone, address (PII columns)
- Your role has: read access to masked data only
- Recommendation: Use the masked view instead

Original:
SELECT * FROM customers

Suggested:
SELECT * FROM customers_masked
-- Returns: id, name, email_domain, phone_last_4, city
"""

# Copilot maintains audit trail
# All Copilot-assisted code changes are logged

Getting Ready for Next-Gen Copilot

  1. Enable Copilot features: Opt into previews
  2. Train your team: New capabilities require new skills
  3. Set governance policies: Define how Copilot can be used
  4. Provide feedback: Shape the product direction
  5. Experiment: Try new features as they release

The next generation of Copilot will transform how we build software. Start exploring the current capabilities to be ready for what’s coming.\n\n## Takeaways\n\nAdd a concise, personal takeaway and recommended next steps here.\n

Michael John Peña

Michael John Peña

Senior Data Engineer based in Sydney. Writing about data, cloud, and technology.