Sep 20, 2011
The Reality of Web Development Frameworks
Developers get pretty religious when it comes to the topic of web development frameworks. There are plenty of available MVC frameworks for every language, some with very strong followings. Ruby/Rails, Java/SpringMVC, and Python/Django are some examples of popular ones. Developers seem to be polarized about whether these are good or bad, and why. In my view, there are generally two types, lightweight ones that provide simple "plumbing", and heavier ones that offer a complete way to develop apps. The light ones provide a structure for separating the components of the MVC model, essentially providing a scaffolding on which apps can be built. They may include a template engine, or may work with several. The heavier frameworks promise a lot. They include the code structure, template system, and often provide implicit connections between objects, avoiding the need to write a lot of code. In many cases they also include an ORM, abstracting the developer from the database. Users of these say that they can develop web apps very quickly, and that they appreciate avoiding the need to understand complex SQL. I believe this is true, to a point, when it comes to prototypes and perhaps early software versions. These can be developed very rapidly. However, after that, my experience is that developers start to fight with their framework, and it becomes a liability. At Apperian, some of our technology is built using one of these heavy frameworks, and in the early days it allowed the software to advance rapidly. However, as the tasks become more complex, and as the load on the system increases, we find ourselves increasingly having to circumvent the framework. We are eliminating it bit by bit, and soon we will replace it entirely. As an example, some of our admin web pages list information, and those were built rapidly and with no direct interaction with the database. The framework took care of all that quite nicely. However, when the user load grew, these pages became unacceptably inefficient because the underlying code was not smart. It generated a ton of database hits unnecessarily. We have been systematically rewriting these pages, replacing them with direct SQL and essentially avoiding the "benefits" that the framework offers. I don't believe that a good developer can ever build a complex, database-driven system without understanding SQL well, and I think there is little value in abstracting it with an ORM. If you want your system to scale well, you need to understand how it works, and the database design is particularly important. Well-written queries can make the difference between a slow site and a fast, scalable one. If you don't know what is going on under the hood, you will never be able to optimize it. I see value in lightweight frameworks that string code together, provide a basic MVC model, and include a template system for pages. Anything more than that just gets in the way. In the future, I will continue to use frameworks, but they will be the light and simple ones. What is your experience with web development frameworks?