The key worry for the BJP is not just the coming together of their opposition - Mayawati's BSP and Akhilesh Yadav's SP - but the shock of the massive swing in votes away from them in UP - and the massive swing in favour of the opposition in both Bihar and UP.
In UP, the vote for the SP - supported by the BSP - is a huge positive swing of 9% to 10% higher than their combined vote in 2014.
And the swing against the BJP was even more significant - especially as this swing against the BJP is in its strongest seats - including the Chief Minister's own seat - held for nearly 30 years by the BJP.
While the swing in votes is crucially important, the unity of the opposition was a key factor too.
In a nutshell, the defeat of the BJP was enabled - 66% due to a united opposition and 33% due to a swing in their favour.
Consequently - the BJP would not have been defeated by only the swing in votes, or only the greater unity of the opposition. The victory was created by a combination of a swing away with the declining popularity of the BJP as well as the unity of the opposition. The opposition needed both hands to clap - swing and unity.
Democracy is full of strange surprises - the voters of Bihar dismissed BJP and Nitish's tactics - and instead handed a huge 8% swing in favour of Lalu's party, the RJD.
The two basic lessons from these major by-elections are this. First, it seems the tide is beginning to turn against the BJP. The swing away in Modi's own territory, Gujarat, was the first indicator - and these by-elections seem to confirm the Gujarat trend. Secondly, if the opposition wants to achieve victory in 2019, it cannot just rely on the swing away and the drop in popularity of the BJP; the only way the opposition will win in 2019 is if they form a united front - which is a huge ask given all their differences and the historical baggage.
Get the latest election news, live updates and election schedule for Lok Sabha Elections 2019 on ndtv.com/elections. Like us on Facebook or follow us on Twitter and Instagram for updates from each of the 543 parliamentary seats for the 2019 Indian general elections.