How we built Port’s survey template

Ready to start?

How we built Port’s survey template

Building an internal developer portal requires product management skills. Thinking of your portal as a product means deliberating on what your users actually need. That requires you to identify real challenges within existing workflows and pinpoint friction points so that what you build isn’t just functional but genuinely valuable. The goal is not only to create something well-designed but to drive real adoption and meaningful improvements in how developers work.

In this blog, we’ll discuss how to design your portal from the beginning for maximum value — combining insights from our previous posts on designing your RFP, using a platform-as-a-product approach, and how to build a developer experience survey into a holistic, systematic roadmap. Having worked with dozens of organizations, from startups to large enterprises, we’ve refined a set of insights and tools that help our customers build the right solutions for their unique needs to ensure their portals deliver maximum impact.

How we built our survey template

This survey template wasn’t just created in a vacuum — it was the result of many iterations across multiple customer conversations and internal experiments. We studied what worked and what didn’t by talking to teams that had already run developer experience surveys, especially those who felt they didn't get useful feedback. 

Here are a few common pitfalls we saw, and how we addressed them:

  • Customers asking too many questions: One team tried sending a 20-question survey, but participation was low and results were inconsistent. We realized that most developers only have a few minutes to spare. Limiting surveys to a maximum of five questions, focused only on surfacing one main challenge per area, helps teams stay focused and deliver better responses.

  • Too many ideas, not enough focus: Another team built their portal roadmap by asking developers for feature ideas. This led to a wishlist with no clear priorities. We advised customers to ask their devs about friction instead — “What slows you down the most in X?” This change helped uncover deeper, systemic issues that could be tackled with targeted portal features.

  • Ambiguous responses due to vague wording: We also reviewed surveys with poorly-worded questions like "Do you feel productive with our current tools?" — which are hard to interpret and even harder to act on. We designed our questions to be clear, specific, and neutral, focusing on observable challenges (e.g., “Setting up environments,” “Deploying to production,” “Waiting for access”) rather than opinions or feelings.

We refined the format by testing these questions in our own workflows and validating them with feedback from both large enterprises and fast-moving startups. In one case, we even helped a customer rerun their survey after they realized the original responses weren’t useful. The second time, using our adjusted structure, they could clearly identify top pain points — and prioritize automation work accordingly.

{{survey}}

Four principles of an effective developer experience survey

The key to meaningfully improving the experiences and workflows of your developers lies in outlining a structured discovery process at the very beginning — providing a systematic approach to uncovering the most pressing workflow challenges will help you prioritize what needs fixing most urgently. 

Creating a developer survey that provides real, actionable insights is not just about asking the right questions — it’s about structuring them in a way that ensures engagement, clarity, and relevance. 

This survey is the result of many iterations, built after consulting with dozens of organizations across various RND sizes. We refined the approach based on past feedback to ensure it delivers real value. Here’s why it works:

  1. Brevity increases response rates
    Developers are busy, and long surveys often go unanswered. After experimenting with multiple formats, we found that keeping the survey to just five focused questions at a time significantly improves participation rates. By eliminating unnecessary complexity, we gather more responses, leading to stronger data for analysis.
  2. Clarity ensures accurate data
    Your survey's questions should be carefully worded and tested to avoid ambiguity and unnecessary technical jargon, ensuring that respondents understand them and provide precise, actionable feedback. Also be sure to avoid leading questions. Your developers can’t answer questions accurately if they don’t understand what they’re being asked — or if they feel like you want them to respond a certain way.
  3. Actionability drives immediate improvements
    A good survey doesn’t just collect data — it provides clear next steps. Ask your developers to rank their challenge areas and identify the most problematic processes within them — this makes it easy to translate survey responses directly into a portal-building strategy. This means we don’t just gather insights; we act on them immediately to improve developer workflows.

Why do you need to survey your developers?

According to the 2025 State of Internal Developer Portals report, bottlenecks in production management and development process workflows are among the top reasons engineering teams experience delays. In fact, 78% of engineering teams wait a day or more for SRE and DevOps assistance, leading to unnecessary downtime and frustration. Similarly, inefficient work planning and complex deployment processes slow down feature delivery, making it harder for teams to iterate quickly.

A portal removes friction, automates repetitive tasks, and streamlines workflows. But you need to know what the most pressing issues are before you start trying to solve them with the portal.

This survey helps us answer one key question: What should we focus on solving first?

Teams sometimes attempt to identify developer pain points through informal discussions, direct feedback sessions, or ad-hoc complaints. While these methods provide some insight, they often capture only the most vocal perspectives and miss broader trends within the organization. Furthermore, as the old adage goes, you can only fix problems that you know exist — if teams aren’t aware of how their behavior contributes to a problem or haven’t figured out that their issue is not unique to them, they may not discuss these issues openly. 

By contrast, a structured survey approach ensures that you gather feedback from a broader audience, capturing both common and hidden pain points. This makes it easier to quantify results, track trends over time, and compare responses across different teams. 

