GitHub's own tooling migrates your code and stops.

Work items, Test Plans and history are "remaining assets." Honest Cheetah brings the backlog across, free, with the history that makes a forecast possible on day one.

Import a team project Need help migrating?

Bring your backlog to GitHub

Point Honest Cheetah at an Azure DevOps team project, paste a read-only token, and the work comes over: requirements become issues on a GitHub Projects board, tasks become sub-issues, and the completed work becomes history, so the metrics have a forecast on day one instead of a shrug. Free, for every organization.

One direction. Nothing is written back to Azure DevOps. Every step shows you what it's about to do before it does it, and nothing lands on GitHub until you click a button that says so.

The import's review step: each Azure DevOps state with its count mapped onto the board's statuses, toggles for tasks and history, and a panel with how many items will be imported and how long it will take
The review. Every state, its count, where it lands. Done is skipped unless you say otherwise. The write count and the minutes are on the page.

How it goes

  1. Connect. The organization URL and a personal access token with one scope, Work Items (Read). Add Analytics (Read) if you want the throughput and cycle time history to come too. The token stays in your browser tab and is sent with each request; the server keeps nothing, and closing the tab is the same as revoking it.
  2. Pick. A team project and a target board. Honest Cheetah reads the process and works out which work item types are the requirement and the task (Product Backlog Item, User Story, Requirement and Issue all resolve without asking). No board yet? The project factory makes one, named after the team project.
  3. Read. Requirements changed in the last twelve months, most recent first, up to 100; then the tasks linked to them; then the completed items for history. When reading ends, the token is forgotten.
  4. Review. Each state with its count, mapped onto your board's statuses. Change any of them, toggle tasks and history, and read the list of what won't come over.
  5. Preview. What will land, in backlog order: each requirement's body as GitHub will receive it, its tasks, and the footer that says which work item it came from.
  6. Load. Five and pause, so you can look at the board before committing to the rest. Or everything. GitHub has no undo, so the pause is the undo.
  7. Done. Counts, and links to the backlog and the metrics. Then revoke the token in Azure DevOps.
The Connect step: an organization URL, an empty personal access token field, and instructions for creating a read-only, week-lived token
One scope, seven days, held in the tab.
The Pick step: a team project with its work item types and states resolved, and a target Honest Cheetah project selected
The process, read for you.
Reading the team project: 105 requirements changed in the last twelve months, the 100 most recent being read
105 changed in twelve months; 100 come; 5 don't, and it says so.
The What will not come over panel listing requirements beyond the limit, assignees, and iteration assignments with counts
What stays behind, with counts, on the same page as the button.
The preview with one requirement expanded: its description and acceptance criteria as GitHub Markdown and the origin footer linking back to the Azure DevOps work item
The preview is built by the same code the load uses. The footer stays on the issue in GitHub.
The load paused after the first five requirements landed, with buttons to load five more, load the rest, change the mapping, or discard
Five, then look.
The completion summary: items landed, items skipped by the mapping, and completed items stated as imported history
What landed, what was skipped on purpose, how much history came.

After the import

It's a board. The backlog is in Azure DevOps' stack-rank order with the statuses you mapped, every task under its requirement, and the metrics already know how fast the team has been going.

The imported backlog in Azure DevOps order with Ready and Proposed statuses and a Tasks column with closed-of-total rollups
An imported requirement in Honest Cheetah with the origin footer at the end of its description
The origin, at the bottom of the story.
The Metrics tab with a badge saying it includes imported history
History from Azure DevOps, labelled as imported wherever it appears. Nothing is counted twice.

What comes over, and what doesn't

Comes over, free
  • Requirements changed in the last 12 months, the 100 most recent, in backlog order, with description and acceptance criteria as Markdown
  • Every task under an imported requirement, with status and remaining work
  • Completed requirements as throughput and cycle time history, from Azure DevOps Analytics
  • A footer on every issue naming the work item it came from, with a link
Comes over on a paid plan
  • Test cases linked to those requirements, with steps and tags; shared steps inlined where they're used; parameterized cases as one case per data row, up to ten. They land in Honest Cheetah's test management, on the story they verify.
Stays behind
  • Attachments and inline images (counted; GitHub issues have no attachment API)
  • Bugs, epics and features (counted, not imported)
  • Assignees and iteration assignments (plan from the board afterward)
  • Commit links, comments and work item history
  • Closed test cases, and requirements in Done or Removed, unless you opt Done back in
  • Azure DevOps Server; this is for dev.azure.com

Need more than one team project's worth, more than a year of history, the attachments, or a Server install? That's a migration, and it's what I do.

Sign in with GitHub and import

Staying on Azure DevOps?

You don't have to move anything to get the forecasting. The free Honest Cheetah extension for Azure DevOps gives you throughput, cycle time and Monte Carlo forecasts right under Boards.

Need help with the migration itself?

Moving the code is the easy part. Work items at scale, Test Plans, classic releases, deployment groups, TFVC, and the branching model nobody remembers choosing are where migrations stall. I've been doing TFS and Azure DevOps work since 2005, and the import's limits are exactly where my consulting starts.

Moving to GitHub

The GitHub Readiness Assessment: fixed price, two weeks, remote. A written read on what your migration actually involves (repos, work items, Test Plans, pipelines, release governance) and a sequenced plan.

TFVC to Git

Planned, converted and cut over, whether you're landing on Azure Repos or GitHub. The tool migrates your code. It doesn't migrate your thinking.

Book a free 30-minute call

Already on GitHub?

Honest Cheetah is free for every GitHub organization: forecasting, metrics, backlog and iterations, with nothing to install. Test management, the part GitHub doesn't have, is on the paid plan.