Codú
Omar Kafeel5 min read

Building an Azure DevOps Extension for Collaborative Effort-Impact Matrix Prioritization

In modern software development, prioritization decisions often fall to product managers or business stakeholders, leaving developers feeling disconnected from the process. This creates a gap where technical insights are undervalued, and business priorities may not align with implementation realities. To address this challenge, I developed an Azure DevOps extension that democratizes the prioritization process through collaborative effort-impact matrix sessions.

The Problem: Disconnected Prioritization

Traditional prioritization methods often suffer from several issues:

  1. One-sided decision making: Business stakeholders prioritize without technical input
  2. Lack of transparency: Developers don't understand why certain items are prioritized
  3. Misaligned expectations: Business impact doesn't always correlate with technical complexity
  4. Reduced team buy-in: When developers don't contribute to prioritization, they're less invested in the outcomes

The Solution: Collaborative Effort-Impact Matrix

The extension implements a collaborative voting system where team members rate backlog items across three dimensions:

  1. Effort: Technical complexity and implementation time
  2. Technical Impact: Architectural significance and technical debt reduction
  3. Business Impact: Customer value and business objectives The system automatically calculates an overall impact score (average of technical and business impact) and places items on a four-quadrant matrix:
  4. High Impact / Low Effort (Priority 1): Quick wins
  5. High Impact / High Effort (Priority 2): Strategic investments
  6. Low Impact / Low Effort (Priority 3): Maintenance tasks
  7. Low Impact / High Effort (Priority 4): Avoid or reconsider

Technical Architecture

Frontend: React with Fluent UI

The extension uses React 18 with TypeScript for type safety and Fluent UI for consistent Microsoft design language:

// Core interfaces for type safety
interface Vote {
effort: number;
technical: number;
 business: number;
}

interface MatrixItem {
storyId: number;
 effort: number;
 impact: number;
 quadrant: string;
}

interface Session {
 ownerId: string;
 ownerName: string;
 projectId: string;
 teamId: string;
 startedAt: string;
 joinedUsers: { id: string; displayName: string }[];
 backlogItems: any[];
 votes: { [storyId: number]: { [userId: string]: Vote } };
 matrix: MatrixItem[];
}

Azure DevOps Integration

The extension leverages the Azure DevOps Extension SDK for seamless integration:

// Initialize SDK and get context
SDK.init();
SDK.ready().then(() => {
  const webContext = SDK.getWebContext();
  const userInfo = SDK.getUser();
  // Access project and user information
});

REST API Integration

Direct integration with Azure DevOps REST APIs for data retrieval and updates:

// Fetch teams for the project
export async function getTeamsForProject(projectId: string): Promise<any[]> {
  const accessToken = await SDK.getAccessToken();
  const orgName = SDK.getHost().name;
  
  const response = await fetch(
    `https://dev.azure.com/${orgName}/_apis/projects/${projectId}/teams?api-version=7.1-preview.3`,
    {
      headers: {
        'Authorization': `Bearer ${accessToken}`,
        'Content-Type': 'application/json',
      },
    }
  );
  return response.json();
}

Data Persistence

Sessions and matrix data are persisted using Azure DevOps Extension Data Service:

export async function saveSessionData(projectId: string, session: any) {
  const extDataService = await SDK.getService<any>("ms.vss-features.extension-data-service");
  const collection = await extDataService.getExtensionDataManager(
    SDK.getExtensionContext().id, 
    await SDK.getAccessToken()
  );
  const key = `session-${session.startedAt}`;
  await collection.setDocument("sessions", key, session, { 
    scopeType: "Project", 
    scopeValue: projectId 
  });
}

Key Features

Session Management

  • Session Owner: Project owner configures and starts sessions
  • Team Selection: Choose specific team backlogs for focused prioritization
  • Real-time Collaboration: Team members can join active sessions
  • Session History: View and compare previous prioritization sessions

Collaborative Voting

  • Three-dimensional Rating: Effort, Technical Impact, and Business Impact
  • 0.5 Increment Scale: 1.0 to 5.0 with 0.5 intervals for precise rating
  • Real-time Averages: Live calculation of team consensus
  • Individual Privacy: Votes are anonymous but contribute to team averages

