A Smallcore Manifesto: Help Us Build a Better Teddy Bear
The largest underground "movement" in the Drupal community is the desire for a shift in goals, which has been labeled Smallcore. This movement has been rapidly growing among Drupal developers, who instinctively understand the need for and advantages of such an approach, but up until to now there has not been any concrete and constructive communication to the rest of the world about why we feel this approach has merit.
This article is meant to provide an overview of what we, as developers, mean when we bandy about the #smallcore tag, which unfortunately has been misconstrued as a desire to just rip out as much code as possible without any thought about our users. This is actually not the case at all, as #smallcore is intended as a way for us to better serve our end users.
Introducing the Drupal teddy bear

Out of the box experience is important, and a user interface is the sum of the assumptions that get made about how the product will be used. Assumptions are incredibly powerful things - they are the difference between a bad product and one that people actually want to use.
So let us assume for the moment that out of the box Drupal comes as a pretty basic teddy bear. This teddy bear has all the essential elements that make it a teddy bear, and it can further be customized by dyeing it a different color and dressing it up in different costumes.
The main components of any stuffed animal are the stuffing, which is loosely analogous to the modules used, and the fur, which is like the theme layer. You can further add additional pieces of clothing, which I relate to features and or other pluggable modules that can be added after the installation.
We also have the ability to automate the assembly of all of these components for mass production, using the Drupal installer which accepts all the required components and uses an install profile as a "sewing pattern" to stitch everything together correctly.
Furthermore we have been moving towards solving the packaging problem through projects such as Drush Make and the upcoming install profile packaging on drupal.org so that we are even able to ship you everything you need to build your own customized bear out of the box.
Where it goes wrong

This methodology of building sites and applications based on Drupal has served us very well up to now, but we have started reaching the limits of this approach. One of the major selling points for a large majority of developers in the Drupal community has been that Drupal will allow you to build nearly anything, or to relate this to the visual metaphor of stuffed animals, any kind of stuffed animal that you can think of.
The pain points that are starting to become apparent is that as we are building more products that differ from the assumptions that Drupal makes about how it will be used, we are dramatically increasing the amount of work and negatively affecting the usability and stability of any such products that we build. A large portion of time spent building something like Managing News or Open Atrium is spent undoing the assumptions that Drupal has baked into core directly.
To put a finer point on this, the more Drupal becomes a better teddy bear (which is what the D7UX project was attempting), the less useful it becomes for all the other use cases that Drupal is currently being used to solve. Because Drupal core is trying to please both of these audiences at the same time, it means that changes for the end users who just want a better teddy bear are being sacrificed for people who need to be able to build different stuffed animals with it and vice versa.
It should also be noted that this is affecting not just people who are building distributions, but also people who are building any relatively complex site. Instead of having your install profile be instructions for assembling your stuffed animal, it becomes a far more complex system for dissassembling and modifying an already pre-assembled teddy bear.
What smallcore is all about

