There cannot be a straightforward answer to the question as to why the BJP fell eight seats short of the majority mark. More pertinent point to fathom about would be the fact that how BJP managed to reached 104 given that the party could manage less than 50 seats in the 2013 elections.
Barring the Old Mysuru region, the BJP did well in almost all the regions in Karnataka in 2018. Old Mysuru region was in fact never a BJP bastion and JD (S) did exceedingly well there.
Another region worth discussing would the the Bengaluru region. Bengaluru city has 28 assembly seats out of which voting was held in 26 seats. If we consider both Bengaluru urban and rural regions then there are 36 seats. BJP could win just 11 out of the total 36 seats in the region, while the Congress and the JD (S) managed to win 16 and 7 seats, respectively.
In Bengaluru city, the voting was held in 26 out of the 28 seats out of which BJP could win just eight seats in the urban areas of the Karnataka's capital.
It is an observed phenomenon in the last decade or so that BJP does well in urban regions. When urban regions vote in large numbers then, generally, BJP does well. In Bengaluru, the voter turnout was also low compared to the state average of around 72%. BJP surely must have expected more seats from Bengaluru. Even PM Modi addressed many rallies in the city.
The result of the Karnataka assembly elections 2018 was announced yesterday and the BJP emerged as the single largest party by bagging 104 seats in a 224 seat assembly (polling was held in 222 seats on May 12). The BJP ended up eight seats short of the majority mark which allowed the Congress and the JD (S) to cobble up an alliance and stake a claim to form the government. Congress-JD (S) combine has 118 seats, which is well above the halfway mark needed to form the government.
Both sides have met the Governor and staked their claims, and now the ball is in Vajubhai Vala's court.