On deeper review of the code, and in anticipation of some heavy lifting I'll be doing tomorrow and Friday to support a variety of quoted shipping services, I think we have a vocabulary problem. It's going to serve us well to clearly define terms, so this is my attempt. The approach I'm taking will be to consider the most complex scenario using terms that are sufficiently abstract to encompass the simpler shipping scenarios. Some terms are very loosely defined across the web, but others are more standard terms in the shipping industry.

  • Shipping method - this is perhaps the most fluid term with no canonical definition. The one that seems to best serve us, though, is "the method of determining how a product will be shipped to the customer." This can include:
    • "flat rate" shipping, where a flat rate is chosen from a list of predefined rates based on some factors of the order
    • "weight based" / "quantity based" shipping, where a rate is calculated based on some base rate increased by unit of weight or quantity
    • "USPS" / "FedEx" / "UPS" or other methods where rates are calculated for a variety of services available for the order; these companies should be technically referred to as carriers
  • Shipping service - this is the actual service selected by the customer for any given shipping method. This is a technical industry term used by all the major carriers that I've seen. Even though it seems odd at first, I think our simpler shipping methods should adopt the "service" language, even when our "services" are locally defined flat rates and calculations.
    • If I'm using flat rate, I might define a flat $10 rate for "Standard shipping" and $20 rate for "Expedited shipping" with a $0 rate for "Free shipping" on orders over a certain total. In this case, the service is standard, expedited, or free, and Rules will determine which services will be available for a particular order.
    • Using locally calculated rates will be similar to the above. The service will correlate to some configuration of the calculated rate (say a base price + $1 per pound).
    • With USPS, this will be something like Parcel Post, Priority, and Media Mail. With FedEx / UPS, it's other names like Ground, 2nd Day Air, Overnight. You can see a hefty lift of services per carrier here at ConnectShip. Note also that UPS lists everything it does under a services heading and that USPS even calls its various flat rates services.
  • Shipping quote - this term is used to refer to a shipping rate quoted by a carrier or calculated locally for any given service. This term is a little funky, because in the case of flat rate, we are really just displaying the flat shipping rate (no calculations going on in determining the rate), so it's not like we're giving the customer a "quote" based on the contents of their order. I think the term is generally understandable, but we might consider a Magento inspired use of collect rates instead of calculate quotes since there may in fact not be any calculation going on.

Why does all this matter? We really need to be consistent in how we refer to these things in both the code and the UI. A shipping method should not be conflated with the services defined for or returned by the shipping method. A shipping quote variable shouldn't be referred to as shipping or shipping costs but as a shipping rate.

Additionally, we need to take a hard look at the use of CTools and our interaction with the checkout form. A user isn't selecting from among various shipping methods but rather shipping services. The merchant needs to be able to define conditions for the availability of shipping services, not shipping methods. This is the way I presume flat rate is working right now - you can define as many flat rates as you need in the form of separate rules, thus accommodating the scenario I mentioned above in my shipping service example. However, if I want to add a carrier quoted shipping method, I'm stuck. Conditions would be applied at the method level when they should be applied at the service level. Accordingly, I also need to have a unique price component per shipping service instead of method (which is impossible with the current plugin architecture).

I'm sorry for not sorting this out earlier, but I think it's important to get it right now. And please don't take my comment here as critique of the module's development; I understand carrier quoted shipping rates are more or less prevalent in different markets and that this module was developed with flat rate type shipping in mind. I don't fault anyone but myself for not trying to sort out terminology much sooner. : )

Comments

rszrama’s picture

Issue summary: View changes

More information.

rszrama’s picture

Issue summary: View changes

More information.

rszrama’s picture

Issue summary: View changes

More links.

guybrush’s picture

subscribing

hedley’s picture

Great work and sounds like a good idea to set these out, maybe your write up could be the start of documentation to explain these?

In the U.K as I'm sure you know we use the term 'Delivery' for the most part, so some sort of configurable labels would be ideal, this may also benefit people wanting to change 'service' to 'options' or whatever. Although it could get confusing if someone wanted to change their 'Shipping service' to 'Shipping method'!

jantoine’s picture

subscribe

Mixologic’s picture

While I can't speak to everybody's use cases, I recently implemented a site that had probably one of the most complicated shipping requirements Ive had to manage. In the interests of posting something in the "most complex" area, consider the following:

1. They sell Magazine Subscriptions, Back Issues, Merchandise, Accept Donations, and Monthly memberships

  1. Magazine subs pricing is dependent upon the shipping destination address (US, North America, or World), but there is no specific shipping charge.
  2. Back Issues are charged a per issue charge that again, depends on the destination (free for US, 2$ for Can/Mex, 6$ international).
  3. Merchandise is shipped via USPS, but fulfillment is *sometimes* performed by staff, and *sometimes* performed by an external fulfiller (Books are in house, but Apparel is printed on demand by the external fulfiller) - Therefore the shipping quote itself sometimes needs to support being split between the different locations, yet appear to be one combined amount to the customer
  4. Monthly Memberships entitle the user to a free subscription to the magazine, so despite the fact that its not really a shippable item, we need to collect shipping data to be able to send the magazine - and the lowest level of membership is not available to international contributors
  5. They offer gift subscriptions, and wanted the ability to sell multiple gift subs in one transaction, meaning multiple ship to addresses
  6. Donations need to collect a mailing address so that a donation receipt can be officially mailed, but only if the customer wants it
  7. Finally they wanted to be able to have multiple shipping destinations for one order (i.e. buy a hat, back issue and subscription for your mom, and a apron and back issue for yourself - This part they didnt get

I think this particular clients scenario demonstrates that the eventual destination of the delivered goods can impact *more* than just shipping, and that orders would ideally have a one to many association with deliverable addresses.

Additionally, in our scenario we're really aggregating together several "quotes" into one. What term should be used to indicate the aggregate cost of all methods?

For the curious: http://bitchmagazine.org/store

mac_weber’s picture

How about changing "Shipping service" to "Shipping service type"?
It sounds more meaningful and it may avoid misinterpretations.

rszrama’s picture

Hmm, "service" is the term used by carriers, so I'd want to stick with that. There will be a 1:1 correlation between a shipping service and a rate for any given order, so I don't think it would make much sense to call it a type of something.

For an example, check out this USPS form where you can "Select Flat Rate Service."

rszrama’s picture

Version: 7.x-1.x-dev » 7.x-2.x-dev
Status: Active » Fixed

I've just posted up a full rewrite of the Commerce Shipping modules that incorporates the name changes I devised above. There is as of yet no upgrade path from 7.x-1.x, so we'll need to work that out before putting up a final release.

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

Anonymous’s picture

Issue summary: View changes

Link improvement.