Web Design, Development & Technology
Digital marketing strategy
Now that we’ve covered products, it’s time to jump into orders. We are improving many aspects of orders based on previous feedback. One such aspect is the concept of order statuses and states.
In Commerce 1.x orders have a status. The status indicates the current checkout page, whether the order is a cart, whether it has been paid and fulfilled (shipped), or maybe canceled/refunded. Statuses are sequential, and one goes after another. They are grouped by states, e.g. all checkout statuses belong to the "checkout" state.
The problem with this model is that one list of statuses indicates multiple concepts (checkout state, payment state, fulfillment state, etc). These concepts are parallel and trying to handle them sequentially creates bugs and confusion. For example, an order might be paid before or after checkout completes due to the async nature of certain payment gateways, or because the business is invoicing clients at the end of the month. Furthermore, the system doesn't enforce the requirement for the status to change sequentially; it can be set to any other status at any point. There is also no way to express rules such as “only completed orders can be refunded“ or “completed orders can’t be sent back to checkout”.
Our requirements for Commerce 2.x were:
- Remove the hazy distinction between status and state. Have only states.
- Split the order workflow into multiple workflows (order, checkout, payment, fulfillment) plus a boolean field indicating “is this order a cart“,
- Allow different order types to use different workflows (a t-shirt might go through different states than a DrupalCon ticket).
- Provide an API for expressing allowed transitions between states, allowing for better UIs and validation.
To solve this on an API level, we introduced the concept of a workflow, which is a collection of states (id, label) and transitions (id, "from" states, "to" state, label). We also created workflow groups, a way to group workflows used for the same purpose (order workflows, payment workflows, product marketing workflows, etc.). Workflows and groups would be defined in hooks in D7. Since this is D8, they are defined in yaml, just like menu links.
from: [new, validation, fulfillment]
These examples are shortened for brevity, the real order workflow will have additional states and transitions. Transitions can further be limited by guard classes such as this one.
The current state is stored in a special field type (StateItem), which references the used workflow, and acts as a state machine. It has an API for getting the allowed transitions:
$order_state = $order->getState();
print $order_state->value; // fulfillment
// Get the allowed transitions for the current state.
$transitions = $order_state->getTransitions();
// All transitions have a translatable label that can be shown in the UI (great for action buttons)
// Same as $order_state->value = 'completed';
A matching validator is provided that ensures a valid state was set, taking into account the previous value as well.
Putting it together
Since these APIs aren't Commerce specific, we have placed them into a newly created State Machine module. The README provides a more detailed overview of the offered functionality. As of this morning, the code is also up on drupal.org, with a beta release planned for next week.
With the help of this module, the future looks like this:
These are the default workflows, designed to be generic, and overridable per order type. Of course, their states and transitions might change over the future pre-releases. The most interesting workflow here is the order workflow. Let's look at the available states:
- new: Not been placed yet (in checkout or being edited by the admin)
- validation: Aawaiting validation (reviewing a fraud score, email verification by the customer, etc)
- fulfillment: Awaiting fulfilment (sending all of the relevant packages)
- completed: Completed and no longer changeable.
Some states might be skipped with Rules (or an event subscriber), if they're unneeded. We'll also have a cancelled state (from new/validation/fulfillment) and a refunded state (from completed).
In conclusion, we've dramatically improved a very visible developer API. We also left room for a possible UI in the future (in contrib). Next week we'll look at carts and order / line item types.
From: [Your Name]
Re: Website Redesign
[Our Agency] wants to redesign its website currently found here:
You have been selected as a vendor to respond to this request and would like to ask you to prepare a proposal to accomplish the task that includes timeline, cost, and deliverables. The following RFP includes a background of our organization and describes the purpose of the redesign, its desired functionality, and specific requests relating to the proposal. We understand that details may be subject to change upon vendor recommendation and / or research of more optimal solutions. In your proposal, please feel free to suggest alternatives where noted.
Table of Content
- Guide to this RFP
- Project Overview
- Project Goals
- Proposed Sitemap
- Scope of Work
- Technical Requirements
- Project Timeline
- Criteria for Selection
- Specific Requests
Guide to this RFP
Sample text: “Our expectation is that this document will convey our vision for the new site and specific challenges with the existing one. It includes a background section about our organization, suggests an outline for organizing the content of the new site, and desired technologies. In providing these details, our intent is not to convey that we have all of the answers in creating the best possible site. The ideal and preferred vendor will bring its own ideas and vision based on industry expertise, technical capability, and client relations, guiding us to incorporate our goals into that vision. Please feel free to email [email address] with questions or comments.”
Introduce your organization and the purpose of the RFP. State not only what you want the service provider to do but also why: what is the main “pain point” your organization has? If it’s a web site redesign, what about the current one isn’t working for your purposes? This is high level, so be brief. The details will come below and a birds-eye view is fine.
Describing your organization, what it does, and what you do. There’s a good chance we’ve never heard of you and may not be able to figure that out by visiting your existing web site (which may be why you need a new web site!) Additionally, tell us a little about your values. What makes you unique? Why does what you do matter?
Explain what you plan to accomplish or what outcome you have in mind. What are the three most important things that, if done well, you’ll consider the redesign a success? Do you know of any quantitative metrics that will help, such as increased sales or more newsletter subscribers or better-qualified leads?
Whom do you plan to serve with the web site? Which constituencies most rely on a successful web site, in order of importance? Sometimes, the audience you’re intending to reach or serve with the web site is not the same as your wider market. For example, a non-profit site might need mainly to demonstrate its programs’ efficacy to donors and supporters, not necessarily serve its beneficiaries. Similarly, a startup may be more focused on attracting investors than customers and an established business may only really care about their largest 5% of clients.
As much as the visual design impacts visitors' perception of your company is the information design: how well thought out is your major site sections and navigation schema? If you already have a good idea how you'd like to reorganize it, include that here. (If not, that's OK too -- that'll be one of the first things you'll do during the discovery phase with your vendor.) Moreover, not all the content from the existing site will be migrated: some of it may be outdated or irrelevant and much new copy will need to be written. What does make it over to the new site will have to be hand-entered into the content management system and be sure to let the vendor know whether that's something your team plans to do or whether you expect the vendor to handle it.
Scope of Work
Here’s where you want to provide more detail about the project. To the extent you can, describe all the services you know that you’ll be hiring a web team for. For example, with a web redesign project, you might be paying for:
- Project management
- Content strategy
- Information design
- Visual design
- Search engine optimization
- Front-end coding (HTML/CSS, animations)
- Back-end coding (CMS, 3rd party APIs)
- Custom software or app development
- Mobile device optimization
- Testing & quality assurance
- Paid search placement / advertising
- Software training
For a task like Information Design, maybe the deliverables are a site map and wireframes. For Visual Design, it might be source files in Photoshop or Sketch format. Something like Project management doesn’t really have a deliverable but it’s a non-trivial part of the process and doing it well is a valuable part of successful projects. Aim to be explicit about what you want delivered but it’s OK if you don’t know exactly what’s involved.
Additional things to include in the scope here, if applicable:
- Analytics Software
- Ongoing Support / Retainer
- Timeline for Completion
This is is a pretty broad subject but your goal here is to describe what limitations or requirements you know in advance. A website is, at its core, a technical product, so these are the details that may most materially impact the schedule and deliverables. Some examples of technical requirements include:
Do you expect to sell products or charge credit cards? A non-profit may only want to accept simple (or recurring) donations but retail merchants require shopping carts, user accounts, inventory control, and shipping calculators. You’ll definitely need to encrypt the transmission via SSL, which incurs an additional annual fee, though depending on the solution, this may be included.
Content Management Software
Do you require something specific, such as Drupal or Wordpress? Are you open to alternatives you may not be familiar with? (There are literally thousands of CMS packages.) The vendor may also have developed an in-house solution that will meet your needs well.
For custom web software development, is your system compatible only with a specific language, such as PHP, or Ruby, or Python? Do you have an existing infrastructure that the vendor needs to be fluent in?
Does your organization have one the vendor must use? If not, can the vendor select or suggest one? Web agencies almost always have a preferred web host.
How many visitors are still on old browsers, such as Internet Explorer 8 (released March 2009)? Do they need to be supported? To make a website perform or display in a legacy browser almost always requires additional development time.
Does your organization depend on 3rd party services for things like email newsletters, marketing automation, CRM / contact management, inventory control, intranet, accounting / Quickbooks, or inventory management? If so, be sure to include the ones for which synching / integration with the website is essential and describe how you expect it to work. For example, when someone subscribes to a newsletter, the contact should be added automatically to Highrise or Salesforce. If someone purchases a product and opts in, she should be added to our Mailchimp database, etc. Sometimes this functionality will be included out of the box and sometimes we’ll have to write something custom.
Do you require membership management on your site? This would be for allowing people to access special or hidden content on your site, perhaps after submitting an email address or paying to view a whitepaper. A simpler example would be password-protected pages that anyone can see with the same password and does not require a logged in account.
Do you require the website to be accessible to blind or limited-vision users? For websites whose audience skews older, larger default text and click areas will inform the design. Government & public sites often require Section 508 compliance.
Mobile Responsive Design
Do you require a separate mobile-optimized version of the website? Most smartphones have no trouble displaying the full site and that’s enough for many users. But a layout optimized for small screens and tablets can make a big difference in the delight and satisfaction of site visitors. This will require additional development time, which adds to the scope.
Yes, you have to include your budget, even if it’s your best guess. If you need to specify a range (“We’d like to spend $x,000 but are willing to go to $y,000 for the right proposal”), that’s fine too. Web sites are like cars: you can get good ones anywhere from $5,000 to $500,000 and, frankly, there is no price point for which you cannot find a tinkering undergraduate freelancer to put something together for you. Meanwhile, professional agencies will do professional work and the proposal will let you know the difference.
Finally, if you have a separate budget for assets like photographs, illustrations, software licenses, services, etc., be sure to include it. These don’t often end up being a substantial part of the overall cost but they can eat it into the final calculation. To extend the car metaphor, a mechanic has to buy the new part before installing it, which is separate from the cost to perform the service.
You may not know how long something will take to do, but you do know what timeline you have to accomplish it. Is there some hard deadline you need to hit, such as the launch of a new product or ad campaign? Maybe you have a big trade show coming up and need the site live by then? Be sure to mention any firm dates beyond the vendor selection process.
Criteria for Selection
You’re going to get a lot of different proposals back and each company will have different strengths, reputations, and capabilities. Some will compete on low cost; others on best quality; still others on more features. Figure out what you want in a vendor: cheapest option? Fastest delivery? Highest quality? Is a distributed team OK, or do you need every member to be local to your headquarters? Are sub-contractors OK or only full-time in-house staff? You’re balancing the expertise of the team with the limitations of your budget but in the end, you want the best work (and partner) that you can afford. No doubt several of these are typically important, so weight them according to what matters most to you.
Remember, the goal of the proposal you receive back is to evaluate the quality of vendor fitness for your project. Some questions you might ask the proposer to include in the reply:
- Examples of similarly-complex projects (to assess technical capability)
- Client references and whether email or phone is better (to assess credibility)
- Project timeline with major tasks and milestones (to assess process)
- Project budget by line item (to assess process)
- Plan for mobile / responsive design (to assess familiarity with current trends)
Finally, ask yourself how important these elements are:
- Technical expertise: Previous experience in building interactive, responsive sites.
- Communication and autonomy: Manage project independently in addition to teamwork; pursue and meet established timelines without monitoring/prompting.
- Partner: Act as a partner in the project build by involving our team but also taking the lead when needed.
- Flexibility: Adapt when needed to unforeseen project changes.
- Vision: Provide ideas for project beyond what is presented initially based on expertise in the field.
- User interface design: Ability to create user-centered design, making the user’s experience as seamless as possible.
Format & Proposal Details
Anything else unique to your project? Does the proposal need to be submitted in a particular format, such as MS Word or PDF? Do you require signed & notarized hard copies? Does it need to be single-spaced with no staples (we've actually seen this a few times, believe it or not)? Is it OK for the vendor to use freelancers or sub-contractors or does every member of the team need to be full-time? What's the timeline for submitting the proposals? Typically, there's a deadline for receipt, for selecting semi-finalists, for scheduling interviews and for final selection. Do the semi-final interviews need to be in-person or is remote OK? This is all standard fare but it can be easy to overlook.
Ultimately, how much detailed information do you require about the vendor? If you require granular details, such as the names, titles, and bios of the vendor's team working on it, be sure to ask. It often doesn't matter and for large teams, who will be available to work on the project may change depending on the vendor's production schedule.read more
4th Alexandr Pușkin street
Moldova, Republic of, Chișinău
163 Mihai Eminescu street,
25 Calea Eroilor street,
+373 (0) 22 923 442
+4 021 636 70 85