It’s not always possible, but it’s worth striving for. This applies to all team members, in-house or outsourced (on long-term projects). If a job vacancy comes up and you have one or more qualified developers on your team apply to fill it, you need a really, really good reason to not promote from within. That’s not being sentimental (well, a little), but they already know you, your company, team, and project. It’s typical for developers to change jobs every two years, which has a turnover and disruption cost that you can avoid.
If developers see it’s overly difficult to advance in your company, they probably will look for another job. A company that makes a show of promoting from within encourages retention with all developers. To make a show of this means taking steps, in advance, to help prepare them for promotion – via mentoring, skill development, and continuing education programs. A side benefit of the long-term process is that you’ll need to search for fewer senior and more junior developers (easier to find). If the developer is missing a skill, sometimes companies will provide an interim promotion but hold the wage increase until they obtain certification.
If you’re outsourcing, much the same thing applies. You can arrange with the IT staffing agency to promote, for example, a developer to a senior developer role and/or directly hire them onto your in-house development team.
It’s important to note that though someone may be qualified for a job, they might not necessarily want it. This can be the case with devs or engineers looking at a vacancy for software engineering manager. Taking the managerial path likely means a lot less, possibly no, coding and much more human interaction.