Ultimately, structuring feedback early in the ideation phase helps you — and your portal team — to build a portal that addresses the actual challenges developers face, rather than those that you assume exist.

Example survey results

To illustrate the value of this survey, here’s a sample breakdown of responses from an actual engineering team:

This pie chart reflects how our example engineering team ranked their challenge spaces.
This pie chart shows how the team breaks down time spent managing four different types of production challenges.
  • Managing production emerged as the most challenging area, with 38.7% of respondents identifying it as their biggest pain point.
  • Within this category, root cause analysis was highlighted as the most significant challenge, with 51.6% of developers struggling to diagnose and resolve incidents efficiently.

These insights make it clear that improving root cause analysis should be a top priority for the portal build. We can clearly see that we need to focus on creating a better experience around incident management. 

At Port, we used Port to build a centralized hub where developers can quickly access all relevant information, such as service ownership details, links to monitoring dashboards, and other critical data. Additionally, we integrated self-service actions to empower developers to execute automated tasks directly from Port, rather than rely on DevOps to clear tickets. These include actions like triggering an incident, updating a status page incident, or creating a Slack channel with all relevant stakeholders — ensuring a faster and more coordinated incident response process.

This process helped us prioritize automation efforts and focus on creating solutions that will have the greatest impact on developer productivity.

Take your first step with our surveys

Before diving into building automation or improving developer self-service, we need to ensure we are solving the right problems. By grounding your internal developer portal in real developer feedback, you set the stage for meaningful adoption and long-term success. This survey serves as a guiding framework for:

  • Prioritizing the most painful workflows
  • Gathering developer buy-in early by solving problems they actually care about
  • Creating an IDP roadmap that delivers measurable impact from day one

If you're planning to build an IDP or improve your developer workflows, running a similar survey is a great way to validate your assumptions and drive meaningful change. The best platforms are built with developers, not just for them - and this survey ensures their voices are heard from the start.

{{survey}}

{{survey-buttons}}

Get your survey template today

By clicking this button, you agree to our Terms of Use and Privacy Policy
{{survey}}

Download your survey template today

By clicking this button, you agree to our Terms of Use and Privacy Policy
{{roadmap}}

Free Roadmap planner for Platform Engineering teams

  • Set Clear Goals for Your Portal

  • Define Features and Milestones

  • Stay Aligned and Keep Moving Forward

{{rfp}}

Free RFP template for Internal Developer Portal

Creating an RFP for an internal developer portal doesn’t have to be complex. Our template gives you a streamlined path to start strong and ensure you’re covering all the key details.

{{ai_jq}}

Leverage AI to generate optimized JQ commands

test them in real-time, and refine your approach instantly. This powerful tool lets you experiment, troubleshoot, and fine-tune your queries—taking your development workflow to the next level.

{{cta_1}}

Check out Port's pre-populated demo and see what it's all about.

Check live demo

No email required

{{cta_survey}}

Check out the 2025 State of Internal Developer Portals report

See the full report

No email required

{{cta_2}}

Contact sales for a technical product walkthrough

Let’s start
{{cta_3}}

Open a free Port account. No credit card required

Let’s start
{{cta_4}}

Watch Port live coding videos - setting up an internal developer portal & platform

{{cta_5}}

Check out Port's pre-populated demo and see what it's all about.

(no email required)

Let’s start
{{cta_6}}

Contact sales for a technical walkthrough of Port

Let’s start
{{cta_7}}

Open a free Port account. No credit card required

Let’s start
{{cta_8}}

Watch Port live coding videos - setting up an internal developer portal & platform

{{cta-demo}}
{{reading-box-backstage-vs-port}}
{{cta-backstage-docs-button}}

Example JSON block

{
  "foo": "bar"
}

Order Domain

{
  "properties": {},
  "relations": {},
  "title": "Orders",
  "identifier": "Orders"
}

Cart System

{
  "properties": {},
  "relations": {
    "domain": "Orders"
  },
  "identifier": "Cart",
  "title": "Cart"
}

Products System

{
  "properties": {},
  "relations": {
    "domain": "Orders"
  },
  "identifier": "Products",
  "title": "Products"
}

Cart Resource

{
  "properties": {
    "type": "postgress"
  },
  "relations": {},
  "icon": "GPU",
  "title": "Cart SQL database",
  "identifier": "cart-sql-sb"
}

Cart API

{
 "identifier": "CartAPI",
 "title": "Cart API",
 "blueprint": "API",
 "properties": {
   "type": "Open API"
 },
 "relations": {
   "provider": "CartService"
 },
 "icon": "Link"
}

Core Kafka Library

{
  "properties": {
    "type": "library"
  },
  "relations": {
    "system": "Cart"
  },
  "title": "Core Kafka Library",
  "identifier": "CoreKafkaLibrary"
}

Core Payment Library

{
  "properties": {
    "type": "library"
  },
  "relations": {
    "system": "Cart"
  },
  "title": "Core Payment Library",
  "identifier": "CorePaymentLibrary"
}

