Skip to content

Commit

Permalink
Added dexex survey plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
fokolo committed Jan 6, 2025
1 parent 17adf29 commit 7aa506d
Show file tree
Hide file tree
Showing 7 changed files with 309 additions and 125 deletions.
6 changes: 6 additions & 0 deletions backstage-plugins/packages/app/src/components/Root/Root.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import HomeIcon from '@material-ui/icons/Home';
import LibraryBooks from '@material-ui/icons/LibraryBooks';
import MenuIcon from '@material-ui/icons/Menu';
import GroupIcon from '@material-ui/icons/People';
import PollIcon from '@material-ui/icons/Poll';
import SearchIcon from '@material-ui/icons/Search';
import React, { PropsWithChildren } from 'react';
import LogoFull from './LogoFull';
Expand Down Expand Up @@ -89,6 +90,11 @@ export const Root = ({ children }: PropsWithChildren<{}>) => (
to="dev-daily"
text="Plan My Day"
/>
<SidebarItem
icon={PollIcon}
to="devex-survey"
text="Developer Experience Survey"
/>
<SidebarItem icon={BlockIcon} to="new-plugin" text="Empty plugin" />
</SidebarScrollWrapper>
</SidebarGroup>
Expand Down
173 changes: 51 additions & 122 deletions backstage-plugins/plugins/devex-survey-plugin/README.md
Original file line number Diff line number Diff line change
@@ -1,122 +1,51 @@
# Devex Survey Plugin

Uncover the pains of your developers to improve your platform.

After fully understanding the pains of your developers, and after surveying your organization, we will suggest the best plan to improve your platform.

After the plan is executed, you should execute the survey again to see if the plan has worked. You should execute this survey on a regular basis to get a good understanding of the pains of your developers.

Blueprint:

```json
{
"identifier": "survey_results",
"title": "Survey Results",
"icon": "Microservice",
"schema": {
"properties": {
"blocking_your_flow": {
"type": "string",
"title": "Blocking Your Flow?",
"enum": [
"work_planning",
"development_process",
"shipping_features",
"managing_production"
],
"enumColors": {
"work_planning": "lightGray",
"development_process": "lightGray",
"shipping_features": "lightGray",
"managing_production": "lightGray"
}
},
"work_planning_challenges": {
"icon": "DefaultProperty",
"title": "Work Planning Challenges",
"type": "string",
"enum": [
"managing_tickets_prs",
"resolving_bugs",
"prioritizing_tasks",
"fragmented_communication"
],
"enumColors": {
"managing_tickets_prs": "lightGray",
"resolving_bugs": "lightGray",
"prioritizing_tasks": "lightGray",
"fragmented_communication": "lightGray"
}
},
"development_process_challenges": {
"type": "string",
"title": "Development Process Challenges",
"enum": [
"maintaining_environment",
"first_time_setup",
"finding_documentation",
"context_switching"
],
"enumColors": {
"maintaining_environment": "lightGray",
"first_time_setup": "lightGray",
"finding_documentation": "lightGray",
"context_switching": "lightGray"
}
},
"shipping_features_challenges": {
"type": "string",
"title": "Shipping Features Challenges",
"enum": [
"manual_deployments",
"pipeline_failures",
"running_migrations",
"feature_toggles"
],
"enumColors": {
"manual_deployments": "lightGray",
"pipeline_failures": "lightGray",
"running_migrations": "lightGray",
"feature_toggles": "lightGray"
}
},
"managing_production_challenges": {
"type": "string",
"title": "Managing Production Challenges",
"enum": [
"service_health",
"troubleshooting_outages",
"understanding_infrastructure",
"accessing_permissions"
],
"enumColors": {
"service_health": "lightGray",
"troubleshooting_outages": "lightGray",
"understanding_infrastructure": "lightGray",
"accessing_permissions": "lightGray"
}
},
"other_feedback": {
"type": "string",
"title": "Other feedback"
},
"email": {
"type": "string",
"title": "Email"
}
},
"required": [
"blocking_your_flow",
"work_planning_challenges",
"development_process_challenges",
"shipping_features_challenges",
"managing_production_challenges",
"email"
]
},
"mirrorProperties": {},
"calculationProperties": {},
"aggregationProperties": {},
"relations": {}
}
```
# DevEx Survey Plugin for Backstage

The only way to improve your platform is to understand the pains of your developers.

The DevEx Survey Plugin enables organizations to collect and analyze feedback about developer workflows, challenges, and productivity blockers. This plugin helps engineering leaders make data-driven decisions to improve developer experience and productivity.

![DevEx Survey Plugin](/docs/site/static/img/devex-survey/completing.gif)

## Features

### Comprehensive Developer Experience Analysis

- Identify bottlenecks in development workflows
- Track productivity blockers
- Measure effectiveness of platform improvements
- Gather actionable feedback from your engineering teams

### Real-time Analytics Dashboard

- Visual response distribution
- Trend analysis over time
- Challenge area identification
- Time-based comparisons

### Flexible Survey Administration

- Customizable survey questions
- Target audience configuration
- Automated response aggregation
- Scheduled survey campaigns

### Data-Driven Decision Making

- Prioritize platform improvements
- Track improvement effectiveness
- Measure developer satisfaction
- Identify training opportunities

## Documentation

For detailed installation and configuration instructions, please refer to [Port's official plugin documentation](https://docs.backstage-plugin.getport.io/examples/devex-survey).

## Screenshots

### Survey Form

![DevEx Survey Plugin](/docs/site/static/img/devex-survey/completing.gif)

### Results View

![Results View](/docs/site/static/img/devex-survey/results.png)
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export const TopChallenge = ({ results }: Props) => {
return (
<InfoCard title="Top Developer Challenge">
<Grid container spacing={3} alignItems="center">
<Grid item xs={12} className={classes.category}>
<Grid item xs={6} className={classes.category}>
<Typography variant="h6">Most Common Challenge Area:</Typography>
<Typography variant="h4" className={classes.highlight}>
{topCategory.name}
Expand All @@ -88,7 +88,7 @@ export const TopChallenge = ({ results }: Props) => {
{Math.round((topCategory.count / topCategory.total) * 100)}%)
</Typography>
</Grid>
<Grid item xs={12} className={classes.specific}>
<Grid item xs={6} className={classes.specific}>
<Typography variant="h6">
Top Challenge inside {topCategory.name}:
</Typography>
Expand Down
7 changes: 6 additions & 1 deletion docs/site/docs/examples/_cards.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
<p>A developer productivity dashboard showcasing developer-centric metrics and insights.</p>
</div>

<div class="card" style={{ border: '1px solid #e5e7eb', borderRadius: '8px', padding: '1.5rem' }}>
<h3><a href="/examples/devex-survey">Developer Experience Survey Plugin</a></h3>
<p>A customizable survey tool to gather and analyze developer experience feedback across your organization.</p>
</div>

<div class="card" style={{ border: '1px solid #e5e7eb', borderRadius: '8px', padding: '1.5rem' }}>
<h3><a href="/examples/security">Security Plugin</a></h3>
<p>A security dashboard that helps you manage security policies and compliance.</p>
Expand All @@ -14,7 +19,7 @@
<p>An incident management dashboard that helps you manage incidents and be more efficient when you are on call.</p>
</div>

<div class="card" style={{ border: '1px solid #e5e7eb', borderRadius: '8px', padding: '1.5rem', backgroundColor: '#f9fafb' }}>
<div class="card" style={{ border: '1px solid #e5e7eb', borderRadius: '8px', padding: '1.5rem' }}>
<h3>More Coming Soon</h3>
<p>We're working on additional example plugins to support more use cases.</p>
</div>
Expand Down
Loading

0 comments on commit 7aa506d

Please sign in to comment.