The crux of #smallcore is the need to re-think our production line by manufacturing and shipping the minimum amount of stuffing and fabric that is needed to create all the stuffed animals we might want to make separately, and moving the assumptions that we are currently making about how Drupal will be used out of the box to the install profile, where it belongs.
By re-thinking and refactoring how we build Drupal the CMS (the teddy bear in this case), we gain the freedom to make assumptions about how end users will use it, which in turn means we will be able to put together a much higher quality product than we would have before without limiting the flexibility that developers cherish in Drupal. We will finally have the flexibility to choose a single WYSIWYG editor to use in the CMS, and stick to and use an image handling mechanism that makes sense for our product.
Other products based on the Drupal framework will also gain the freedom necessary to implement the assumptions they need to make, without fighting the way that Drupal already works. As a result of building the Drupal CMS in the same way as other applications of the Drupal framework are built, we will also finally work out how to make building our own applications more easily, which will result in a much more sane and flexible API for developers using the framework.
Smallcore is not about changing what the Drupal project is building. Our primary goal is still to build a kick ass CMS, but with smallcore we will be changing how we build it. At it's heart it is about building a better teddy bear and making it easier to build any other stuffed animal you can think of.
One thing I haven’t seen
One thing I haven’t seen brought up yet is the benefit to end users of making the Drupal API and CMS separate products: Drupal the CMS can get a version number of its own, and so can the API.
Much like moving from PHP 4 to 5, moving major Drupal version numbers is always a multi-day project on any decently complex site.
However, many contrib modules are able to add version numbers within the normal cycle of a majaor Drupal release, and these improvements are generally amazing, useful and speedy (and lots of them see the module split into an API and a UI, funny enough). Some modules mature faster than the Drupal release cycle – in fact, we have #D7CX that asks developers not to save big upgrades for the same time as a major Drupal release, but Core modules don’t have the same flexibility.
Why couldn’t we come out with a Blog 7.x-8.0 while Drupal 7 is still out? Currently, that’s not possible. Moving the CMS into something that looks more like contrib wouldn’t be that bad. Being able to package install profiles would make this 100% painless for anyone who wants to casually download Drupal CMS.
This would also allow us to fix Comment.module mid-cycle, or remove Blog API, or make improvements to young features like Dashboard, all without having to go through 15 to 20 months of release cycle for the core APIs.
Also, PHP versions do make some (small) improvements from PHP 5.0 to 5.1 to 5.2, etc, without changing the paradigms too much. Drupal point-releases do this with bug and security fixes, but not often by adding new API calls. Why not? Don’t break backwards compatibility, but don’t be a scrooge either.
Whether you care about #smallcore / #bettercore or not, the opportunity is greater if the Drupal CMS is a citizen with the same rights as any other distribution.
Actually CHX makes a similar
Actually CHX makes a similar argument here: http://www.drupal4hu.com/node/226
Division of Labor and Accountability
When offered the chance to have a great framework and great distributions that can be switched in and out on top of the framework, most everyone will say, “Thanks!” But I am re-posting in this thread to ask again how will this be accomplished? And by that, I mean who will be accountable for accomplishing it?
Improvements to core are shepherded through by each release czar and Dries and Acquia are standing behind them. So a smallcore framework should be in good hands.
If all or most UX is removed to contrib, can we be as confident that responsible module maintainers will arise to take care of them properly? Will these module maintainers get the same backing (from Dries, Acquia, the developer community)? Views arguably the most powerful/important contrib module (now the CCK has partly entered core) is masterfully taken care of by Earl because (please correct me if I am wrong) Sony pays him to do it, and still plenty of people, Earl included, lament the fact that there have not not more people contributing to Views to enable it to develop faster. Will there be corporate money backing efforts to design UX for non fancy corporate sites? Will there be enough developers willing to contribute just for the love and ability to improve their own smaller sites?
I think before we go down this path, we would need to work out a road map AND determine what leadership/development positions would be required to ensure this road map could be traversed. And then we should try to line up some commitments of time/money to ensure that these positions could actually be filled.
How about two concurrent versions of Drupal?
I am not a developer, I am not someone who knows php inside-out; I am a typical user, I would say: I have used Drupal in one of my recent projects and I plan on using it in another two in the near future. Since most of the comments here are written by experts (or so it seems) I thought maybe someone would be interested in hearing what ordinary folks out there think about this smallcore dilemma.
I’m sure everyone here is familiar with those Google trend charts which indicate that overall both Joomla! and Wordpress are used and downloaded more than Drupal. There must be a reason for that. Drupal’s incredible flexibility comes at a price: some people out there simply don’t like the “some assembly required” tag on the Drupal box…
Of course, one may say “we are not competing with Wordpress and Joomla!” but the fact is you are; without user support Drupal would be limited mostly to the developers’ community which is good but probably not a very lofty goal.
On my main web site I use html for the most part but I also use Wordpress, I have not used Joomla! CMS so far so I cannot speak about it. I really like Wordpress control panel and I don’t look any further when it comes to blogging needs. However I don’t even dare to think about modifying Wordpress for anything else beyond blogging (I know some people can do that, but not me).
In the beginning Drupal admin area looked really intimidating to me; I always thought I forgot to check one of the boxes somewhere in the countless array of setting options. It got better at it after some time and now I feel pretty comfortable with it (Drupal 6). However the initial reaction was to run away. Especially after I realized that half of the free themes look very plain, when I saw the long list of bugs reported for those that looked half decent etc…
Another thing that still bothers me a bit is the fact that you maintain versions 5, 6 and almost 7 at the same time, which looks like waste of manpower and that in itself is pretty depressing for some of us because finally when we figure out one major version you come up with another one, then another one… here I see you are already making plans for version 8… How about focusing on, for example D6 and D7 and making them the best they can be before you jump into another big version?
In my opinion there is a need for two concurrent versions of Drupal; one bare-bone (smallcore) version which gives users practically unlimited options and another one which is nicely packaged, similar to Joomla! with most useful and most used modules included (such as CCK, Views etc) and simple and intuitive control panel.
After all you cannot have a cake and eat it at the same time, right?
Finally I would like to thank everyone who has contributed their effort and creativity to make Drupal such a wonderful tool. Keep up the great work!
This somewhat already exists...
This is the idea the development community is clamouring for fully embracing, and it already somewhat exists.
For instance, if you go to the http://acquia.com website you’ll find a “distribution” of Drupal. All this is is Drupal plus a bunch of contrib modules pre-packaged. This combination of theme and contrib modules turns Acquia into a more targetted CMS.
Open Atrium is another good example – it’s Drupal with a bunch of contrib modules and a theme which focus it in a different direction.
There are several other “distros” out there that do this same sort of thing. A lot of developers see this as the strength of the project. If you start thinking of Drupal more like Linux, and “distros” like Open Atrium, Acquia, Drigg, ProsePoint, etc as “Ubuntu”, the analogy becomes a lot more clear.
The better Drupal gets at being able to produce these distros, the better Drupal will be able to address the needs of end-users. The more work the core Drupal project does to appeal to end-users, the worse the product will be. Drupal is a FARRRRR way away from being as user friendly as Wordpress… but if Drupal was a better framework, ProsePoint could be a better Wordpress competitor (...and would not have to resort to core hacks to achieve the experience they’re aiming for).
Not smallcore but indiecore
I think the issue isn’t so much that we need a small core to create products like Open Atrium, but that we need an independent core. Removing OpenID from core isn’t so much an issue, but decoupling System from Node is. I think it’s important to keep this in mind since we can keep Drupal as it is, and improve it so we have an indiecore that doesn’t make too many assumptions. Like this we can keep all sides happy.
purpose of Drupal
Dries has stated that his goal for Drupal is to eliminate the web master. Drupal is an open-source project and Dries does not have exclusive authority to define Drupal’s purpose, but I think it is well worth considering. Trying to re-purpose Drupal as a developer tool rather than as a tool for making sites WITHOUT a developer is a 180 degree turn around. Just because most contributors to Drupal code are developers does not mean that Drupal should be turned into a developer tool (and its much larger constituency of non-developers abandoned).
I, like a lot of others, am intrigued by the talk about making Drupal more flexible so that we can choose a UX appropriate to whatever kind of site we are making. To me, that sounds like it requires additional APIs, which would result in a larger core rather than a smaller core…but I don’t think the size matters much.
Splitting Drupal into a developer framework and a series of products built on top of it (that can be chosen or ignored in favor of making a custom product) so that we can have the best of frameworks and products sounds great in theory, but how will it work in practice? As Leisa has pointed out, it is less clear where the development funding, time and energy would come from to develop and maintain these product installations. Maybe it would work out, and maybe it would not. If someone can articulate/demonstrate how to make this work, that would help to make a more convincing case for this roadmap. Otherwise, going down this road would likely result in Drupal the framework, used and usable only by developers, and a handful of packages like Open Atrium but no more multi-purpose do-it-yourself web site tool and big shrinkage in Drupal instances. I have yet to see a specific, clearly defined list of at least some of the additional API and UX changes that “small core” advocates want. It would be helpful if someone could begin to articulate this so we do not go on debating grand but vague philosophical changes.
Well...
The way you talk, it sounds like drupal isn’t already a framework used by many developers to accomplish things outside the scope of what the drupal profile intends… and that simply isn’t so. Drupal is already a framework and (as I pointed out in a previous comment) that framework utilizes and existing profile to produce what the rest of the world sees as Drupal the CMS.
I think the observation that has been made and continues to be made, is that Drupal the CMS could benefit greatly by being decoupled from Drupal the Framework’s development cycle.
A Few Things
Part of the reason you have not seen how smallcore would work is because that is really something to chase after for Drupal 8. Major changes for Drupal 7 are basically done so this movement has to wait a little bit. Until Drupal 7 is out the door we need to put some time in there.
If you are looking for a CMS built on a framework take a look at the Joomla! source code. There is a fairly clear separation there. Joomla! the CMS sits on top of their framework and the framework could be used to build something else all together.
No one is suggesting we ship Drupal core with no solid CMS application out of the box. This is more an an internal restructuring so that those of us who want to build other packages on top of Drupal core can more easily.
What is Drupal?
I always found the “marketing” about Drupal to be incredibly misleading – like Drupal really wanted to directly compete with software like Wordpress or Joomla. These are complete products “out of the box” which tailor their UIs to pretty specific use cases, whereas Drupal is anything but…
Most of the negative comments I read regarding Drupal are a side-effect of this misleading marketing. People download and install vanilla Drupal and quickly get frustrated by the fact that features they consider standard for a CMS are absent – no WYSIWYG, no media management… and to be frank the default themes are just plain ugly and dated.
Out of the box Drupal does next to nothing and I like to consider this by design. Drupal, as it exists today, is not a product. The best way I’ve seen it explained popped up in my Twitter feed one day when someone said “Drupal isn’t a CMS – it’s a tool that helps you build CMSs” and I don’t think this could be any closer to the truth.
This is Drupal’s leg up and the reason so many web shops, freelancers and developers throw their weight behind it. Yes, it’s often cryptic for end-users, but I consider this largely the job of the integrator to address, not Drupal. Like others have mentioned, the more Drupal does to make Drupal a better blog, the worse it becomes at being a product catalogue, intranet, customer portal, etc etc etc etc etc
Don’t “fix” Drupal’s UI, give integrators (be them designers, developers or a combination thereof) the tools to lay out their content type and module forms more effectively or to better express the metaphors their integration seeks to accomplish.
Honestly, the real major flaw Drupal has in the UI/UX department is the fact that the most you can do with a form is lay it out in a monstrous, cluster@!$% looking mess which overwhelm users – we need better form hierarchy options. It needs to be easier to separate common fields from less common fields. Hiding complexity is a key to producing more usable and understandable UIs.
Drupal needs to quit trying to frame itself as a content management product and fully embrace it’s strength as a content management framework. The better Drupal gets at letting developers effectively produce products like Open Atrium, the better Drupal will be as a whole.
Let the integrators / service providers worry about the end users. Give us the tools we need to fulfil those “user stories”.
Right then ...
So now we have a manifesto, work simply continues? http://drupal.org/project/issues/search/drupal?issue_tags_op=or&issue_ta...
That said, please can we use a tag like “CMF” or “framework” instead of “smallcore” already? :)
Finally
To be honest, I’ve been kind of shocked that it took Drupal people so long to get to this point. Undoing Drupal assumptions probably eats up more than 50% of the time spent on Drupal projects at my company, and the frustration we’ve experienced with this has really lead to Drupal losing mindshare amongst our developers, when we’re talking about picking tools for the various jobs we do, in favor of more framework-oriented stacks like Django or Rails. Particularly given that these communities seemed to come upon this whole notion of abstracting out a core and building a CMS on top of it about five years ago, Drupal’s lateness to this particular party is interesting.
Here Here!
This is why I’ve all but abandoned Drupal, for Django, when I want a tool to build a CMS. However this talk of #smallcore is really starting to pique my interest and will probably lead me to check this out again, once this is a reality.
D7UX benefit which people attempting to do what?
@Dries: “The D7UX improvements benefit a ton of people” — which people? what user story? what are these people attempting to build? You can’t make blanket statements like that — at all. And, all of it doesn’t count for what you get out of the box with D7.
The disconnect is that we’re stumbling around in the dark, making “improvements” to the UX, without a user story of what we’re actually trying to build. One person makes improvements for the teddy bear, another person tries to get the alligator features in.
A lot of things I would want to see out of the box for the user story that I have in my head for a Drupal Product would be totally against what other people want. We can’t have a meaningful discussion about whether forums should be in or out or on or off by default without the context of what we are aiming for.
Smallcore is a potential path to making a better Drupal Product that doesn’t actively make worse (other products). No one can answer for me today what this mythical Drupal Product is supposed to do out of the box, or whom it serves.
Smallcore is an myth
To start of, I think the whole #smallcore movement is good because it allows us to create a good Drupal product – where as we are now very bounded by the “everything” for “everyone” use case. But I would like to clear a few misconceptions out of the way, while as almost always being one of the few UX people providing feedback I will try to be more controversial, so we can have an fun discussion.
As far as I understand #smallcore and this post seems to only strengthen the point, is that it has no idea how to actually handle the UX problems of Drupal. Because technology is not at heart of most of our UX problems, neither is it merely a lack of focus problem – it’s a people problem. Because we assume that by creating a better distinction between Drupal core and its UI – it will naturally make the interface better. Thus reminding you that Drupal on itself is an interfacing product/framework – where would our fast majority of users be.. if we decide that Views is part of the framework and thus needs no UI (or building its UI gets very little attention)?
To address Dries his point, we have tried to make D7UX as lean and mean as it could be – whenever this failed, it was never the UX-Team or Mark & Leisa its intention. It was mostly due to a lack of resources working on it (something you, all in this post – should have looked after, but decided not to) – and that kind of frustrates me. Because D7UX gets blamed for so much, that could have been solved by having a few more contributions from the community on it. Although I agree, that building things as OpenAtrium and other distributions is far harder then it should be. It is not the UX part of Drupal that is keeping you up, you could have been doing it all along – even for Drupal 7. Where I see Leisa’s blogpost more cheering “Drupal for me” than constructive feedback on how it will solve our actual UX issues.
#smallcore is going to fix UX? No, because #smallcore is not going to provide good UX building blocks – something we are desperately trying to do. And no, vertical tabs is not a building block. The IA is a building block. So where in all this #smallcore do we actually make the UX building blocks here?
Because I see #smallcore and thus Distributions becoming more and more a Drupal-shop thing, where only the very informed and skillful can actually achieve this UX-level (remember very few Drupal-shops have designers who can do and understand interface design) – to me a bit arrogant, to underestimate the level of informedness on Drupal core UX issues, can you imagine that most of our decisions actually are for your clients?
I am failing to see the larger community, and actual users of our product in this discussion. I am always trying to be the advocate of the user, but it is becoming harder and harder.
So can one please clarify, as I have asked time and time again to the people involved in this initiative where the common response was – it allows ME to create better distributions. It never says how it will allow core product to have a better UX. I really hope my doubts can be taken away, I would love if this could help UX – but I fail to see how*UX) and who (UX-Team conists out of <5 people) will do that.
smallcore's intent is to enable better UX, not fix it
Bojhan:
The idea behind smallcore is not to fix UX issues, but bring Drupal in a position where UX issues are easier to solve. In my mind, Drupal the framework would contain UI building blocks, while Drupal the CMS would organize them into a meaningful information architecture focussed on a use case. A starting point for such a use case is obviously going to be the current Drupal 7. Liberating Drupal from being the CMS and the framework for so many diverse people out there will make it tremendously easier to focus the CMS and strengthen the framework. We need both to happen.
The distinction between framework and CMS should simplify the work for the UX team: by splitting the problem into “toolkit UX” and “use case specific UX” work we can get the right people listen to the right problem sets.
When Drupal CMS itself is a distribution, smallcore should further simplify building alternative distributions of Drupal. We just rolled out Managing News as packaged install profile. From this experience, I can tell you, it is a shop thing to do right now, because it takes a lot of work. But I can also tell you, that there is a lot of room for simplification and very soon we could have Drupal set up to make it easy for anybody to create and host their own install profile based distros.
Reply to alex
I think having two places to work on UX, does not simplify our process. Because the “toolkit UX” will be for the framework, by design alianating UX feedback because its a 1 designer vs 100 developers envoirment. And “use case” specific UX taking away the hard-core good developers that it needs to make reusable interactions and workflows (no often, they will not overlap with the toolkit). As one who is daily in these UX issues, I do not see how this “enables” me instead it would only decentralised my efforts and take the few resources I have left.
Eitherway even from talking to yhan on IRC, I am still somewhat confused that this is to empower those building Distrubutions – but there is no strategy involved how it will help core UX. Other then assuming, it will be easier – when I agrue its not.
Let me try to re-illustrate the potential
Currently you’re stuck, you don’t have the resources to do what you want with D7UX, you don’t have the contributors, and frankly, you don’t have the time. D7 is in code freeze and well… that’s basically all she wrote, get ready for D8. That is your situation as of right now with very few exceptions.
Now, Drupal is a 2 part system, on the one hand we have Drupal the framework, on the other hand we have Drupal in the install profile. As of right now, “Drupal” is the only install profile that is packaged and ready to go out of the box on drupal.org. It works no different than Open Atrium, or Managing News (granted a bit simpler) but bottom line, it’s the same approach. What we’re proposing here, is essentially calling it what it is: If the drupal profile were broken out of the drupal framework, and provided as a separate (packaged) download, then you’d have drupal the framework, sitting on its own. And drupal the framework, could be stripped of things that drupal the profile needs. Those things could then be moved to contrib, improved much more quickly, and be included in the packaged download for the drupal profile.
In regard to Drupal 7 and its UX issues, IF everything I just said were already the case, the vast majority of UX issues would be more closely related to the “profile” than the “framework”. Even Dries has pointed this out mentioning that toolbar and dashboard (etc) are the majority of UX improvements. And these are not really needed withing the framework. If they existed within a “contrib” space, they could be improved more quickly, still integrate with the framework, and be auto-packaged for any profile distribution wishing to use them. This would open up the development cycle on all of these modules, and the profile as well, allowing for vast UX improvements (or minor ones) to go in “mid-cycle” for drupal the framework, BECAUSE these improvements are being made outside of the core apis. Thus, no sea boiling. If an api improvement needs to be made, it needs to wait till the next iteration of the drupal framework. I think we can all agree on that, but should the UX system be tied down in the same manner? I personally think the answer is a resounding “No”.
Since I can’t edit, I would
Since I can’t edit, I would like to add that the UX part of Drupal is and has always been involved with by very very few – resources are our biggest problem. A parrallel development track, would require you – to contribute this.
There are good reasons for that
There are reasons one could argue (and I’m not necessarily agreeing) that Drupal’s UX has always had too few involved and has always been our biggest problem.
1. When Drupal started out, it was written by programmers for other technical people. UX is pretty insignificant at that point in its development.
2. Programmers are essentially a dime a dozen compared to user interface experts. In other words, it’s not because the Drupal community was not interested in contributing to the UX, but rather, because most of the community has skill sets better used on other problems — to which they applied themselves. Web application user interface / user experience is the stuff of esoteric, relatively new fields of research and expertise. There just are not very many UX experts out there and not much in the way of standard guidelines for how to do it well.
3. UX is also very much the domain of the site developer, not just the underlying software (Drupal). Without proper information architecture and graphic design and elements (all specific to the site being developed, not the software), the UX is still going to suck, no matter how good the default UX is in the software.
I'm liking smallcore now
Smallcore makes sense, especially if you look at Drupal as a framework. Maybe it doesn’t make so much sense if you look at Drupal as CMS/Blog/Whatever software—but Drupal is more than that. Smallcore reflects Drupal’s flexibility and extensibility and those are the things that made Drupal attractive in the first place.
I think it would be easy to satisfy smallcore and largecore people by having ‘official’ extensions (ie. sets of modules) to the core. Smallcore + Blog extention for your blog site. Smallcore + Forum extension for your forum site. Of course there could be any amount of ‘unofficial’ extensions, but having official ones would help new developers navigate module confusion.
As I see it, core extensions would be a step beyond install profiles. You wouldn’t be limited to selecting one install profile, but rather you could combine more than one extension. IE, you could combine a Gallery extension with a Forum extension to provide the starting point for your new site.
Some responses
Specifics (Re: David Rothstein)
Here is my short list.
D7UX (Re: Robert Douglass, Dries)
The D7UX improvements were certainly good ones for a large class of users, but large is not good enough. The 80/20 rule doesn’t work when the 100% in your head is actually only a small portion of the user stories that Drupal is implementing — and experience shows we don’t know half of them. In the end, I am relieved but not thankful that I will be able to turn off implementations of D7UX. I think this is how others would feel were they to encounter the UI improvements that Atrium provides for team intranets, or the UI improvements that Managing News provides for news aggregators, in their CMS (which is itself a quite targeted user story) as things they could optionally turn off.
With a small core the goal is to give people like the Drupal usability team the kind of authority they need to develop solutions to meet the user stories they want to for the Drupal product without worrying about treading on the toes of people who use the Drupal framework. And Gabor’s point about the flexibility and rapidity of development outside of core goes further to enforce the idea that with a smallcore start D7UX would have had a greater impact, not less.
Product and Framework (Re: Ronald)
Yes, within each core development cycle there are things that improve the architecture of Drupal. But what smallcore advocates wonder at each release is, “Was this intentional? Lucky happenstance? What about the changes that weren’t so fortuitous?”
I agree that Drupal can be a product and a framework. The main point of contention is this: we think that what we know of now as Drupal core development should focus on framework, while the product development can be compartmentalized, split out, and move much faster in some other space (Drupal “Main”, Drupal “Product”, whatever you like to call it). If done right, to the rest of the world there will be no big Drupal 8 “shift” to framework. They will still download and use the Drupal 8 Product, which is a CMS out of the box.
Reflections from Ubercore
The next version of Ubercart involves very similar concepts. To borrow terminology from another debate, we’re looking for Ubercart’s point of irreducible complexity. We’re boiling the Ubercart modules down to a kernel that will become the Ubercore, the essential entities / systems without which we either won’t have a coherent (usable) e-commerce project or wouldn’t be able to use to provide more advanced features. We’ll still maintain essential non-Ubercore modules, like Authorize.Net or PayPal support, but by removing them from the core we allow both the Ubercore and those essential modules to develop independently of each other. What Ubercart is now would then be an Installation Profile that packaged up the Ubercore with the appropriate essential, maintained modules, but there will still exist just a core for developers who don’t need a product catalog (for example).
This is a win-win for users and developers, and a case in point would be the recurring fee module. It was developed 2/3 of the way toward a generally useful recurring payment system and then languished in core for months. That module was both holding up core development (we couldn’t put out new releases with a very buggy module) and was being held up by core development (we needed to improve core systems to get this where it should be). I kicked it out to contrib with a separate maintainer, and we were able to get Ubercart 2.0 out faster and have a flourishing recurring payment system.
So, what we’re striving for is a simpler kernel without forgetting that we’re still expecting this to be a usable e-commerce application. It also opens the door up for more people to drop the Ubercore into distributions for donation sites, membership sites, etc. since we’ll no longer be assuming the use case of physical products in the core code.
All that said, I think #smallcore principles have merit, but I don’t know how my experience translates into something larger like Drupal. Like I said, we’ll still be packaging in features for the general Ubercart installation profile and have the luxury of doing that since what Ubercart should be is simply another component of a Drupal site. I don’t imagine Drupal would separate itself out into a kernel and a packaged distribution called Drupal with the various components plugged in… but I guess I spend more time worrying about keeping my stuff up to date with Drupal and contrib than imagining the future of Drupal itself. ; )
And a quick plug… anyone interested in contributing some brainstorming juice or code to Ubercore, we’re trying to flesh out what’s been going on and how to get involved at http://d7uc.org.
Compromise - Beware of taking this too far
While the smallcore idea initially really struck a cord with me I think a slight redefinition of the approach is required as well as the acceptance that Drupal has invested for many years into one image of itself (that of a tool for content management and social network websites) and it would be harmful to dilute that right now. There are two possible paths:
Path 1: Drupal 8 development becomes a process of taking out anything that is application specific so as to focus on just the small core that can cater for various use cases (that is what “shipping the minimum amount of fabric” would imply). When Drupal 8 is released we explain to people that Drupal is not a CMS anymore but “fabric and stuffing” and you need to choose a Drupal profile to get something done…
Path 2: Drupal 8 development works on making the Drupal core as decoupled as possible (I think decoupled is better than small which is vague) while supporting and actively putting developer hours in to make it the best CMS possible. As Dries points out that functionality comes through modules. The CMS is our use case number 1 – it’s the one that comes out of the box, it’s the one you see when you click on Drupal Demo, it’s the one you mention when you argue for or against a feature in the small (decoupled) core.
Path 1 means that the approach and all the marketing for Drupal needs to change fundamentally. Most people really just know Drupal as a CMS – they would have to understand that Drupal 8 is no longer a CMS but a framework that can be used to construct a social CMS as well as many other things. They need to understand profiles, etc, etc (something that becomes relevant only once you gain familiarity with Drupal). They would have to understand that the CMS work takes place somewhere else, within a sub-group the same way the intranet or x use case work takes place somewhere else. They would start comparing it to Cake and Symfony and Rails and it would just get messy, because it is neither of those (to its great benefit I believe).
Path 2 means that we achieve the small core objectives but we also don’t waste the investment as a community in creating a name for Drupal as a kick-ass CMS. We can bask in the glory of being able to say our CMS is so good it can also build you an intranet, a news manager, a shop, etc, etc. Profiles begin to gain in popularity and eventually (maybe by Drupal 9 or 10) people understand what is going on and grasp this new concept of a framework not like Cake or Zend but uniquely drupalish – a really powerful new concept that I think really stands a chance to make a true impact.
At the end of the day the argument for smallcore is an argument for good architecture – and there is no argument there. It has to be a small (decoupled) core.
I don’t think we need to make the argument for smallcore one about whether Drupal is a teddy bear or a crocodile. A product or a framework. I agree with Dries on this. It is both. It is complicated to manage both at the same time – but that is where the strength of Drupal will finally come through.
Ronald, I agree
Ronald, I agree wholeheartedly with your concerns about “Path #1” — I’ve said before that we can’t burn our bridges. The work of decoupling various parts of core from each other, and removing the product-focused assumptions in our framework can be done without changing what people see in the core Drupal download. It takes discipline, and a gameplan (dare I say a roadmap?) but it can definitely be done. When the pieces are in place, it may make sense to turn the Drupal Product into a separate download, or offer just the Framework as its own download, but those are eventual goals rather than the first steps.
Agreed
I agree with Jeff. And, I am confident we can achieve both the smaller, more modular core and retain the Product with discipline and a gameplan. It’s also a great opportunity for community members to better utilize their skills working on things which interest them most.
D7UX - a failure in your eyes?
Adrian, one point that it would be nice to clarify:
This makes it sound like the D7UX project failed to achieve what it attempted (namely to make Drupal more usable). Is that what you mean, and if so, can you please address why you think that? Thanks.
-Robert
Made Drupal more usable for whom?
What use case did / does D7UX optimize for?
Specifics?
While in general the basic “smallcore” idea makes sense, I think that both it and this blog post could benefit from a lot more specifics.
What are the biggest ways that Drupal core is actually getting in the way? There is a list of issues at http://smallcore.org/ but it is a pretty small list.
You mention D7UX as an example, and I think it’s certainly true that way too much of that was targeted at core when it could have been better (and more efficiently) done as contributed modules, but:
I think the smallcore movement is a good philosophy, but it would have more followers if it had more specific ideas associated with it.
This was the first step
Getting everyone talking and thinking about the same things. Once we have enough people to form consensus on things we can start getting more concrete examples out there.
The #smallcore issues that exist at the moment were a last ditch attempt at making some form of impact on D7, but we all realized it was too late and was too early without a proper vision.
That approach has been mostly abandoned by smallcore proponents, as we are starting with a clean slate in D8 and evaluating our needs more clearly, so we can figure out the correct solution and not just stab in the dark at personal pain points.
Note however that the most important smallcore D7 improvement did get in, which was giving install profiles the necessary power to implement their assumptions.
That said, I am also pretty happy with D7, and this movement is about allowing us to more cleanly deal with some of the issues we have begun experiencing.
Some of the D7UX work is pretty valuable, but unfortunately we are now in a situation where that work will not improve for a further year or two. We would like to see a world where we can continue to evolve the user interface even after the API has been nailed down.
Ingenious :)
Thanks for your insightful post – i agree and hope to see DevSeed and SmallCore’s efforts rewarded with a fine product!
Smallcore
A large portion of time spent building something like Managing News or Open Atrium is spent undoing the assumptions that Drupal has baked into core directly. To put a finer point on this, the more Drupal becomes a better teddy bear (which is what the D7UX project was attempting), the less useful it becomes for all the other use cases that Drupal is currently being used to solve.
I’m not sure I understand that statement — nor do I necessarily agree with it.
1) The D7UX improvements benefit a ton of people, and don’t really get in the way of “Drupal distributions” — all the changes are self-contained in separate modules that can be disabled if desired (e.g. toolbar.module, overlay.module, etc). Disabling or removing these modules is easy.
2) Drupal 7 is a lot more flexible than Drupal 6, which should give people more flexibility to build custom experiences on top of Drupal.
So, to me, while I support the notion of making it possible to build custom experiences on Drupal core, I’m not entirely sure where the disconnect is. It seems like Drupal 7 meets that goal more so than Drupal 6.
Whom does the Drupal Product serve?
@Dries: “The D7UX improvements benefit a ton of people” — which people? what user story? what are these people attempting to build? You can’t make blanket statements like that — at all. And, all of it doesn’t count for what you get out of the box with D7.
The disconnect is that we’re stumbling around in the dark, making “improvements” to the UX, without a user story of what we’re actually trying to build. One person makes improvements for the teddy bear, another person tries to get the alligator features in.
A lot of things I would want to see out of the box for the user story that I have in my head for a Drupal Product would be totally against what other people want. We can’t have a meaningful discussion about whether forums should be in or out or on or off by default without the context of what we are aiming for.
Smallcore is a potential path to making a better Drupal Product that doesn’t actively make worse (other products). No one can answer for me today what this mythical Drupal Product is supposed to do out of the box, or whom it serves.
Big Fan
I’m a big fan of the smallcore concept. A small core with a kick-ass default install profile will produce the same end result with a lot of power for Drupal developers and professionals under the hood.
I was recently asked why and how I use Drupal, and my answer was basically, “Drupal is powerful enough to meat just about any need I have for building a web site — I just spend most of my time convincing Drupal of that.”
just building a better teddy bear
One more crucial point which was not mentioned above, but can also drive home the #smallcore advantages pretty fast is that it is better even if you only need to build a better teddy bear (and do not consider the other stuffed animals even). While a Drupal release can implement the state of the art teddy bear at the moment of release, it can only receive simple fixes and improvements through its major version lifetime. Even building a better teddy bear with the same Drupal core might require replacing parts, because the teddy bear cannot be better in itself due to how Drupal core follows a no new features approach in its major versions. While Drupal 7 stuffs modules with even more alters, that means it is possible to work around code, not to improve on that code.
That is absolutely true
There are multiple releases of Aegir , Open Atrium and Managing News built on a specific version of Drupal.
This will give the Drupal CMS the benefit of improving the user experience and functionality without having to boil the ocean every time.
This will also allow us to identify and improve the pain points in our API’s for the next core release.
+1 to all that
Nicely – and cutely – put. And to reiterate: smallcore is about making Drupal as CMS better as well as making Drupal as framework better. Everybody wins.
The Community
I wonder what happens to a community of teddy bear enthusiasts when outputs come out from different parts of the production line. The Drupal community is special because it includes a full range of users, developers, builders and designers with all levels of skill and experience. Once Drupal starts separating the stuffing and fabric from the teddy bear, does that mean the teddy bear enthusiasts won’t have opportunities to interact with and learn from the people who want to focus on the stuffing and fabric? And if someone starts mass producing cows or kittens from this stuffing and fabric, how will those folks integrate?
Of course!
Sure! It just means that the tasks will be distinct from each other — “Are you building a bear, or are you working on stuffing and fabric?” Both sides of the equation are important, both are part of the Drupal project as a whole, and the knowledge of what kinds of bears (or dolphins, ocelots, and gazelles) we’re trying to build will have a profound influence on the parts-builders.
These kinds of separation already exist in the Drupal world between contrib and core developers; the migration between the two ‘camps’ is about focus and intent, not skill level. The difference between the ‘product’ and ‘framework’ in #smallcore is similarly, IMO.
Well to me it’s a social
Well to me it’s a social issue. There are a whole range of skill levels working on both contrib and core. However there’s a very strong dividing line between core and 99% of contrib modules as to whether code gets peer-reviewed or not.
Views, which has almost the same install base as core does, has a miniscule fraction of the people working on its issue queue, and depends almost entirely on Earl Miles working full time on it (and that dependency is only sustainable in large part due to Earl’s employment situation). Any real, as opposed to purely conceptual, split between Drupal the CMS and Drupal the framework depends on finding a space in the middle between critical mass of contributors and contrib-space freedom.
So far, all things which act as install profiles to a greater or lesser extent are trying to build that mass by having off-Drupal.org communities – devseed stuff, ubercart, Acquia – none of these are really maintained on Drupal.org, they have their own sites, irc channels etc, feature servers,.. ubercart.org for example has module releases on it which aren’t on Drupal.org at all. Maybe packaging brings them back onto Drupal.org a bit more, maybe it just leads to an explosion of silos – could go either way.
So this leads us to the over-hyping of #smallcore which I hoped this post would dispel, but doesn’t really. When we get into the meat of it, there are actually several different and overlapping agendas:
Quoting yhahn:
“1. Clean up, sanitize and compartmentalize includes/. Currently there are a lot of API level functions that actually depend on modules being enabled. Goal: core subsystems that can move independently of others and potentially be swapped out by experimental work in contrib.”
Drupal 7 already made major steps to do this – field API and entity API allowed us to largely gut taxonomy.module for example. We have a database layer which is isolated enough from the rest of core that it was rapidly backported to a D6 contrib module. None of these are without problems, only the database layer approaches anything like a finished API, but they’re far and beyond ahead of what D6 had. They also let us do things like gut a very large chunk out of taxonomy.module for example – with most of the ugly still in there reflecting only lack of time or lack of Views to rely on.
What this needs to continue is patches, and manpower, not a manifesto. We still have all of locale.module’s admin pages in /includes to take one of the most obvious examples of the complete mess which is our separation between framework and CMS. A lot of these are easy patches, a lot of patches to clean this up languish in the queue for years without even cursory reviews. One thing that makes me slightly more optimistic about Drupal 8 than otherwise I might be, is that we’ve just had a 6 week ‘code slush’ period which was primarily API clean-up apart from a few exceptions. Such a period at the start of the D8 cycle would go a long way towards getting some of this work done.
“2. Focus on the API/toolkits and consolidation of things that people need to build things. Goal: you can implement a feature like blog or forum using tools from Drupal core.”
Again, this isn’t #smallcore, it’s views in core. ctools exportables in core. A lot of work on #1.
I don’t think there’s anything contentious here that any Drupal developer, whether project lead, branch maintainer, core or contrib developer would disagree with. This isn’t #smallcore – it’s just #bettercore. And getting views and other central ‘framework’ APIs in – which is a prerequisite to removing things like all our hard-coded and clunky admin screens and default content listing implementations doesn’t make core smaller, or not for a very long time.
Then we actually get into what most people think #smallcore means – a smaller ‘core’ download (whether that’s linked prominently or hidden away in favour of Drupal CMS is a different argument again).
“3. Re-build the actual product stories in Drupal core with the toolkits and move them out. Goal: Let people like Leisa and Mark have editorial control over direction of experience in the Drupal product that lives outside of a smallcore Drupal. 4. Set up a development workflow parallel to core with the specific goal of making the Drupal CMS product a better out-of-the-box experience. Goal: remove a lot of the contentious, massive community stakeholder arguments that drag usability work in the Drupal product down.”
It’s here where things get trickier. For a start, we have years of work to do to get #1 and #2 into some kind of healthy state. i.e. a core where all the modules are optional is a very long way off. And even then, we may well decide that some modules are part of the framework – it’s not a simple split between /includes and /modules – what’s in modules has a massive amount of variation.
Second, contrib is currently where core modules go to die (archive, blogapi etc.) – since usually the only thing keeping them limping along in core was that we couldn’t release with them being completely broken, and now simpletests. Part of this is that a lot of what core ships with which is firmly in the CMS area (not withstanding the frankenstein modules like node, user, taxonomy which are firmly in both camps at the moment as both consumers and providers of APIs) isn’t all that good, part of it is again the lack of peer-review which 99% of contrib modules get. Until you can solve that issue, which is one we have now, and have had for a long time, the actual #small in #smallcore remains an overhyped myth with very little backing it up – and when you take the #small out of #smallcore, then it just means getting people to actually work on core itself, instead of off in a corner somewhere.
some replies
The difference is whether the modules are used in the base product or not, not which repository they are stored in.
I feel i should dispell this. Core is where those modules went to die, contrib is where we dump the bodies when we can’t handle the smell anymore. Every single module that we have removed from core and placed in contrib was because they were no longer being improved or maintained in any meaningful way.
The only modules that flourish in core are the modules that provide APIs, that contrib modules build upon.
Both Managing News and Aegir are completely developed and hosted on d.o infrastructure. Open Atrium was built in the same way 99% of developers build their Drupal projects, which is in their own repositories.
We have identified this as non ideal and have been actively contributing to projects such as drush make (http://drupal.org/project/drush_make) as well as trying to influence the packaging of install profiles on drupal.org so that we will be able to actually package open atrium and other profiles on drupal.org in the future – drupal.org/node/594704
Faulting a project for having their own irc channel is a bit fickle isn’t it ?
Every single module that we
The only modules that flourish in core are the modules that provide APIs, that contrib modules build upon.
Well I agree on this, and I personally posted many patches to remove smelly features and modules which in my view drag both Drupal the framework and Drupal the CMS down. Some of which got committed this cycle, some didn’t, most of them long before #smallcore had a hashtag.
However while I’d love to one day be able to checkout core and not see a poll or blog directory in it (despite having one site which still uses blog module), I can’t say the same for node, user, file, taxonomy – those modules which are both consumers and providers of APIs. Making those modules more decoupled, yes, splitting out the administrative interfaces for them (admin/content/node /admin/user/permissions) from the APIs they provide, sure. But a comment elsewhere in this thread that “you still need to have modules enabled to use some APIs” looks a bit wrong to me. Field API is a module, maybe some of that could move to /includes – but there’s not a straight /includes / modules split in core, largely by design, and I’m not sure that’s a bad thing at all.
The point is not to fault projects for having their own irc channel, it’s recognising that this creates a situation where even the tiny minority of overall Drupal developers who hang about in #drupal don’t necessarily know what’s going on with them. Most views API discussion tends to happen in #drupal-views, a channel with 30 people as opposed to 300, that would not be the case if views itself was in core. So are node, user, taxonomy (not the weird legacy features tacked onto them, but their core functionality), views etc. framework or not? How framework is the framework? We already have this problem of slio-ing now, how does even a managed fragmentation deal with it?
We Need Definition
Catch, you bring up a great point about the communities. They are showing up in other places than drupal.org. The problem there is that drupal.org is not an adequate place for communities around a specific distro/use case to really work collaboratively. Each of these distros is more their own app that just happened to be built on drupal than something about drupal.
Personally, I hope to see more of these because it means cool stuff that meets the needs of people are happening in places drupal isn’t a big player in. It’s an opportunity for Drupal to expand it’s usage. In order for these to be done on drupal.org it needs to become a good host to them. It’s lack of being updated is starting to become more of a pain point.
Drupal 7 will ship with some better APIs and a whole lot more of them. But, we have a long way to go. We rely heavily on globals, internal linking to other part of the APIs, and more than a few things considered bad API practice (for good reason). Oh, and there is a lot of inconsistency and places that don’t have reusable API patterns.
Define #bettercore. If you as 20 people what that means you might get 40 answers. Smallcore is a name. It’s short and simple but doesn’t really describe what it is. This manifesto, many back room conversations, and more have defined what that means and their version of what #bettercore. It’s just part of the smallcore name.
Now, a lot of what Drupal core ships with is not a very good CMS according to many of the users I’ve spoken to. For example, there is no media management or WYSIWYG. Drupal core + a bunch of contrib modules + external libraries makes for a good CMS. Drupal is the base that people build the good CMS on based on what they think the good CMS should be. Smallcore should make that easier to do and even be able to target the CMS package at direct and definable user groups and use cases. This is something you can’t do with Drupal core right now.
Yeah my point is it’s a crap
Yeah my point is it’s a crap name which for a start doesn’t mean a smaller actual download, and to work will require some kind of intermediate space between core and contrib – the much older concept but no more loved by Dries afaik, ‘golden contrib’. It may mean something like a third repo instead which is still managed via the core issue queue. It may mean aggregating issues from install profile dependencies into the profile issue queue itself. I don’t know. It’s a difficult problem to solve, and an unpopular position with the spikey haired one historically. So I rather focus on what can be done without marketing campaigns instead, of which there is plenty.
However I agree that two years after a major redesign, without the redesign being anywhere near launched, and no updates for months on progress, isn’t a happy place to be when looking at these kinds of infrastructure changes. I also think it’s a good thing that we see communities developing around Drupal-derived applications – however I don’t think it’s a sustainable model for the ‘application’ side of core development itself – since the money in Drupal is around services of various kinds, not around providing a polished CMS for diy site builders.
I came to Drupal 4.5-era as a PHP-illiterate user of things like geeklog and phpbb on shared hosting with no money and complicated requirements, and only made the change to doing Drupal full-time as day a job less than 18 months ago; that kind of need which is served neither by Drupal shops, nor by SaaS like Gardens or buzzr, but reasonably well by core + contrib, is precisely the kind of person who can fall in the gap between framework and highly targeted distribution, but who might be the next person spending 2-3 hours a day in the core issue queue reviewing yer patches.
Fully agreed that Drupal out of the box is at best a mediocre CMS, but I think there’s a confusion in some of these arguments between lack of features (wysiwyg etc.) and user experience (the horror which is the modules page, for example) – the UX-team, as opposed to d7ux, is concerned with the latter, not the former, and being able to add features into ‘core’ easier doesn’t necessarily help user experience at all, apart from for people with wrong expectations in the first place.
A combination of better, more decoupled APIs and ways to make the ‘application’ side more rapidly developed and feature rich without the two working against each other is a good idea in general though, but it’s not a new one. Packaging of install profiles is one necessary technical step, but it’s only a small part of the picture, I really don’t see any substance from anyone about what the real changes to core should be, except for vague noises about separating the CMS from the framework – when that separation is anything but clear now, and as pointed out above, doesn’t necessarily mean cleaning up /includes, cleaning up /modules, then drawing a line.
Even fairly fundamental modules like comment only get attention given to them when they break – so having comment get any less attention than it currently does could lead to a sorry state of affairs. All my patches to comment module have come pretty much directly out of the site I originally built in 4.5 by the way, and the early ones would never have got anywhere if they were a patch to a contrib module, because they had to be fixed by chx first – see http://drupal.org/node/6162 So for me that social issue is also keeping the path open for people to move from casual downloaders to prolific core contributors. But again, is comment module part of the CMS or part of the framework? I can see arguments for both.
As for a definition of #bettercore, my number one priority for Drupal 7/8 (apart from it not getting any slower again) is having a full entity API which takes over some of the assumptions bolted on to field API, and guts a big chunk out of our central modules which more or less repeat the same thing over and over again with subtle but annoying variations. Alongside standardizing and centralizing CRUD and rendering (most of the way there for read, part of the way there for rendering) I’d like to see Views and VBO in core so we can do the same standardization and centralisation for listing and administration pages too. For specifics on these, patches like http://drupal.org/node/460320, http://drupal.org/node/412518, http://drupal.org/node/567572, http://drupal.org/node/597236.
However if I look at http://drupal.org/project/issues/search/drupal?text=smallcore I see a load of recycled issues, some hanging around since Drupal 5, and nearly everything that’s not straightforward cleanup or install profile improvements has been won’t fixed by Dries. All the activity is a hashtag on twitter and now a couple of blog posts. So I don’t think it’s up to me to provide the definitions.