That is because they cannot fill the other 10-15 positions, a combination of it being Canada and Canadians being prone to whine over:
Your position on this is somewhat odd. These markers are all strong indications of a workplace that has caused its own lack of staff availability, but you somehow represent it as if it were a "cultural whinging" based on your locality. Which, to me, is weird, because you seem to be, at the same time, blaming the work culture in your country (thus blaming the employees' mindset), while at the same time using it as a justification for why you don't want to work there either.
- Change to the new market where developers can work remotely
Specific example aside, any workplace that refuses to follow the market and modern standards is inherently making itself outdated, and (unsurprisingly) people are generally not attracted to outdated concepts, especially when the outdated nature comes at the cost of the applicant themselves (remote work => work/life balance).
You're not going to catch flies with vinegar.
- Low retention due to bad/no promotion/raise processes
- Firing people for projects going over budget (which one of them didn’t even know there was a project budget)
These are both red flags in terms of how the company treats it staff. They are not being valued (by a stifled promotion process), and they are even made the scapegoat for project failures, which the company should be managing.
Your company treats its staff as discardable and replaceable, and it's no wonder that there's no new application ready to sacrifice themselves to be treated this way.
Certain lack of career valuation while employed, yet uncertain future employment. More vinegar to add to the pile.
- Wanting to hire seniors first but being unable to do so.
This is just an example of the flies not coming to the vinegar pot.
Companies with employee valuation like yours tend to float on the wide availability of juniors who lack enough of a standard to object to how this workplace operates, but seniors are much too experienced to accept this. Not only will they have statistically have worked at places with much employee-friendlier environments, they tend to also be well aware that senior development positions are much more of a buyer's market than junior positions, which enhances their ability to both pick the employer of their choosing and demand better compensation.
The reason why I mentioned and provided feedback to the above points is to point out an underlying trend with your company (among many others) whereby they forget that employees work for their own benefit, not that of the company.
Given that you seem to mostly be on the company's side on the mentioned bullet points (given that you blame the local employee mindset), I suspect you too have forgotten this.
You don't quit a job because it benefits the company. You quit a job because it benefits YOU to do so.
That is not to say that you can't find a happy medium when it is possible. For example, you could offer an extended notice period to give the company ample time to replace you.
However, cutting into your own flesh over this is not good for you.
There will be nobody who can write code here if we depart and we are nominally the technology consulting department.
How does one resign under these circumstances? Us leaving is going to basically shut down project work until they can hire new people.
The company dug its own grave. It is not your responsibility to keep them from falling into it. You need to make decisions for your own good, and the company should face the consequences from the choices it made.
The company chose to not adapt to modern expectations. They chose to stifle employee growth within the company. They chose to punish employees over project failures. They chose to create the kind of workplace where no one wants to come work, and which you now want to leave.
Look at it this way: even you, who clearly are willing to consider cutting into your own flesh for the company's benefit, wants to leave them. That is a significant red flag on just how badly your company has been run.
You are not in a position to manage the company. You cannot steer the ship away from the iceberg. The only choice you have is whether you jump ship or not. And it seems you have already decided to jump ship, which I would personally also have advised, given the workplace culture as you describe it.
Furthermore, given the company's track record of blaming the employees for its own project failures, what makes you think that even if you did everything right, that the company wouldn't turn around and blame you for abandoning them anyway?