All through December we watched as the Russian army ferried more and more troops to their western border, the movements captured by local cell phones and dash cams with careless abandon.
As the number of arriving wagons grew so too did the likelihood of war. Still, I remained confident in my earlier analysis that war was not likely to happen. In late December the betting markets put a Russian invasion probability at 40% and I felt that a pretty fair estimate.
The volume and nature of the build-up over the following weeks, as tracked by expert watchers such as Mike Lee, changed all that. Equipment lined new and ever-growing staging grounds. Field hospitals were set up. Things then took about as grave a turn as they could when the assembly areas themselves began emptying—not for the troops to return home, but rather to take up jumping-off positions in the field.
At this point I put the probability of war at north of 90%. Even so, the rational part of my brain had an incredibly hard time processing what was becoming more and more apparent. The cost of war was going to be prohibitive, I reasoned. What on earth could Russia gain from all of this? War would be the choice of only a madman or a fool.
In the end, none of that mattered. Politics is not always rational—or at least ordered in a ranking of costs and benefits that are readily apparent to me. I had to go into work that night and so watched with a heavy heart the video on my desktop as the war began.
Last spring I modelled what a potential invasion could look like. With the Russians having this time sent even more troops to the Ukrainian front and, by essentially annexing a stunningly compliant Belarus, moved attack formations even closer to the capital, I figure it’s worth a revisit at the model, its assumptions, and conclusions.
(Note that a fuller description of the model is available here)
Order of Battle
Using a collection of open-source troop deployment collections I landed on an estimate of 144 Russian and 105 battalions:
I convert the following battalion count into practical values by relying on the following assumptions:
Note that Russian Battalion Tactical Groups (BTGs) will be, at least in theory, a bit bigger than their Ukrainian counterparts, since so much of recent Russian military doctrine recommends stuffing as many capabilities into the battalion level as possible. But at this stage there is no harm in keeping the assumption uniform.
With these values we can create an armoured division equivalents count, the unit necessary for the model to make like comparisons:
The model results in total troop counts of 207k Russian troops (including Donetsk and Luhansk irregulars) and 160k Ukrainian. These numbers match most publicly available intelligence figures, so are a pretty reasonable conclusion.
On the armoured vehicle side the Ukrainian army ends up with a substantially higher inferred tank value. This value probably reflects the sheer number of Ukrainian tank *units*, rather than the total number of tanks they can deploy. Certainly their tanks are older and in poorer working condition, so much more difficult to field. Nevertheless, here again the value will not affect the analysis appreciably.
Of the 900 tanks for the Russian army I haven’t seen any better figures made public, and therefore contend it is a reasonable number.
For the moment we’ll ignore ships counts and a breakdown of aircraft by type, since a serious naval encounter is not likely, nor much sustained dogfighting over the Ukrainian skies.
Quietly taking over Belarus places massive strategic pressure on Ukraine. Not only is the path to Kiev dramatically shortened, but substantial forces will have to be kept in reserve to protect again any drives to the rear of the country, either towards the capital or the western city of Lviv.
A clear axis of invasion will come from the north, in a pincer towards the capital. Kharkov will face a similar effort, which the Donbas front will attempt to a effect a breakout, wipe away Dnipropetrovsk, and reach the Dnieper. In the south, forces from the massive build up in Crimea will probably head towards Odessa and most certainly try to link up with the separatist forces around Zaporizhzhia.
Before running the numbers we need to adjust vehicle totals for qualitative differences. Given the massive amount of money lavished on the Russian army in the past decade, including upgraded tank fire control and defensive systems, to say nothing of the army’s already-impressive electronic warfare capabilities, a 10% technology bonus is fair to Russia for both ground and air assets.
Adjusting for these factors gives us a raw combat strength breakdown of 11.4 US armoured division equivalents to 8.0:
Looking at environmental and operation factors I made a few notable changes from the spring. First was force posture. I previously assumed most of the fighting would be done in the east, with Putin looking for gains to be made there first. Since the region outside the breakaway republics are heavily fortified, I assumed the most defensively favourable value. Instead, it looks like the weight of advance is coming from the north, with a decapitation strike towards the capital. Here strong defences are pretty much not in play.
In what seems a terrible mistake to me, the Zelensky government has essentially bent over backwards to avoid giving the Kremlin a pretext for war. Since means no mobilization, no building fortifications. The result is that as the Russians are on the move, it certainly looks like Ukrainian defensive positions are hastily prepared at best.
Second, I’ve increased the values for Russian air superiority. The sheer volume of late-generation aircraft the Russians have deployed, combined with the cruise missile and other striking power they have assembled in-theatre, are going to make it an extremely difficult time for Ukrainian aircraft.
Last, but in Ukraine’s favour, is that I’ve taken away the element of surprise entirely. US intelligence, it appears, has been one step ahead of Russian developments the entire way. Nothing about what the Russians are doing can and should be a shock to the Ukrainian armed forces.
Summarized the combat power adjustments look like this:
I’ve changed none of my assumptions regarding aerial bombardment since last spring, finding no reason to do so. I therefore expect the Russian air campaign to inflict 18 kills per day and the Ukrainian just 2:
The trickiest part of any combat model is to determine just how long a battle will rage. There are two ways to do this.
The first is to assume the necessary strategic depths to achieve an operational objective sufficient for both the victor to be satisfied with his accomplishments and the loser successfully convinced of their defeat—if not the war, then at least their willingness or capacity to continue the current battle. This number is then divided by the assumed rate of advance—generally a value informed by a historical analogy you find most applicable.
The second way is to calculate the days necessary for the two armies to wear down each other to less than a specified percentage; say, 50%. The first belligerent below that threshold loses.
In this case I went with the former method, assuming that if Kursk (1943) saw advance rates of 5km/day, Kharkov (‘43) 9km, and Ukraine (‘41) 24km (Dupuy, Understanding War), the most reasonable assumption would be the middle value. I also assumed an average advance depth of 100km. This distance should be sufficient to besiege Kiev, take Kharkov, break out of Donetsk all the way to Dnipropetrovsk, and break out of Crimea to take Kherson and Nikopol. Such an average depth would essentially effect the seizure of the entire left bank of the Dnieper.
Together these assumptions combine to give a campaign just over 22 days long.
Calculating the cost of war requires first assuming daily loss rates, again based on historical comparison. Here I went with a 1.8% daily ADE loss rate, equivalent to Israel in 1973. Keeping with that analogy, I set Ukrainian losses as the Egyptian’s 2.6% from that war. The logic again being Ukraine will fight hard, but Russia has many advantages that will keep battles losses in its favour.
Translating these assumptions, plus the assumed aerial attack hits, into total losses, we get the following:
In other words, a full-out ground campaign gives us an expected cost of 15k dead Russian soldiers and 26k Ukrainian, plus another 60k wounded each side. Russia will lose 400 tanks and Ukraine 900, roughly 1k and 3k IFVs, and about 10k trucks each. The scale of losses will be incredible.
The last note to consider is that this model assumes the entirety of a battle force is in the field, fighting. Since much of it will be waiting in reserve, perhaps as much as 1/3, this first estimate could be considered an upper, or at least conservative bound.
By contrast, if you’re assuming only 70% of forces get deployed, you get a lower bound of 11k and 19k killed Russians and Ukrainians, respectively. Even so, this remains a catastrophic military cost for no appreciable security gain to Russia, and what will most likely—as evidenced by the experience so far in the Donbas—turn out to be a ruinous fiscal and economic event.