Cart Service JSON

{
 "identifier": "CartService",
 "title": "Cart Service",
 "blueprint": "Component",
 "properties": {
   "type": "service"
 },
 "relations": {
   "system": "Cart",
   "resources": [
     "cart-sql-sb"
   ],
   "consumesApi": [],
   "components": [
     "CorePaymentLibrary",
     "CoreKafkaLibrary"
   ]
 },
 "icon": "Cloud"
}

Products Service JSON

{
  "identifier": "ProductsService",
  "title": "Products Service",
  "blueprint": "Component",
  "properties": {
    "type": "service"
  },
  "relations": {
    "system": "Products",
    "consumesApi": [
      "CartAPI"
    ],
    "components": []
  }
}

Component Blueprint

{
 "identifier": "Component",
 "title": "Component",
 "icon": "Cloud",
 "schema": {
   "properties": {
     "type": {
       "enum": [
         "service",
         "library"
       ],
       "icon": "Docs",
       "type": "string",
       "enumColors": {
         "service": "blue",
         "library": "green"
       }
     }
   },
   "required": []
 },
 "mirrorProperties": {},
 "formulaProperties": {},
 "calculationProperties": {},
 "relations": {
   "system": {
     "target": "System",
     "required": false,
     "many": false
   },
   "resources": {
     "target": "Resource",
     "required": false,
     "many": true
   },
   "consumesApi": {
     "target": "API",
     "required": false,
     "many": true
   },
   "components": {
     "target": "Component",
     "required": false,
     "many": true
   },
   "providesApi": {
     "target": "API",
     "required": false,
     "many": false
   }
 }
}

Resource Blueprint

{
 “identifier”: “Resource”,
 “title”: “Resource”,
 “icon”: “DevopsTool”,
 “schema”: {
   “properties”: {
     “type”: {
       “enum”: [
         “postgress”,
         “kafka-topic”,
         “rabbit-queue”,
         “s3-bucket”
       ],
       “icon”: “Docs”,
       “type”: “string”
     }
   },
   “required”: []
 },
 “mirrorProperties”: {},
 “formulaProperties”: {},
 “calculationProperties”: {},
 “relations”: {}
}

API Blueprint

{
 "identifier": "API",
 "title": "API",
 "icon": "Link",
 "schema": {
   "properties": {
     "type": {
       "type": "string",
       "enum": [
         "Open API",
         "grpc"
       ]
     }
   },
   "required": []
 },
 "mirrorProperties": {},
 "formulaProperties": {},
 "calculationProperties": {},
 "relations": {
   "provider": {
     "target": "Component",
     "required": true,
     "many": false
   }
 }
}

Domain Blueprint

{
 "identifier": "Domain",
 "title": "Domain",
 "icon": "Server",
 "schema": {
   "properties": {},
   "required": []
 },
 "mirrorProperties": {},
 "formulaProperties": {},
 "calculationProperties": {},
 "relations": {}
}

System Blueprint

{
 "identifier": "System",
 "title": "System",
 "icon": "DevopsTool",
 "schema": {
   "properties": {},
   "required": []
 },
 "mirrorProperties": {},
 "formulaProperties": {},
 "calculationProperties": {},
 "relations": {
   "domain": {
     "target": "Domain",
     "required": true,
     "many": false
   }
 }
}
{{tabel-1}}

Microservices SDLC

  • Scaffold a new microservice

  • Deploy (canary or blue-green)

  • Feature flagging

  • Revert

  • Lock deployments

  • Add Secret

  • Force merge pull request (skip tests on crises)

  • Add environment variable to service

  • Add IaC to the service

  • Upgrade package version

Development environments

  • Spin up a developer environment for 5 days

  • ETL mock data to environment

  • Invite developer to the environment

  • Extend TTL by 3 days

Cloud resources

  • Provision a cloud resource

  • Modify a cloud resource

  • Get permissions to access cloud resource

SRE actions

  • Update pod count

  • Update auto-scaling group

  • Execute incident response runbook automation

Data Engineering

  • Add / Remove / Update Column to table

  • Run Airflow DAG

  • Duplicate table

Backoffice

  • Change customer configuration

  • Update customer software version

  • Upgrade - Downgrade plan tier

  • Create - Delete customer

Machine learning actions

  • Train model

  • Pre-process dataset

  • Deploy

  • A/B testing traffic route

  • Revert

  • Spin up remote Jupyter notebook

{{tabel-2}}

Engineering tools

  • Observability

  • Tasks management

  • CI/CD

  • On-Call management

  • Troubleshooting tools

  • DevSecOps

  • Runbooks

Infrastructure

  • Cloud Resources

  • K8S

  • Containers & Serverless

  • IaC

  • Databases

  • Environments

  • Regions

Software and more

  • Microservices

  • Docker Images

  • Docs

  • APIs

  • 3rd parties

  • Runbooks

  • Cron jobs

Starting with Port is simple, fast and free.

Let’s start