Prompt
How do I build a portal that engineers will actually use for docs, runbooks, ownership, and self-service actions?
Latest observation
To build a portal engineers will actually use, treat it less like a “documentation site” and more like the front door for getting work done.
The winning formula is:
- Meet engineers where they are
- Solve a few painful workflows end-to-end
- Keep content trustworthy and current
- Make ownership and actions obvious
- Integrate into existing tools, not replace them
Here’s a practical blueprint.
1. Start with user jobs, not features
Engineers usually want to do one of these quickly:
- Find the right doc or runbook
- Figure out who owns a service
- Diagnose an incident
- Perform a safe self-service action
- Understand service dependencies and status
- Avoid asking Slack for basic info
If your portal doesn’t make those faster than Slack + search + tribal knowledge, it won’t get used.
Ask:
- What do engineers search for every week?
- What do they interrupt others to ask?
- What actions are safe to expose self-service?
- What information is most often stale or missing?
2. Make the homepage action-oriented
A good portal homepage should not be a “news page.”
It should answer:
- What service am I looking at?
- Who owns it?
- What should I do if it’s broken?
- What actions can I take?
- Where is the canonical doc?
Useful homepage components:
- Global search
- Recent or pinned services
- My team’s services
- Incident shortcuts
- Self-service actions
- System health/status
- “Missing ownership” or “stale docs” signals for maintainers
If users land on the portal and still have to ask, “Now what?”, you’ve lost them.
3. Build around a service catalog as the source of truth
The service catalog should be the backbone of the portal.
Each service should have:
- Name
- Description
- Owners / on-call / escalation path
- Repo(s)
- Runtime environment(s)
- Dependencies
- Docs link
- Runbook link
- Dashboards
- Alerts
- SLOs / error budgets
- Deployment info
- Supported self-service actions
Why this matters
If ownership and metadata live in random wikis, tickets, repos, and spreadsheets, the portal becomes stale fast.
Use one authoritative system for service metadata, then sync it outward.
4. Solve docs, runbooks, and ownership together
These three should be tightly connected:
- Docs explain what the service is and how it works
- Runbooks explain what to do when something is wrong
- Ownership explains who is responsible
Every service page should prominently include:
- “What is this?”
- “How do I operate it?”
- “Who owns it?”
- “What actions can I take?”
Good pattern
Service page layout:
- Overview
- Ownership
- Health / status
- Dashboards and alerts
- Runbooks
- Dependencies
- Deployments / releases
- Self-service actions
- Related docs
5. Make runbooks actually usable in incidents
Runbooks fail when they’re:
- buried in Confluence
- too long
- out of date
- written for experts only
Effective runbooks:
- Are tied to specific alerts or symptoms
- Start with “What does this mean?”
- Include decision trees
- Have copy-paste commands
- Include expected outputs
- State when to escalate
- Link to dashboards and logs
- Are owned and reviewed regularly
Best practice
Attach runbooks directly to:
- alerts
- services
- common incident types
So when an alert fires, the engineer can click straight into the relevant procedure.
6. Self-service must be safe, bounded, and auditable
Engineers will use self-service if it:
- saves time
- is low-risk
- has guardrails
- gives clear feedback
Good self-service actions:
- Restart a job
- Scale a service within safe bounds
- Rotate a credential
- Requeue a task
- Toggle a feature flag
- Trigger a backfill
- Clear a cache
- Rebuild an index
- Open a standard access request
Guardrails:
- Role-based access control
- Approval for risky actions
- Validation before execution
- Dry-run / preview mode
- Audit log
- Confirmation with impact summary
- Rollback path
UX tip
Don’t hide actions behind jargon like “orchestrated remediation workflow.”
Call them what engineers actually want to do.
7. Optimize for search and deep links
Most usage will start with a search bar.
Search should find:
- services
- docs
- runbooks
- owners
- alerts
- dashboards
- actions
Search needs:
- typo tolerance
- synonyms
- ranking by relevance and recency
- filtering by team, system, environment, and doc type
- result previews
- stable deep links
Also make every important object linkable:
- service pages
- runbooks
- actions
- ownership records
- incidents
If people can’t share links in Slack, adoption drops.
8. Integrate with existing workflow tools
Your portal should complement the engineer’s current tools:
- Slack / Teams
- GitHub / GitLab
- PagerDuty / Opsgenie
- Jira / Linear / ServiceNow
- Datadog / Grafana / New Relic
- Kubernetes / cloud consoles
- CI/CD systems
- Identity provider
High-value integrations:
- Search from Slack
- Create incident from alert
- Open runbook from alert
- Trigger action from service page
- Sync ownership from repo or CODEOWNERS
- Pull docs from Markdown in Git
- Show deployment status
If the portal becomes a separate destination that duplicates everything, usage will suffer.
9. Keep content in Git whenever possible
Engineers trust versioned, reviewable content.
A strong pattern is:
- Docs/runbooks in Markdown in Git
- Service metadata in YAML/JSON in Git or a catalog backend
- Portal renders and indexes the content
- PR review controls changes
- Automation checks links, owners, freshness, and schema
Benefits:
- version history
- reviewability
- code ownership
- automation
- CI validation
- lower stale-content risk
If you need a UI for some edits, make Git the source of truth behind it.
10. Add freshness and quality controls
A portal dies when trust dies.
Add automated checks for:
- broken links
- missing owner
- missing runbook
- missing on-call
- stale docs
- services without dashboards
- alerts without runbooks
- actions without permissions
- duplicate ownership
Show these signals visibly:
- “Last reviewed 47 days ago”
- “Owner missing”
- “Runbook not found”
- “Docs out of date”
- “This action requires approval”
This helps maintainers fix issues and builds trust with users.
11. Design for three core personas
A. Consumer engineer
Wants quick answers:
- What is this service?
- Who owns it?
- Where is the runbook?
B. On-call engineer
Wants fast incident resolution:
- What does the alert mean?
- What commands should I run?
- Who can I escalate to?
- What action can I safely take?
C. Service owner
Wants to maintain the service:
- Keep ownership current
- Keep docs/runbooks fresh
- Track alerts and SLOs
- Expose safe actions
- Reduce interruptions
If you only design for one persona, the portal will feel incomplete.
12. Roll out in phases
Don’t try to launch “the platform” all at once.
Phase 1: Inventory and source of truth
- Service catalog
- Ownership
- Runbooks
- Doc indexing
- Search
Phase 2: Incident workflow
- Alert-to-runbook links
- Dashboards
- Escalation paths
- On-call info
Phase 3: Self-service actions
- A few high-value safe actions
- RBAC and audit logs
- Approval workflows if needed
Phase 4: Quality automation
- Staleness checks
- Missing metadata checks
- Ownership validation
- SLA/SLO visibility
Phase 5: Personalization
- My services
- My team
- Recent incidents
- Favorites
- Recommended docs
13. Measure adoption by behavior, not page views
Track whether the portal reduces friction.
Useful metrics:
- Search success rate
- Time to find ownership
- Time to open relevant runbook
- Percentage of incidents with runbook usage
- Self-service action completion rate
- Reduction in Slack “who owns this?” questions
- Doc freshness compliance
- Missing ownership rate
- Return usage by on-call engineers
If people visit but still ask in Slack, the portal is not working.
14. Avoid common failure modes
Don’t:
- build a pretty wiki front-end with no source of truth
- require too many clicks for common tasks
- make content owners manually maintain everything
- expose too many weakly governed actions
- bury ownership in a separate tab
- launch with dozens of half-finished integrations
- assume engineers will curate content for you
Do:
- pick a narrow set of high-value use cases
- automate metadata ingestion
- make stale data obvious
- embed into incident response
- keep the UI fast and simple
- own the content governance model
15. A good MVP
If you want the smallest useful version, build this:
MVP features
- Global search
- Service catalog pages
- Ownership and escalation info
- Docs and runbook rendering from Git
- Links to dashboards and alerts
- 3–5 safe self-service actions
- Staleness checks
- Slack deep links
MVP success criteria
- Engineers can find the owner of any service in under 10 seconds
- On-call can reach the relevant runbook from an alert in one click
- At least one common manual task is replaced by self-service
- Teams start linking the portal in Slack and incident docs without being told
16. Recommended architecture
A common architecture looks like this:
- Metadata store/catalog for services, owners, dependencies, actions
- Doc store in Git for markdown files
- Indexer/search engine for docs and catalog entries
- Policy layer for RBAC and approvals
- Execution layer for self-service actions
- UI portal with service pages and search
- Automation jobs for sync and freshness checks
This keeps the system maintainable and trustworthy.
17. The guiding principle
The portal should answer one question really well:
“What do I need to know, and what can I safely do, right now?”
If it does that better than Slack, wikis, and tribal memory, engineers will use it.
If you want, I can also help with one of these next:
- a concrete MVP feature list,
- an information architecture / navigation design,
- a reference data model for services/runbooks/owners, or
- a build-vs-buy comparison for portal tooling.