~/oleksandr-ponomarov

Portfolio · Notes · Dotfiles

Search everything

Search case studies, engineering notes, and Dotfiles documentation.

    ← all case studies

    Case study 06

    Teams that create themselves

    One self-service pull request provisions the team, communication, on-call, catalog, and alerting resources together.

    developer experiencedelivery

    The situation

    Setting up a new engineering team was a pile of tickets: a GitHub team here, a Slack channel there, on-call rotation, service catalog entry, alert routing — each owned by a different admin, each done slightly differently.

    What I did

    I made “team” a piece of infrastructure. A developer creates one folder with one small JSON file describing their team; automation generates everything else: the GitHub team (synced to our identity provider), the Slack channels, the on-call schedule, the service-catalog entry — and, crucially, the team’s alert channels, with the alerting system already invited. Monitoring alerts for a team’s services land in that team’s channel from day one, with no platform-team involvement.

    team.json
    {
    "team_name_readable": "Team Full Example",
    "portfolio": "Global Developer Enablement",
    "github": {
    "teams": [
    { "type": "default", "description": "example description" },
    { "type": "frontend", "description": "example description" }
    ]
    },
    "slack": {
    "channel": "team-example-very-awesome-channel",
    "topic": "Something insightful describing the purpose/usage of the channel"
    },
    "alerts": {
    "create_am_config": true,
    "create_slack_channels": true
    },
    "firehydrant": {
    "team_oncall_enabled": true,
    "schedules": [
    { "timezone": "Europe/Copenhagen", "daily_start_time": "09:00:00", "daily_end_time": "15:00:00" },
    { "timezone": "America/Toronto", "daily_start_time": "10:00:00", "daily_end_time": "16:00:00" }
    ]
    }
    }

    The interesting part

    Engineers outside the platform team now add their own teams through the same pull request workflow, without waiting for an administrator to assemble the resources by hand.

    What it changed

    Team setup went from a multi-ticket, multi-day chore to a self-service pull request, with one directory acting as the reviewed definition for every connected system.