A roadmap planner for developer portals - a handy tool for platform engineers

May 7, 2024

A roadmap planner for developer portals - a handy tool for platform engineers

Ready to start?

Intro

Today we are introducing the portal roadmap planner.

Scoping the first use cases for your IDP is pretty straightforward. Typically, the MVP covers the most painful use cases that are easily identifiable. For example, lately, we're seeing that IaC and service catalog are common use cases that are implemented first in a portal. What happens after that? 

A well-designed portal will be built with the end-user in mind, so you should adopt a product mindset and build your roadmap thoughtfully. Keep in mind that internal developer portals should provide a product-like experience for developers - simple, abstracting complexity, giving developers what they need and providing context, guardrails and the right information.

Easier said than done?

The tricky part of a “product like experience” is also about defining which features we need in the portal, thinking of the user stories and prioritizing. The rest will be taken care of in the portal platform.

Portal-as-product

We’ve been advocating the portal-as-product approach for sometime, living alongside the platform as product approach. The core of our approach is that the portal provides a product experience for developers. It’s really jobs-to-be-done for developers inside an internal developer portal. As such, it requires user stories, priorities and, eventually, a roadmap.

Defining and prioritizing features for the portal

Prioritizing product features requires a deep understanding of developer needs and what they are trying to accomplish. User stories are a great way to capture these needs in a structured format, each story emphasizing a specific task that the user wants to achieve through the portal. 

This method keeps us honest: putting the developer's perspective at the forefront of the portal definition. Over time, as these stories accumulate, they provide a rich, user-centered narrative. After all, we’re here to make developer lives better. 

Over time, this approach helps in creating a portal that remains relevant and valuable to its users, encouraging ongoing engagement and satisfaction.

How Port’s roadmap planner works

The roadmap planner lets you build your portal roadmap by identifying and prioritizing user stories, using the portal-as-product approach. Our goal was to provide a handy tool developers can use to create a roadmap and share it with stakeholders.

How does it work?

1. Define user stories and the current state of affairs

You need to define three things:

  • The persona - who is the user
  • What they would like to do in the portal a.k.a jobs to be done
  • How are they doing these “job to be done” today

Here’s what it looks like in the planner:

A Roadmap Planner for Developer Portals
Click to enlarge image

Looking for user story ideas? No problem at all, the road map planner has many ideas that can help ignite a conversation about what needs to be accomplished in the portal.

Click to enlarge image

2. Prioritize portal user stories

Prioritization is important - and the tool creates a basic prioritization based on answers to four questions:

  • The % of developers that will be using the feature
  • How often the feature will be used
  • How essential is the feature; and
  • How long it will take to implement the feature

This creates a score for each user story.

Click to enlarge image

3. Create a roadmap

As you go through the tool and add user stories, a handy roadmap is created and you can download it to share with stakeholders.

Here’s a roadmap I created:

The portal roadmap - next steps

This tool works for all portals - you don’t have to use Port to get value from it. 

Most importantly, it acts as a source of ideas of what you can do with a portal, please send us additional ideas if you have any.

In the future, you can also consider exposing the tool to your developer users, to help them communicate about missing portal features and how important they are for them.

Try the portal roadmap planner today!

{{cta_1}}

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

Check live demo

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

Let’s start
{{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 product walkthrough

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

Let’s start
{{cta-demo}}
{{reading-box-backstage-vs-port}}

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