{"id":4271,"date":"2025-05-14T15:04:17","date_gmt":"2025-05-14T15:04:17","guid":{"rendered":"https:\/\/www.aviator.co\/blog\/?p=4271"},"modified":"2025-09-23T13:02:05","modified_gmt":"2025-09-23T13:02:05","slug":"internal-developer-portals-internal-developer-hubs","status":"publish","type":"post","link":"https:\/\/www.aviator.co\/blog\/internal-developer-portals-internal-developer-hubs\/","title":{"rendered":"Internal Developer Portals Should Be Internal Developer Hubs"},"content":{"rendered":"<figure class=\"wp-block-post-featured-image\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"569\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/04\/internal-developer-portal.png\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" style=\"object-fit:cover;\" srcset=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/04\/internal-developer-portal.png 1024w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/04\/internal-developer-portal-300x167.png 300w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/04\/internal-developer-portal-768x427.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p>Internal Developer Portals (IDPs) are being&nbsp;sold as <strong>the go-to solution&nbsp;for engineering teams<\/strong>, a one-stop shop for service catalogs, ownership tracking, and team performance scorecards. But let\u2019s face it: the current crop of IDPs is <strong>not built for today\u2019s developers<\/strong>.<\/p>\n\n\n\n<p>If we strip away the marketing hype, many of these tools function more like portals \u2014 a window into&nbsp;service ownership and status \u2014 than actual developer platforms. It\u2019s time to rethink IDPs not as \u201cportals\u201d but as \u201chubs\u201d that actively route information and workflows, <strong>reducing developers\u2019 toil rather than creating another layer of friction.<\/strong><\/p>\n\n\n\n<p>IDPs are portals that display service information to developers, but that\u2019s where the utility often ends. Focusing on service catalogs, ownership, and health checks might benefit platform teams, but this feels like an overhead with minimal value for developers. Developers would review this information if investigating an outage, but they often meet feature deadlines and debug product issues.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Portals Fall Short<\/h2>\n\n\n\n<p>By their nature, portals are passive. <strong>They allow&nbsp;developers to see what\u2019s happening&nbsp;but don\u2019t let them take meaningful action<\/strong>. If your IDP is just another place to look at dashboards, check service ownership, and perform administrative work, it\u2019s doing little to improve productivity. It may be doing more harm by introducing additional cognitive load, <strong>yet another dashboard in an ever-growing landscape of tools for developers.<\/strong><\/p>\n\n\n\n<p>Worse, most of these tools come with a producer-consumer problem:&nbsp;platform teams rely on developers&nbsp;to keep service information up to date, but developers don\u2019t directly benefit from maintaining it. It\u2019s a two-sided network of sorts, but with an imbalance that leads to stale data, creating what we often call <strong>Zombie Tools \u2014 systems that exist but are underutilized or ignored by the very people they\u2019re meant to serve<\/strong><\/p>\n\n\n\n<p>Rather than considering IDPs as portals, we should conceptualize them as *hubs*. A hub is more than a window to view data \u2014 it\u2019s a dynamic system where workflows are centralized and actions are triggered. <strong>Developers need tools that not only give them visibility but also let them act<\/strong> \u2014 whether that\u2019s triggering a deployment, performing a <a href=\"https:\/\/www.aviator.co\/flexreview\" target=\"_blank\" rel=\"noopener\" title=\"\">code review,<\/a> or tracking down the origin of a failing test.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The IPP (Internal Platform Portal) Dilemma<\/h2>\n\n\n\n<p>Another common pitfall is mistaking IDPs for true developer portals when, in reality, they are <strong>Internal Platform Portals (IPPs).<\/strong> These tools often<strong> serve platform teams rather than developers<\/strong>, emphasizing service management, health checks, and performance scorecards. They are often presented as benchmarks, with no feedback mechanism to help teams improve.<\/p>\n\n\n\n<p>IDPs promise to empower developers, but they often end up as tools that platform teams love and developers tolerate \u2014 if they use them. The solution? <strong>Build IDPs that put developer workflows at the center.<\/strong> If developers can\u2019t find day-to-day value, like tracking tickets, reviewing pull requests, or pushing feature flags, the portal is another layer of complexity.<\/p>\n\n\n\n<p>A hot trend in IDPs is the integration of scorecards, frameworks that track service health and readiness. While useful for high-level insights, this begs the question: <strong>Are we just reinventing developer productivity tracking software under a new guise?<\/strong><\/p>\n\n\n\n<p>While platform teams might see value in these tools, engineering leaders must be careful not to over-index on scorecards as metrics for developer performance. Scorecards should empower teams by providing clear, actionable insights, such as where processes are bogged down, and not become a hidden monitoring tool.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How To Turn IDPs Into Developer Hubs<\/h2>\n\n\n\n<p>The biggest flaw of today\u2019s IDPs is that they often feel like solutions searching for a problem. To be truly valuable, they must focus on what matters most to developers \u2014 reducing friction in their daily work.<\/p>\n\n\n\n<p>A \u201chub\u201d&nbsp;approach would mean integrating tools that developers&nbsp;care about:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Code reviews<\/strong>: Simplify the process of reviewing and merging pull requests. Build better standards with&nbsp;<a href=\"https:\/\/docs.aviator.co\/flexreview\/concepts\/slo-management\" target=\"_blank\" rel=\"noopener\" title=\"\">code review SLOs<\/a>, break down changes into smaller diffs, and track&nbsp;<a href=\"https:\/\/docs.aviator.co\/attentionset\" target=\"_blank\" rel=\"noopener\" title=\"\">actionable code reviews<\/a>.<\/li>\n\n\n\n<li><strong>Work tracking systems<\/strong>: Provide visibility and quick access to tasks and blockers, e.g., via JIRA tickets.<\/li>\n\n\n\n<li><strong>Test pipelines<\/strong>: Offer direct access to real-time test results, help identify flaky tests, etc.<\/li>\n\n\n\n<li><strong>Deployment management<\/strong>: This allows developers to&nbsp;<a href=\"https:\/\/docs.aviator.co\/releases-beta\" target=\"_blank\" rel=\"noopener\" title=\"\">take control of deployments<\/a>, track which deployments their changes are in, and manage feature flag states.<\/li>\n\n\n\n<li><strong>Tracking code health<\/strong>: Actionable steps to track and reduce tech debt and&nbsp;improve code health for the engineering teams.<\/li>\n<\/ul>\n\n\n\n<p>This shifts the focus from passively observing service states to actively improving developer workflows. If the tools developers use daily aren\u2019t at the heart of your IDP, then it\u2019s time to rethink the design.<\/p>\n\n\n\n<p><em>This article is co-authored by Adam Berry and was originally posted on&nbsp;<a href=\"https:\/\/thenewstack.io\/internal-developer-portals-should-be-internal-developer-hubs\/\" target=\"_blank\" rel=\"noopener\" title=\"\">The New Stack<\/a>.<\/em><\/p>\n\n\n\n<p>Interested in improving developer experience?<br>Join The Hangar DX, a curated community for developer experience<strong> (DX) enthusiasts!<\/strong><\/p>\n\n\n\n<!-- Hardcoded CTA for Hangar DX -->\n<div style=\"position: relative; display: flex; align-items: center; background: #FFD966; padding: 20px 30px; border-radius: 10px; margin: 40px 0; justify-content: space-between; flex-wrap: wrap; overflow: hidden; max-width: 860px; box-shadow: 0px 4px 10px rgba(0,0,0,0.1);\">\n    <div style=\"flex: 1; z-index: 2; max-width: 500px;\">\n        <h2 style=\"margin: 0; color: #0C344B; font-size: 20px; font-weight: 600;\">Join The Hangar DX<\/h2>\n        <p style=\"color: #333; font-size: 13px; margin-bottom: 15px;\">A vetted community of developer-experience (DX) enthusiasts.<\/p>\n        <form id=\"hubspot-form\" action=\"https:\/\/forms.hubspot.com\/uploads\/form\/v2\/40144919\/d19cd783-21ad-4c7a-b188-1626fcf45ac1\" method=\"POST\" style=\"display: flex; gap: 6px; align-items: center; max-width: 400px;\">\n            <input type=\"hidden\" name=\"hs_context\" value='{\"hutk\": \"{{contact.hs_context}}\"}'>\n            <input type=\"email\" name=\"email\" placeholder=\"Email\" required style=\"padding: 8px; border: 1px solid #ccc; border-radius: 5px; width: 130px; font-size: 13px; background: white;\">\n            <input type=\"text\" name=\"company\" placeholder=\"Company\" required style=\"padding: 8px; border: 1px solid #ccc; border-radius: 5px; width: 130px; font-size: 13px; background: white;\">\n            <button type=\"submit\" id=\"submit-btn\" style=\"background: #5A87F0; color: white; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; font-size: 13px; font-weight: 600; display: flex; align-items: center; justify-content: center; min-width: 130px;\">Request access<\/button>\n        <\/form>\n        <p id=\"success-message\" style=\"display: none; color: #0C344B; font-size: 14px; font-weight: 400; margin-top: 10px;\">Thank you! We&#8217;ll be in touch.<\/p>\n    <\/div>\n    <div style=\"position: absolute; top: 0; right: 0; width: 100%; height: 100%; background: linear-gradient(to bottom left, white 15%, #FFD966 45%); z-index: 1; pointer-events: none; clip-path: polygon(60% 0%, 100% 0%, 100% 100%, 70% 100%);\"><\/div>\n    <div style=\"max-width: 220px; z-index: 2; position: absolute; right: 10px; bottom: -25px;\">\n        <img decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/2025\/03\/aviator-hangar-dx-plane-logo-illustration-clear-min.png\" alt=\"Aviator Hangar DX Plane Illustration Logo\" style=\"max-width: 100%; height: auto; transform: scale(1.05);\">\n    <\/div>\n<\/div>\n\n<script>\n  document.getElementById(\"hubspot-form\").addEventListener(\"submit\", function(event) {\n    event.preventDefault(); \/\/ Prevent default submission behavior\n    \n    var form = this;\n    var formData = new FormData(form);\n    \n    fetch(form.action, {\n      method: \"POST\",\n      body: formData,\n      headers: {\n        \"Accept\": \"application\/json\"\n      }\n    }).then(response => {\n      if (response.ok) {\n        document.getElementById(\"submit-btn\").style.display = \"none\";\n        document.getElementById(\"success-message\").style.display = \"block\";\n      }\n    }).catch(error => console.error(\"Error:\", error));\n  });\n<\/script>\n\n\n\n<p>The Hangar DX is a <strong>community of senior DevOps and senior software engineers focused on developer experience.<\/strong> This is a space where vetted, experienced professionals can exchange ideas, share hard-earned wisdom, troubleshoot issues, and ultimately help each other in their projects and careers.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Many IDPs function as passive portals, adding complexity without real developer benefit.<\/p>\n","protected":false},"author":18,"featured_media":4272,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[285],"tags":[269,111,270],"class_list":["post-4271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-platform-engineering"],"blocksy_meta":[],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/04\/internal-developer-portal.png","post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/4271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/comments?post=4271"}],"version-history":[{"count":4,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/4271\/revisions"}],"predecessor-version":[{"id":4364,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/4271\/revisions\/4364"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/media\/4272"}],"wp:attachment":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/media?parent=4271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/categories?post=4271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/tags?post=4271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}