Everyone at Shopify works on product.
Product thinking might be the most valuable thing you'll take from your time here. Whether you're a product manager, a developer, a designer, or a Support Advisor, you have the opportunity to develop this superpower. When we say everyone at Shopify works on product, we mean it.
Our approach to building product embraces courage and action, and operates from a place of positive discontent. We find joy in discovering what's broken. We're eager to throw away what doesn't work. We know that there's beauty in simplicity. Some of these principles have been part of our DNA since the beginning. Others we've learned over time.
We codify this knowledge because our entire product needs to feel cohesive. This document is a guideline for each of us to understand how Shopify decides what to build, and how to build it. Master these principles, and you'll create products that change commerce for decades to come.
What to build
1. Build what most merchants need, most of the time
We've lived by this guideline since the very beginning. It has allowed us to determine what products and features we should prioritize, and where they should live. Only the most important things that most merchants need get to live within Shopify's core product (which is how we describe what merchants get 'out of the box').
As the number and diversity of our merchants grows, our entrepreneurs have less in common, and thus our core product needs to be simpler, not bigger.
All the other products, the features and tools that only some (not all) merchants need, are delivered through the Shopify App Store. Merchants can satisfy their unique requirements by using apps, whether they're built internally or by third-party developers. Over time, we expect more and more of our own features to be delivered in the form of apps. This will allow us to keep our core product lean, approachable, and simple. So if you're building infrastructure, you must design it to be extensible, or else apps won't be able to integrate with it to solve "everything else," and tons of merchants will be left without the features they need.
2. The Green Path
When we build a new product, we never know exactly where it will end up. We must know the problem it's solving, our goals and ambitions for it, and the general direction we're heading in. We should aim as high as we can — but it's not possible to predict exactly how to get there. What we can do, though, is map out steps along the way that advance us in the direction we know we need to go. There are different ways to climb a mountain, but everyone knows which way is up.
That's the Green Path: any work that gets us closer to our intended destination. The step-by-step journey towards long-term success. It's the path forward, mapped out in a series of small steps in the right direction.
Every product has its own Green Path running parallel to Shopify's. Whatever that path looks like, your product has to continually take steps in that direction. Sequencing is key. This path should be built into every project brief.
It's impossible to make perfect plans. But the Green Path allows us to map out some valuable next steps, so that we know we're getting closer to the point where we can provide value. The Green Path is a strategic map guiding our decisions every step of the way.
2.1 How to choose the right path
It goes without saying that your product should help fulfill Shopify's mission to make commerce better for everyone. But when you're faced with multiple options that all seem to fit the bill, how do you pick the right one?
When you come to a fork in the road, use one simple rule to make the most informed choice: take the path that leads to more entrepreneurs. Choose the option that allows us to enable entrepreneurship for more people.
Here are some questions to ask yourself when presented with multiple paths forward:
- Will one of these choices lead to more entrepreneurship in the world?
- Does one of these paths put Shopify closer to its stated goals?
- Will this decision unlock more options for the company down the road?
2.2 Aim as high as you can
"You can't forge great things at room temperature." — Tobi
When you aim really, really high, you'll find that there's actually less competition in that space. Almost everyone decides to aim lower because they believe it's more attainable — but that means there's actually lots of competition at lower levels.
If you, like Shopify, aim to holistically solve an entire problem, you might be the only one attempting it. If you say, "let's just make this one small area a little better," you will be one of many.
Every product we build should be as ambitious as possible without becoming a side quest. There are many different types of ambition we could reach for. Does this product have the potential to add millions of new merchants? Could it change the face of commerce? Does it allow us to align with strategic partners? Be sure to define specifically what your ambition is for your product, and incorporate it into your Green Path.
Once you've begun to build, get it working and ship it quickly. Momentum is everything. Iterating on real-world feedback is more valuable than expanding the scope of what you'd like to achieve (to become more ambitious). Also, set yourself up for success so that you won't have to narrow the scope of what you're building mid-way through development (to become less ambitious).
Ambition, of course, needs to align with reality. Teams need to know if their work has impact. They should constantly measure, reflect, and evaluate progress.
In the process, you may discover a more direct or elegant route to your destination. When this happens, have the courage to start over. Reject the sunk cost fallacy. When a clearer path emerges, reset your trajectory – even if it means starting again.
Doing your very best to avoid the ambition decay that comes from discovering just how hard it is to do what you set out to do. Building great products requires a certain exothermic-ness. The ability to inject heat into a project to build momentum, and prevent stasis. Focus on getting closer over time; on building energy by taking small steps along your Green Path. This will always lead you to something better than having compromised your ambition.
3. Is it infrastructure, a feature, or an experiment?
As you plan your product or feature build, be sure to identify your objective. What are you hoping to achieve? That goal varies based on the type of product you're building. Those types of products include:
Infrastructure: Most of what Shopify builds should be infrastructure. While often the least visible projects in Shopify, these are the most important for the long-term success of the company. They provide long-term leverage to Shopify, enabling us and third parties to build more features and experiments for years to come. Examples of infrastructure include Polaris, Locations, and GraphQL. Infrastructure work provides the raw material that is turned into value for our merchants. This value is delivered mostly by...
Features: Features are the type of products you'll see announced at Editions. They are something that all (or most, depending on their geographic region) Shopify merchants have access to. This doesn't mean everyone will choose to use it, but it's available as an option. Features add value to our merchants. We have lots of ideas for features, and sometimes it's hard to decide which will be most valuable. Sometimes, we only have a hunch of how useful they will be. In those cases, we run...
Experiments: If you are building an experiment, you need to have a hypothesis, and you need to throw the code away after you are done. The output of an experiment is a decision based on how that hypothesis worked out.
You will need to make tradeoffs to optimize along different dimensions based on the type of product you're building.
Type of product | Goal | Likely to optimize for | Likely to trade off |
---|---|---|---|
Experiment | Learning | Time | Quality |
Feature | Solve a merchant problem | A balance of time and quality | A balance of time and quality |
Infrastructure | Enable more features and/or apps | Quality | Time |
There is an artistry to finding the best trade-offs. These are all spectrums. They're not binary. Experiments benefit from sacrificing some quality in favor of time, and infrastructure projects are likely to double down on quality even if it takes longer.
With good people, you don't have to make these tradeoffs. Exceptional teams can find creative ways to deliver both speed and quality, regardless of product type. This is why we're intentional about talent. We don't settle for adequate – we deliberately seek out and hire only the best of the best. Once they're here, we immerse them in a 10x learning environment where they can thrive. The right people, in the right environment, transform what appears to be an either/or decision into an opportunity to excel across multiple dimensions.
When your product achieves its goal, you may need to re-assess the trade-offs you've made. For example, if an experiment is successful and you learn that a lot of merchants want what you built, you get to throw away your hacky code and rebuild it better. Never scale validated products on shaky ground.
How to build
1. Create great user experiences
A great user experience is not just nice to have; nothing matters without it. This doesn't mean merchants simply using our product. That is the floor. A great user experience means a product that is delightful, fast, elegant, simple, invisible, helpful, clear. When done well, this reduces the pain and toil that can tip an entrepreneur from success to failure.
But creating a great user experience is exceptionally hard. You need a full understanding of our software's capabilities. You also need to be able to think like a merchant, and know the way a merchant behaves. You need to understand their goal, ambitions, their fears, their level of technical understanding, and even their state of mind, to design an interface between software and people that makes sense.
We want our merchants and their buyers to reliably have excellent experiences when they use our products. Here are some guiding principles about what "great user experiences" means to us when it comes to product development.
1.1 Make the important things easy, and everything else possible
The best software products in the world always have the same thing in common: they turn something that was once incredibly complex into something approachable. We want to enable pro-level power while maintaining newbie approachability.
It's easy to make something complicated. It's much harder to make something simple. When you have something simple, you can make it powerful later. When confronted with something already powerful and complex, first we do the hard thing – digest the complexity of a system and deliver it to users in the simplest, most approachable way possible. One that requires the least cognitive overhead. Later, we can add more complexity and power for the much smaller and more advanced group of users that want and need it. Don't reverse this order. It's almost impossible to reverse later.
To take a Shopify example, let's look at how layers enable our Theme Editor to work for beginner, intermediate, and advanced merchants:
Beginner: When someone signs up for Shopify, they see a storefront, already set up and ready for them. Our defaults are really good. What comes right out of the box is what most people need. If the defaults aren't quite enough, merchants can go to the theme store and choose a different theme with a couple of clicks. Shopify's Theme Editor has one-click options for simple things like adjusting color palettes, implementing dynamic product filtering, and integrating video backgrounds. The potential for a merchant's store to match their brand's look and feel is important to most people, so we've made it easy for everyone.
Intermediate: Those who want to customize the design of their store (tweaking the layout or font size, for example) can use the Theme Editor to make those changes easily and immediately.
Advanced: If there's still more they'd like to customize, they can use Liquid, Shopify's open-source template language. With Liquid, merchants get tons of power — they can see the html and accomplish essentially anything they want. Or, they can hire a Shopify Expert to make those changes for them. With a framework like this, merchants can transform their vision into a storefront that rivals enterprise-level sites – without writing a single line of code. The amount of effort they need to invest is directly proportional to the magnitude of the changes they want.
It's so important that we keep Shopify approachable. Until the moment a merchant makes their first sale, all the work they put into setting up Shopify is of negative value to them. We demand both their time and money, so it would be disastrous to scare them away before they start to see benefits. People tend to give up when software makes them feel inadequate, or makes them feel as though they're not smart enough to be an entrepreneur. Let's do our very best to make sure our merchants never feel that way. Let's also do our very best to keep their onboarding experience, and every moment leading up to their first sale, as approachable as possible.
1.2 Build the advanced layer first
The ideal way to solve problems in the commerce space is through layered, highly technical, but incredibly accessible through the powers of UX design systems, where every piece is independent.
We want our merchants to experience Shopify's layers from simple to advanced, but in order to make good design and infrastructure decisions, we need to build it the other way around. We start with the advanced layer (a commerce data model and infrastructure for features), and then work backwards to create a simple, default product experience on top of it.
That means it's vital that you are aware of all the capabilities of the infrastructure in the product area you work on. If you're thinking of building a new feature or experiment and there isn't yet infrastructure to support it, you'll need to invest in building that infrastructure foundation first. This is non-negotiable. Strong infrastructure is what allows us to scale quickly and build reliable products that stand the test of time. Without it, we risk creating technical debt that will slow us down later.
However, when you deeply understand your area's infrastructure, you'll be able to find clever ways to make what's already there work for you.
2. Great UX and polish
Software should never make a person feel stupid. It should never make a person wait, and it should always make the user more powerful than they would be without it. This means we need to spend more time than you would ever think on polishing away all of the rough edges of our products.
No matter what you're building, spend a dedicated amount of time prior to launch making sure everything looks and performs as well as it possibly can. Remember that you only get one chance to make a great first impression, so let's not blow it. Someone may never try your product or feature again if they have a bad experience their first time. We don't want any 'broken experiences' for our users to discover post-launch.
2.1 Broken Window Theory
If you see a building with a broken window, soon you may notice all the windows on that same street are broken. People will assume that the act of breaking windows goes unpunished in those parts. It becomes the standard.
Similarly, people make natural assumptions about an environment based on a single example of something wrong with it. Any negative experience, or "broken window," that a user encounters can harm their perception of the entire product — even if the other 99.9% works flawlessly. Our merchants' trust in us erodes whenever they encounter a flaw.
Say a non-English speaker opens a Shopify store and goes through the first few onboarding steps in their native language, then comes across a Home card that's still in English. That's a broken window. If they encounter a bug, like a page that didn't load right, or a submit button that's unreachable — all of these things drain the trust battery and discount the overall quality of everything we've built. Our product is only as good as our worst user experience.
2.2 Fix broken windows, regardless of who broke them
It's better to build nothing than to build something shitty and leave it that way. When you encounter broken windows, it's your job to help fix them. Even if you had nothing to do with the broken window in the first place, it's our shared responsibility to prevent more merchants from encountering it and having a trust-eroding experience.
2.3 Raise the quality bar
Consider even the tiniest details, and make sure they create only the best possible experiences. Consider things like user interface (UI) animations or integration enhancements — these small details are what most people mean when they talk about "delight."
Shopify's quality bar goes beyond fixing broken windows, and involves anticipating what our merchants need. Simply being functional is not enough. Our products should be enjoyable to use, intuitive, and seamless.
2.4 Create a seamless experience
When someone signs up for Shopify, they should never be able to figure out the order in which we built our features, or which team built them.
That's a barometer of good software: the moment a product launches, it seems as though it's always been there. You can't reverse engineer it. You would never be able to tell that the Storefront Editor or Shopify Payments, for example, weren't there from the very beginning. Our history should never be obvious. Everything should weave together seamlessly, regardless of which team shipped it. Our product should be holistic, with each part interconnected purposefully.
Shopify merchants may be varied, but we should always provide a single, great experience that solves their problems. There's only one Shopify product. When we can't create a general experience, we should create a specific experience that solves the problem — but it shouldn't feel unfamiliar or like a whole new product.
Our approach to internationalization is a good example of this. When we encounter an area where Shopify doesn't work for a specific market, we extend the product. We localize with regional payment and shipping providers, channels, and languages, but the core product always remains the same. Everyone at the company works on the same Shopify. Our software is flexible enough that we can customize it for a special market without having multiple country teams working on entirely different products.
3. Maximize merchants' time
People don't wait for computers; computers wait for people. Time is precious – eliminate toil. Never waste a human's time with a task a machine could have done. Use AI and automate whatever should be automated. Reduce merchants' workload every chance you get.
Unlike most products, we don't want merchants spending hours in our tools. We want to get them back to what they do best – building their business and connecting with customers. If it's simple, make it invisible. If it's complex, make it clear.
3.1 Don't make merchants' decisions for them
There's one qualifier to this principle: don't surprise people. For anything more complex than autofilling fields, don't do things for merchants — rather, offer to do it for them. "We noticed you've been doing [task] a lot. Would you like us to continue doing that for you?" We don't make our merchants' decisions for them. What we do is offer them high-quality direction and guidance that they can choose to act upon.
Additionally, make Shopify a predictable and clear experience. Don't automatically implement custom user interfaces based on usage. If someone has 10 different Shopify stores, we don't want them to have 10 different-looking Admins. People should have the choice to change the look and feel of their dashboard, but we shouldn't make that choice for them.
There is a tension between keeping things simple and approachable and oversimplifying the information they need to be successful in their business. They should not need to be masterful in using Shopify, but using Shopify should not prevent them from mastering commerce.
4. Be data informed, not data driven
Shopify is a data-informed company, not a data-driven company. This is an important difference. It means that we use research and data to inform our choices, but not to dictate our decisions.
We expect teams to understand their problem spaces inside and out. Data is one important tool to help build context, but it should be held in balance with other key inputs, including intuition, judgement, and speaking directly to merchants and users
4.1 Collect data obsessively, use it wisely
While we are judicious in how we leverage data for decisions, this is not an excuse to overlook the careful collection of data. We must be obsessive about gathering data that shows how our merchants and their buyers use our products, while always keeping the privacy and security of that data top of mind.
If we don't collect this data from the very beginning, we lose our ability to replay the past and learn from it. If we do collect this data, it allows us to continue to move in the direction of our Green Path.
5. Product management is a balancing act
It's incredibly fun to dream up ways to solve our merchants' problems; to brainstorm the millions of ways we can help them succeed. That's what makes our work inspiring, but it can also lead us to be starry-eyed and idealistic about what is possible. The best product managers at Shopify operate from a place of positive discontent. They should lean contrarian. If we don't take joy in finding what's wrong with our product, we'll never gain the context or conviction needed to reach the ideal destination quickly.
The reality is that time (and our merchants' businesses) won't stand still and wait for us to build something perfect. Bringing better products to merchants speedily is critical to the value we bring them, and because of that, we will always need to make compromises.
Learning which trade-offs to make, and why, is a very valuable skill.
5.1 Dimensions of product trade-offs
Here are the most common compromises we evaluate each time we build a product:
- Quality: How much will we invest in the user experience? Are we looking for just simple, consistent experiences? Or are we aiming for blow-your-mind, inspired designs that build on our reputation as industry leaders? How much will we invest in the code? Does it just need to work, or does it need to scale and be infrastructure for many more features down the road? It's important to think of quality as a spectrum, and not something binary.
- Time: How long are we willing/able to invest before we need to see an impact? What key milestones or calendar events are we tied to for launch, if any? Are those arbitrary deadlines, or is it important that we ship within a certain timeframe?
- Scope: How deep of a feature set should we include before launch? What are the essential components that need to be incorporated, versus the nice-to-haves that could be abandoned or happen in a later version?
5.2 Minimum Viable Products (MVP)
How do we know when a product is "done"? When it does the job it was meant to do. It may only have about 80% of the features it could potentially have, but those 80% should work incredibly well, be the most valuable 80%, and solve an important problem affecting our merchants.
A common industry term for this is Minimum Viable Product (MVP), but that can lead us to think that poor quality is acceptable. It's not. Everything Shopify ever produces should work extremely well. No merchant should ever feel like they're using beta software, wondering when we're going to improve a half-baked product. Instead, they should be delighted by our MVP, and even more delighted as we continue to improve the product and experience over time.
As an example, the MVP of a car is a tricycle, not four wheels and a seat. Ship the tricycle, then the bike, then the motorcycle, then the car. All of these steps are along the car's Green Path.
Everything should be built to last and evolve, instead of just being "good for the first step." No code is meant to last forever, but all code should be able to fold into any new requirements; into the next step down your Green Path.
After we build
1. Know when to kill a product
"Going against inertia is an act of care." — Tobi
Even if we get everything right, some projects simply will not work. This can be due to internal factors like misunderstandings, leaving broken windows, or not using the right technical approach. It can also happen as a result of external factors, like the product market fit not being what we thought, or the timing being off. In any of these situations, a failed product is something we should celebrate. First of all, it was the successful discovery of something that did not work. This can add to our understanding of the world of commerce, which leads to better decisions down the road.
Secondly, it means that we are the kind of company that takes risks. Every company says that they're risk-takers, but doing something that doesn't work is a painful experience that most companies (very naturally) want to avoid. How many companies truly accept a 20% chance of success for a project that could produce a 10x return? These are odds that everyone should play, but very few do. Shopify is a company that takes these odds whenever we're presented with them. We should always celebrate these failures and shutdowns. These are the things that make Shopify better.
Right now, there's an assumption that everything we build will live forever, and therefore it does. This needs to change. Everything is going to die eventually, including our products. This is not a failure; this is the natural state of things. We need to learn to navigate what happens when a product abandons its Green Path, and heads in the wrong direction instead.
That doesn't mean we merely erase something and move on. For every product we decide to shut down, we need to create an historical record that we can refer back to. Why did we decide to shut the product down? What did we learn from the experience? What did this product do well? What should we never do again?
We should have no hesitation about throwing some things (the right things) away. Abandoning products is sometimes the best decision we can make.
Codify the things you've learned, and share those lessons with others. One failure is a learning opportunity. Not learning our lesson from previous mistakes is a true failure, and a waste of valuable resources like time and opportunity.
1.2 Case Study: Sello
When we shut down Sello (a mobile app allowing merchants to sell through social channels), it may have looked like a failure at first glance. On the contrary, it was one of the most important things we've done in recent years.
Why? It led to so many discoveries and learnings. We now understand mobile better. We discovered GraphQL (a query language for our APIs). We learned how to improve Shopify POS.
This experiment replaced every cell in Shopify's body. We are completely different because of it. Sello was not a failure, but rather a successful discovery of something that did not work. We can apply those learnings to make every other product better.
Here are few of the lessons we learned from Sello:
- Have a clear hypothesis you can focus on. Sello attempted to tackle three challenges at once: To create a new mobile tech stack, to develop a new mobile product, and to make Shopify mobile-first. Having multiple objectives slowed the team down, and prevented their hypothesis from being testable.
- Make sure people know what your product does. Most Sello users assumed it was similar to a marketplace or a Classifieds section, where they could discover other products. When users' expectations aren't met, retention rates are low.
- Beware the sunk cost fallacy. Despite low product adoption rates, the Sello team felt the need to continue because they'd invested so much time and so many resources into the project. We should always be ready to abandon projects or pivot drastically if we have evidence that an experiment is on the wrong track.
2. Think about subtraction, not just addition
Sometimes the way to make a product better is not by adding something, but rather subtracting. We should actively look for opportunities to make our products easier to use, even if that means taking things away.
Features that used to be important may prove to have a shelf life. When Shopify originally launched, it allowed each online store to have a forum. That was important in the pre-social internet time of 2006, but it became very clear that this was only a temporary need as the social landscape evolved. We sunsetted the forums feature and removed it. In this case, subtracting a feature actually made our product better.
2.1 Find the global maxima, not just the local maxima
Local maxima is a mathematical term, but the easiest way to understand it is to imagine you are climbing a mountain. You're trying to get to the top; the local maxima. Sometimes though, when you get to the top of that mountain, you see a much larger mountain behind it, the tallest mountain of them all – that's the global maxima. It's rare for companies to make a deliberate effort to climb a mountain that high. It's a painful exercise. But we're up for the challenge. We're not interested in limiting ourselves to the local maxima, we're looking to conquer the global one.
The problem is, when we're climbing a mountain, we don't always know which one we're on. We've committed to multiple projects that didn't allow us to reach the heights we thought they would, and we had to be willing to scrap all that effort, turn around, and start all over again.
To give a Shopify example, we were climbing Mount Online Store for a very long time. At some point, we decided to purposely walk back down that mountain, and climb Mount Multichannel instead. Before that, no one even knew Mount Multichannel existed. You had to be on top of Mount Online Store to even see it in the distance.
Any mountain takes energy to climb, so we might as well choose the biggest one. Otherwise, we're wasting our efforts.
Personal practice
One of Shopify's core values is to be a constant learner. These principles are a first step to incorporating product thinking into everything you do at Shopify and elsewhere, but it's not the end of the journey. How can you continue to become better?
The ironic thing is that we can become better product thinkers by thinking less about product, and more about people. We need to understand and learn from our merchants. What do they need from us? What is it like to be them? A strong sense of empathy is a foundational skill that allows you to continue to practice your product thinking.
At a moment's notice, you should be able to answer questions like, "How would a merchant perceive what we're talking about?" or "What would it feel like to experience this as a buyer?" Cultivate this skill.
Here are a few ways you can do that:
- Build a test store to learn (and play with) our product.
- Participate in a Bridge the Gap session. Shadow a Support Advisor and listen in on the front line.
- Meet with Shopifolk from other disciplines. Ask questions. Be curious about what they're building, and what they've learned.
This list is just a starting point. Work on your personal practice by doing anything that helps you gain insight into, and empathy for, our merchants.
Go forth and build
These principles aren't just guidelines, they're an invitation to create something extraordinary. Product success at Shopify isn't measured just by what you ship but by the momentum you create. We're playing a long game, and the decisions you make today shape possibilities years from now. Remember - we're not just building software. We're creating a world with more entrepreneurs.
Find joy in opportunity, and make things better by making things differently. Challenge the status quo. Be willing to take bets. And find the right set of tradeoffs.
Go forth. Build things. Make commerce better for everyone.