Today it seems that the main purpose of a WEB application has been forgotten. A WEB application must above all serve its end users rather than its programmers. For that reason, concerns should first be channeled in bringing a positive end user experience (by making it as fast and accurate to their demands as possible) then a positive developer experience (by making it easy to work with and build structures on it).
A "good" web framework is one that naturally meets above requirements and thus produces happy end users and developers. Instead of doing "everything", is should only act like an integrated solution built of decoupled libraries united for a common purpose, that of creating an "abstract" web application other developers will build upon. Each of these libraries:
Last but not least, a good framework does only what it absolutely needs to and nothing more! Its users are expected to append their own creative work upon that structure for their specific projects.
A "bad" web framework, on the other hand, follows the other way around. It attempts to increase development productivity by getting large enough in its scope of recipes so that little is left to its users except learn and apply. As a consequence of this it becomes popular because anyone can learn and apply, thus become a "programmer". Yet:
Whenever above are applied, you will never see a well assembled machine where recipes are correctly put together, but a bloated over-programmed total mess impossible to work with.
Lucinda strives at being a good framework by applying minimalism and modularity in order to obtain high performance and scalability. Consequently, its components are split into units (APIs and their classes) that strive to be absolutely independent of each other. Framework itself is nothing more than a thin layer of integration between these otherwise independent APIs, able to merge them into a structure that is simple, flexible and harmonious.