Uber only has one HQ. Sure, it’s more expensive than a taxi service in city X, but Uber HQ and engineering service a very large area.
"Dispatching" a message to a phone based on its location. Why would that need special software engineering? That's all open source stuff that's readily available. Certainly everything else Uber does (collecting money, ratings, etc) is all off-the-shelf stuff.
But as usual the software isn't the biggest challenge. Building a driver and rider network at the same time is.