What makes people think building commercial Internet applications is similar to building Enterprise applications?
I am asking this question because there is a perception that one can directly apply the same principles of Enterprise application development to that of commercial Internet application development.
It may be obvious to most of you that these two activities have starkly different requirements, but don't take it for granted that this is clear to those whose experience only involves one, or the other kind. Believe me, I run into these people all – the – time. In particular, a good number of Enterprise application architects seem to think that the traditional, rigid approaches and principles of developing Enterprise applications should be preferred over the more agile approaches and principles commonly practiced in commercial Internet application development — when developing all types of applications.
That is a fallacy. That kind of thinking is an instance of the hammer truism, and fails to take into account the key differences in the requirements for the two types of applications.
Do Enterprise applications have higher scalability requirements than commercial Internet applications? Of course not.
By nature, the scope of any Enterprise application is that of a corporation. I don't know about you, but I have not yet run into one with a user base anywhere near that of the Internet. Anyone will be hard pressed to find an example of any Enterprise applications in production serving as many users as Facebook, Ebay, or YouTube. And these sites typically run web applications made out of open source components, hosted on commodity hardware and infrastructure. Anyone parroting the mantra of "open source components cannot scale" must be living under a rock. Of course they are constructed to scale, albeit may be differently from the way the typical Enterprise applications are architected.
Commercial Internet applications usually have to go to market fast — in lightning speed compared to the Enterprise counterparts — and, over time, have to change rapidly to keep up with changing business requirements. Their development and release cycles are measured in weeks and months, not years.
While in the Enterprise we worry about some security vulnerabilities that can be exploited by disgruntled employees, out on the Internet we worry about all and every single one that can be exploited by anyone, including the 13-year old cracker and script kiddie living down the street.
The Enterprise environment is a lot more predictable and controllable. You can mandate a specific and narrow set of client application, workstation, and network environment requirements — and that's acceptable, because these things can be commanded in a top-down fashion inside the Enterprise. By contrast, that's not even a choice out on the Internet. Your application is open for attempted access, by anyone, anytime, using any types of client device.
So, tell me again how anyone can say that the same narrow architectural principles applicable for building Enterprise applications should be preferred for building commercial Internet applications?
The bottom line is, don't let yourself fall into the trap of ignorant — or worse, deceptive — marketing messages about the perils of building commercial Internet applications using agile development methods, and the mix of open source components and commercial software where appropriate. It works, it has been working well, and it's going to continue to work better, and better.
As always, use the right methods and tools to solve the right problems, and you will be doing just fine.