It used to be very hard (more investment) to crush (win) a given business area with a killer software product - corporate or consumer. It was harder to actually code (program) quality, easy-to-use software (I think) – which meant it would take longer to produce, which meant you better get it right. “Getting it right” meant spending more time on requirements gathering, more time on testing and therefore, (in our infinite developer wisdom) less time on usability – after all, there was no time for those “nice-to-haves” and no recognition of its value in comparison to getting the business rules right. All of this, by definition, meant that the software took longer to deliver, which, in turn meant that it was more common for users to outgrow the software by the time it was delivered - particularly in the corporate environment.
Users often never got any value (ROI) from software which took 1-2 (or more!) years to deliver. But, even in that environment, (which I think I describe as more grave than it was) sometimes you could get it right and win – and then, as a software vendor at least, you could win big since it was so hard for others to compete (for the same reasons it was hard for you to win).
Gaining market share was even harder. From the customer’s perspective, in the face of their large investment in a software product (nothing was free back then and just the installation cost was something never to take lightly), they had a much stronger “follower comfort” motivation – perceiving it to be safer to go with the leader (“you can’t be fired for using IBM”). That meant you needed customers to get customers. A key reference customer was necessary and critical mass was, well, critical to succeed. In Financial Services, if you did succeed as a software vendor, you were bought by Sungard – they knew how hard it was to win, so they let other companies do it and then just bought them (all... so many, in fact, they have to present them in an alphabetic index ;).
Today, it costs less to enter a given market with an idea and then to fix it, expand it, scale it – or even abandon it. Less up-front time on requirements gathering (because you can credibly limit v1), which means getting software into the hands of users earlier, which provides better usability feedback, which produces better software. There are even basic automated services - APIs - , like transaction processing, storage, etc, which are a snap to integrate.
Overall, the time to produce something valuable is shorter and it's more iterative, delivering value in stages. Programming is easier. And deployment... OH! Deplyment! Those barriers are lifted almost completely – at least for web services (SaaS) – allowing developers to get software into the hands of end-users immediately, without even an approval or onerous legal process (if both sides willingly participate).
All this means there are more competitors. Big companies need to compete with small companies (who, by the way, might be able to alter pricing due to their lower R&D legacy). Old companies compete with new. Customers probably have lower switching costs too, due to their ongoing demand for ‘switchable service’ as part of the service they choose (ironic, isn’t it – that to win a customer’s business today, you hove to prove to them that they can easily stop using your service).
Competing today is actually, well, fun! Got an idea? Try it! Get it out there!