At many companies in which I've worked in the past, I did the same job for years. I rarely changed positions, which was fine for me as a database developer or administrator. I might move up slightly in terms of level (junior-mid-senior), and I did get raises, but I did the same job. Even through reorganizations, I mostly did the same job.
In many larger companies, it seems that reorganizing departments and people is something people do regularly. I've seen friends at Microsoft change departments, products, etc. every year or two. I have friends in other organizations where they might change slightly more or less often, but they still move around.
At Redgate, we've always done something interesting with the development staff. We allow them to reteam at the start of every year. They can list the teams with which they want to work, ranking a few choices, and then the development leadership works to match people into the teams. Overall, across the last few years, the vast majority of developers think the process works well. I'm sometimes not thrilled when someone leaves a team where I think they are making a large impact, but I am glad that people get to have some input into what work they do.
Our head of product delivery wrote about the process this year, talking about how it works, the corporate goals, and the challenges of doing this remotely. It's an interesting read, and I think this is something that can help other managers of software teams think about how they might build better teams, with developers that grow and learn, producing higher quality software over time as they grow their skills and take an active role in their own careers.