Automated Matrix Generation

  • Dynamic Placement: Items automatically positioned based on calculated scores
  • Priority Assignment: Azure DevOps work item priority fields updated automatically
  • Visual Quadrants: Color-coded matrix with clear priority indicators
  • Historical Comparison: Compare current vs. previous session matrices

Azure DevOps Integration

  • Work Item Updates: Automatic priority field population
  • Backlog Integration: Direct access to team backlogs
  • User Context: Leverages existing Azure DevOps user authentication
  • Project Scope: Respects Azure DevOps project boundaries

Development Process

Extension Manifest

The extension is defined in vss-extension.json:

{
  "manifestVersion": 1,
  "id": "efimgrid-extension",
  "name": "Effort-Impact Matrix Grid",
  "publisher": "TetraTechnologyLimited",
  "version": "0.1.0",
  "contributions": [
    {
      "id": "efimgrid-hub",
      "type": "ms.vss-web.hub",
      "targets": ["ms.vss-work-web.work-hub-group"],
      "properties": {
        "name": "Effort-Impact Matrix",
        "uri": "https://your-production-url.com"
      }
    }
  ],
  "permissions": [
    {
      "resource": "vso.work",
      "access": "read"
    },
    {
      "resource": "vso.work",
      "access": "write"
    }
  ]
}

Build and Deployment

  • Webpack Configuration: Bundles React components and dependencies
  • TypeScript Compilation: Ensures type safety across the application
  • Production Build: Optimized for Azure DevOps hosting
  • VSIX Packaging: Creates installable extension package

Local Development

# Install dependencies
npm install

# Start development server
npm start

# Build for production
npm run build

# Package extension
tfx extension create --manifest vss-extension.json

Benefits and Impact

For Development Teams

  • Democratized Decision Making: All team members contribute to prioritization
  • Technical Perspective: Developer insights are valued and incorporated
  • Transparency: Clear understanding of why items are prioritized
  • Team Buy-in: Increased ownership and commitment to deliverables

For Product Management

  • Balanced Perspective: Technical complexity is considered alongside business value
  • Data-Driven Decisions: Quantitative scoring reduces subjective bias
  • Team Alignment: Shared understanding of priorities across roles
  • Historical Context: Learn from previous prioritization sessions

For Organizations

  • Improved Delivery: Better-aligned priorities lead to more successful projects
  • Reduced Technical Debt: Technical impact is explicitly considered
  • Team Satisfaction: Developers feel heard and valued
  • Process Improvement: Continuous refinement of prioritization methodology

Future Enhancements

Planned Features

  • Advanced Analytics: Trend analysis and prioritization insights
  • Custom Rating Scales: Configurable rating dimensions
  • Integration APIs: Connect with external project management tools
  • Mobile Support: Responsive design for mobile devices

Technical Improvements

  • Real-time Collaboration: WebSocket integration for live updates
  • Advanced Matrix Visualizations: Interactive charts and graphs
  • Export Capabilities: PDF reports and data export
  • Custom Workflows: Configurable prioritization processes

This Azure DevOps extension represents a significant step toward democratizing software development prioritization. By giving developers a voice in the prioritization process, organizations can achieve better alignment between technical realities and business objectives.

The technical implementation demonstrates how modern web technologies can integrate seamlessly with enterprise development platforms, creating tools that enhance rather than disrupt existing workflows. The collaborative approach ensures that prioritization decisions are more informed, transparent, and aligned with both technical and business needs.

As software development continues to evolve toward more collaborative and transparent processes, tools like this extension will become increasingly valuable for organizations seeking to maximize the value of their development teams while maintaining strong alignment with business objectives.

The extension is now ready for production deployment and can be shared across Azure DevOps organizations to improve prioritization practices and team collaboration.

ProductivityDevelopmentExtensionsAzure DevopsMicrosoft
Omar Kafeel@omarkafeel
Loading

Loading discussion...

Hey! 👋

Got something to say?

or to leave a comment.