Around the release of Ubercart 2.0 in October, several Ubercart developers (including myself and Lyle) met in San Francisco to brainstorm and implement our vision for the future of Ubercart. In short, our plan was to re-implement the core systems of Ubercart on Drupal 7 to reflect everything we'd learned in the past three years and to take advantage of D7's killer new features, like entities and fields in core. To do this without disrupting the current implementation of Ubercart and the thousands of sites depending on it, we opened the Ubercore project with the idea of moving Ubercart on Drupal 7 into the packaged distribution space.
This whole process was dubbed the Ubercore Initiative (d7uc), and we carved out a place where developers could more easily brainstorm and communicate about development. The scope of the initiative included efforts not just to rethink the code but also to rethink the processes we used to write and manage it, so we wanted a clean slate to figure out how to best communicate with current and potential contributors.
With the amount of support the initiative received from the community, it was clear that we hit on something people wanted to happen. The end result would be a much stronger Ubercart with a solid developer community and a core module package comfortable in its place as a support module (like Views, CCK, Hooker) while Ubercart itself would be remade into a full-blown application showcasing the power of Drupal as an e-commerce platform.
All that said, from this point forward, we're having to change our tack a bit. For my part, most people know me as the Ubercart project lead and are passingly familiar with the tale of Ubercart starting as an osCommerce replacement for the restaurant equipment sales company, Prima Supply, I worked for after college. After leaving there to join Commerce Guys, we arranged for me to continue leading the project while Prima retained ownership of various project assets and continued to contribute significantly to Ubercart development.
Unfortunately, we now find ourselves at odds over the future. I and many others feel the architectural and procedural improvements proposed by d7uc are necessary for Ubercart to evolve and to thrive. However, conflict surrounding the execution and governance of Ubercore arose with Prima that we were unable to resolve satisfactorily. This resulted in Prima, on the strength of project / trademark ownership, asking me to either stop the Ubercore Initiative or cede leadership of Ubercart, rename Ubercore, and move on. I still believe in the vision I originally outlined and cannot agree to the terms of continued Ubercart leadership, so I'm going to step down as the project lead of Ubercart and move forward with a renamed Ubercore. The goals are the same, the plans for an upgrade path from Ubercart 2.0 are the same, and the future of products on Drupal 7 is still bright.
Hopefully this can explain what one commenter has described as recent "lazy maintaining" of Ubercart. The last couple of months have been counter-productive all around. I haven't been an administrator on Ubercart.org for some time now, nor have I contributed significantly to the Ubercart code itself beyond quick bug fixes. It's unfortunate that circumstances developed as they did, and I definitely wish I hadn't let the Ubercore momentum flag in the midst of the conflict. While I expect Ubercart will continue to be developed, with a bit of sadness but plenty of excitement for the future, it's time for me to move on.
Thus the title of this post. A rose by any other name is still a rose, and Ubercore by any other name is still the best thing to happen for Drupal based e-commerce since the advent of Ubercart. For at least the foreseeable future, Ubercore will continue as Drupal Commerce, managed similarly to Drupal itself. We'll be working our tails off to make sure e-commerce on Drupal 7 shows just how awesome having fields in core can be.
I had a great time last weekend taking part in DrupalCamp Austin as a learner, a helper, and a presenter. I also enjoyed sharing an apartment and eating meat (and/or ice cream ) with my fellow Commerce Guys, Mike and Tim, and it was doubly fun to get reacquainted with folks I hadn't seen since last year's Drupalcon Szeged or Do It With Drupal.
As a learner at Drupal events, I tend to benefit most from sessions that discuss meta issues in Drupal development... how to grow your community or business, interact with clients, deploy and manage sites in the wild, etc. Ben Finklea of Volacci didn't disappoint with the weekend's opening keynote session, Building a Successful Drupal Business. He focused a lot on building good business processes for tasks ranging from managing sales leads to hiring. I missed out on Ben's SEO chat later but actually had the pleasure of joining him for church on Sunday morning, a rare opportunity on a Drupal weekend!
As a helper, I had fun doing a little bit of Drupal / Ubercart triage in the Commerce Guys room. Myself and a few other experienced Drupallers fielded questions and offered site building advice to various folks looking to iron out issues with their latest sites and prepare for upcoming projects. Aside from the communal eating of meat and ice cream (see above... and below), this is probably my favorite part of Drupal events.
Last, as a presenter I walked through the installation and configuration of Ubercart starting with the UberDrupal installation profile. It's not perfect, but it gets the job done and helped folks in the audience visualize how to use the sweet Acquia Prosper theme and leverage Ubercart's core systems. I was scheduled to discuss the ongoing Ubercore Initiative the next day, but most in the crowd were there because they had chosen Panels over Ubercart the day before. So, with a slight adjustment, I presented another Ubercart overview with glimpses of the plans for future development (like those in my last post on products). Those interested in learning more than that session afforded should hop in the #d7uc IRC meeting scheduled for Nov. 20 at 1 PM EST and keep an eye on http://d7uc.org.
On the recommendation of Todd Nienkerk of Four Kitchens, I drove the rental with Mike and Tim down to Driftwood, TX (nowhere near a beach) for some Salt Lick BBQ. They brought us plates piled with meat fresh from the open fire pit, treating our taste buds through our yummiest business planning meeting ever. Here's hoping there's a trip to Austin (for Drupal and/or BBQ) in my future!
This is the second in a series of posts outlining the ideas driving the Ubercore Initiative forward. We've had a lot of positive feedback from developers eager to dig into Drupal 7 to re-implement Ubercart's features like the awesome vision of products outlined below.
For starters, when we gathered for the Ubercore planning sprint in San Francisco, we began by nailing down the coresystems without which we wouldn't have an e-commerce system and which we needed to build out other essential features. The links above are our whiteboard scribblings based on Ubercart's current features, but the one we gave the most time to was the core product system. The resultant notes and discussion summarized in this post may be viewed here.
In short... it's gonna be awesome, and it's all thanks to Drupal 7's Fields API. Products are already great in Ubercart, but as one person recently tweeted, the implementation thus far has been a little awkward. Furthermore, from a data standpoint, it's been quite limiting.
How about a visual? It's my first go at Omnigraffle...
Currently, Ubercart defines a new product node type on install and gives you the opportunity to clone multiple new product node types called "product classes." These can then have default attributes assigned to them, which are customer selectable alterations to products at the point of purchase. For example, your merchandise store can have a t-shirt product class with a size attribute attached to it that your customers choose when adding the shirt to the cart. Each of these attributes can result in a price, weight, or SKU adjustment as well. There are also multiple product types defined at the module level, so that regular products function differently from product kits, each having their own add to cart form and functionality in the cart.
Problems come in you try to define just what a product is. Is it a node? Well, with SKU adjustments, aren't more than one products visible on a single node? How does Ubercart know those altered SKUs exist? There are implications here adversely affecting the development of stock control systems, sales and product reports, the shopping cart and order product handling, representing non-tangible products, and more. Happily, we have a plan we think will address these shortcomings without losing any of our current features.
So, what is the future of products? As fago hinted in his post, the future of products is entities, not nodes. We're separating "what a product is" from "how a product is displayed" and making products themselves top level, fieldable entities. Thanks to bundles, we'll still have multiple product types with various attributes, but instead of the current system where attributes are very loosely defined, we'll be moving more toward a product database where each individual product is defined and described by fields you add. Whereas before you might have had a single t-shirt product node with three variations thanks to a size attribute, you would now define a t-shirt product bundle and enter in the three variations with their SKUs and sizes set.
To handle product display, we'll be using a field that lets you specify which products to show on whatever the field is attached to (like a product display node) and how to prepare them for display. The products selected might all be listed individually for the user to select from a radio list. They might be grouped on their size field so that a size select list appears on the add to cart form as it does now. They might be sold all together at a set price as a product kit. We want this product display field to be flexible and to correct the difficulties people have in working with the current add to cart form.
This approach will clarify what a product is (a bundle of fields, including at least a SKU and a default title / price) and provide greater flexibility in how it is displayed (contributed field formatters, anyone?). Modules working with the product system, like stock control modules, will now have a unique product ID to refer to instead of a node ID with an array of attribute selections. We'll have better Views integration and end up with a product entry field that could attach an add to cart form to any entity.
Honestly, I could go on, but I'll stop here. This is already more gushing than I was planning to include in a single post. If you want to read more, hear what other people are thinking, and provide some feedback, you can check out the brainstorming thread, comment here, or keep an eye on the fieldable product meta issue as we flesh out the development tasks.
Top Notch Themes released the first beta of Fusion recently, a base theme that works in conjunction with the Skinr module to fulfill their vision for the future of theming and theme configuration for Drupal. They even have a theme in development that takes full advantage of the new base theme called Acquia Prosper that pretties up your site for selling stuff with Ubercart... in my opinion, their best theme on d.o to date.
However, I'm not just writing to share the good news about their release. In conjunction with their work, I have a little fun development of my own to share.
Friday evening, I buckled down to do something I'd been needing to do for a while... I updated the UberDrupal installation profile to install and configure Acquia Prosper out of the box. With that profile, you can have a functioning Drupal store in no time flat that even integrates with the sharpest contributed theme for the task! There are several modules and themes you have to have on hand before running installation, and I'll be writing those up and presenting how to use it at DrupalCamp Austin and Do It With Drupal in the next month.
Those interested in the future of Ubercart on Drupal 7 and beyond may have heard of the Ubercore Initiative. This recent development on UberDrupal was motivated in part by our goals for d7uc of improving the "packaging" aspect of what Ubercart is. We're looking to address the split personality of Ubercart as a component module vs. a ready-to-use e-commerce application. Right now, the project suffers from a lack of focus in the component module space, having incomplete Views support (requiring even a separate project to get the job done) and little integration with other major contributed modules (product image support notwithstanding). In the application space, it is limited in that there's only so much you can do through hook_install() and hook_enable(). We're hoping a bit of clarification and planning can improve it in both these areas to make Drupal the best e-commerce platform on the web.
This post will be the start of a mini-series with aggregate thoughts gathered from my notebooks, d7uc conversations, and chats on how we can improve Ubercart in the future through d7uc. I'll try to keep them short and to the point and toss in some pretty pictures and diagrams. There's been a LOT of good brainstorming so far, and I can't wait to make these plans a reality.
With high spirits and much excitement for the future, Lyle and I polished up and released Ubercart 2.0 today. Thanks to all those who took notice, and an even bigger thanks to the dozens of contributors who made the release a reality.
Features of the release should come as no surprise, as most people have been using Ubercart 2.x for some time based on the project's usage statistics and personal experience. In the final days, we did iron out issues related to file downloads, role promotions, product kits, and Views integration. We also paved the way for smoother European use in conjunction with the UC2 VAT project.
For those that are interested, continue reading for my reflections on the state of the Ubercart development process and code, including a community effort to realign both of these things on Drupal 7 with the Drupal 7 Ubercore Initiative.
The teaser... Ubercart, D7, Small core influence -> Ubercore (or, d7uc).
Well, we had our biggest release day yet with Ubercart, packaging up two new releases in one fell swoop. Lyle and I have been working pretty hard to take care of release blocking issues since we announced our Ubercart 2.0 Release Plans, and I felt inspired enough after today's Chick-fil-a lunch / code sprint to make sure we put out a new Ubercart 1.0 release as well.
The full release announcement is posted on Ubercart.org, and we've included the changelog in the release notes for both the 5.x-1.8 and 6.x-2.0-rc7 releases. On the 1.x branch, the changes include about 50 bug and typo fixes in addition to the inclusion of the core tax report module backported from the 2.x branch. The latest release candidate includes a similar number of improvements and bug fixes addressing issues related to attributes, stock, product kits, role promotions and file downloads, the price handler system, anonymous checkout, and more!
The best part of both releases is the high level of community involvement. Many thanks to the dozens of contributors to patches in both branches that have gotten us to where we are. Furthermore, thanks to some very active contributors, we're on target for full VAT support in Ubercart 2.0 with the UC VAT module. There are also maturing discount, coupon, and recurring payment systems all under active development in the contrib realm.
We're going to let this release candidate sit for two weeks time, during which we'll continue to address minor issues related to bugs, scalability, and usability. Feel free to pitch in through the project issue tracker on d.o. If all goes well, in two weeks time I'll be holding my baby girl and writing a 2.0 release announcement along with our plans for the future of Ubercart on Drupal 7 and beyond.
(For this interested, the quickest baby updates will come through Twitter. I already have plans to make sure she's very comfortable with Drupal from day one. )
A few dozen Ubercart users and developers flew into Denver, CO on Friday for Ubercamp 2.0 at Drupalcamp Colorado. Despite the various delayed flights and missed connections, a nice dinner and a bit of rest Friday night prepared us to show up at the camp eager to learn, share, and enjoy the geek-speak.
Seven Ubercamp sessions made it into the final schedule for the camp. For my part, on Saturday I was able to present the Uber-Update. I covered the current state of Ubercart (sooo close to 2.0!), plans for Ubercart 3.x, and the goodies I have in the works (like the checkout form builder and UberDrupal). Today, Lyle and I presented the Discount Framework, a solution for uber-flexible discounts using Ubercart's Conditional Actions and Price Handler systems. Someone was kind enough to post a recording of this session if you're interested.
Will Vincent (tcindie) is here to present his hotel booking module. Top Notch Themes and the team behind the U.S. Air Force Academy Association store shared with us some simple pointers for doubling conversions and sales with Ubercart (in one case, simply migrating to it!). Last but not least, Tim from Commerce Guys also presented two sessions on Ubercart's integration with Google Analytics and Views.
Beyond the sessions, I've had an awesome time hooking up with a lot of folks from the forums, many of whom I'm finally meeting for the first time. It's been a treat to meet many new (and regular) users and provide some fun on-the-fly consulting. Commerce Guys also flew in a couple of major Ubercart contributors, Erik Peterson (torgosPizza) and Tim Rohaly (TR) as a way of saying thanks for their efforts. We hadn't seen Tim at any events yet, so getting to hang out with him and give him due credit for his contributions has been a treat.
There's still more fun to be had in sessions, at the Ubercart dinner this evening, and in the code sprint tomorrow. I'll be sure to report on the success of the sprint, as we're eager to nail down the remaining issues for Ubercart 2.x. Feel free to pitch in wherever you are!
Ryan Szrama is a Drupal e-commerce developer for Commerce Guys, focusing on Drupal Commerce. Aside from his work, he loves his wife, his daughter, his church, and a good book over a white mocha.
You can find him elsewhere online at:
Find me at these upcoming events...
I'll be presenting Drupal Commerce at the following events and sponsoring some with Commerce Guys. Be sure to say hi!