A week ago we released Square for WooCommerce. Dozens of people worked on the product and after 18 months the launch was successful.
I'm documenting this process both for myself and for other product people who want to see how we at WooCommerce go about building a product.
Phase 0: Idea Stage
Every project starts with an idea. It could come from your users, from the market, or from a competitor.
In this case the Square integration was a inspired by one of our users. I do a lot of user interviews and one of our customers talked about his frustration syncing inventory after selling his products in person at a convention.
He articulated the problem so well I'll share it here:
There are many small stores that sell both online and in person through brick-and-mortar or traveling pop-up stores. Most small stores sell in both of those venues from the same stock of products. It is often difficult to track stock levels with sales coming from multiple systems. Yet accurate tracking and reporting is essential to re-order needed stock and avoid overselling.
Phase 1: Validate The Idea
It's insanely rare that you have a customer who can articulate a pain point like that. It's a great start but this is just one person and we can't afford to build a product for just one person.
We have to confirm that this is a pain point that a significant amount of our users have.
If you've ever been to a Startup Weekend before this is the point where they tell you to “get out of the building”. And If you have no resources that's exactly what you do.
Lucky for me WooCommerce has been around a while and we have some resources. We use UserVoice where users can create, up-vote, and comment on ideas. We had two ideas that confirmed this pain point:
Through our ideas board I sent a survey to 150+ users who were interested in a POS solution. 150 people isn't going to be statistically significant but it's enough to give us an idea which POS systems we should look into.
The results probably aren't what you expect.
Square isn't the most popular. It's the second most popular after PayPal Here. And there are two other players almost as popular as Square.
These results are actually a bit awkward. We were hoping Square would be the leader but it isn't so we have a decision to make.
- We could build the most popular option but we'd have to spend time building a relationship to use their private API.
- We could build Square and capture only ~20% of the market
- or We could build another solution and capture even less
None of these are great options. If the POS market is really big we could do something with 20% but it's a risk.
We also have to acknowledge that this survey data while easy to acquire isn't perfect. We're only talking to WooCommerce fans who voted on our ideas board. So a fourth option would be to spend money getting market data on POS solutions and combine that with our imperfect survey data.
Cue 3rd Party Developer
I make a habit of going to WordPress meetups and WordCamps and more often than not the relationships I make there yield really positive results.
Someone from my local meetup was building a custom Lightspeed integration for his client. I persuaded him to abstract the code and then sell it on WooCommerce.com (WooThemes.com at the time).
This was huge for us. We could dip our toes in the POS market without much risk.
And if we built Square we would cover close to 1/3 of all of the POS solutions for our customers.
We started building Lightspeed and it was launched in September of 2015 almost a full year before Square. The results weren't amazing but according to our data Square is 2X as popular as Lightspeed. The results were enough to get Square off of the back burner.
Phase 2: Scope
Now it's time to find out exactly what we features we need. I did a couple interviews with customers and came up with a pretty big list of features. You can identify problems with 5 interviews but you can't tell how important each one is. And we had dozens of possible features:
- Automatically sync products
- Manually sync products
- Customize which product data to sync (ex. some store owners have different prices online)
- Sync all types of products (simple, variable, external (affiliate), bundles, subscriptions, etc)
- Choosing a sync schedule
- Choosing how to sync products
- Automatically sync new products in WooCommerce to Square
- Automatically sync new products in Square to WooCommerce
- Importing orders into WooCommerce
- Importing orders in Square
- Use Square as a payment gateway in WooCommerce
And each of these can be explored and broken down into separate features. By this point we emailed all of the users who subscribed to the idea and put out a call to action on Twitter.
New #WooCommerce survey on integrating with @Square, your input would be most welcome! http://t.co/eFFVZoNbCX pic.twitter.com/FiOCSFiuy2
— WooThemes (@WooThemes) November 27, 2014
We got ~50 responses which again isn't going to give us super accurate results. But it's enough to rule out a few features. And to move a few more to the top of the list.
Phase 3: Partner Discussions
Now that we have a list of our most important features we can start drilling down into each feature and work out the nuances. It's also time to reach out to Square and see how we can work together.
When you're a tiny company no one wants to talk to you and it's best to just make your product. When you get bigger everything you do reflects on someone and different companies have very different standards.
WooCommerce has always been scrappy and we launch minimum viable products (MVPs). And this works with the developer audience that we cater to. They understand that we'll iterate and make things better.
Other companies might not want an MVP to reflect on their brand.
Ideally this phase is where we do two things:
- Align incentives – figure out who is paying who for what and make sure that everything aligns with our goals
- Define marketing expectations – state what are we both going to do to to make this successful
My job here is to inform the partnership team what features are a priority for us and which ones we can negotiate on.
The most important feature for both parties was definitely inventory sync. But there were a few that one party wanted that the other didn't want or didn't think was a priority.
A good example would be an OAuth like connection. Existing Square users don't have to use API keys. Every other integration works with OAuth (just clicking).
WooCommerce has very few OAuth connections. Most of our integrations require API keys so it wasn't a priority for us. This is where our partnership team can negotiate with a 3rd party and make something that works for both of us. After some discussion with Square we saw the need for having OAuth and we added it to our v1.
Phase 4: Build
Once a partner approves the integration it's time to build. We actually got started early building this product so that we could release it as quickly as possible.
This is where I stepped out and let the developers take point. They interacted directly with Square to work out all of the details.
There are always a few issues that come up. Some things that should have been easy turn out to be challenging and we have to reevaluate how many of them make it into v1. We could have released a real MVP but with a partner like Square we took a bit longer polishing everything and making sure our v1 was seamless.
Phase 5: Launch
After everything is built it's time to beta test while we get ready to launch. This is actually one of the things we really struggled with. We don’t have any process around beta testers so we had to resort to emailing back and forth. If you do any amount of work with beta testers it’s worth putting in place a process for them to submit issues and get updates to the product.
Getting marketing material ready for launch isn't too hard when you have the problem clearly documented. We turned the initial spec into marketing material and we turned the features into selling points.
Like the opener used in the release post:
With Square for WooCommerce, you can take payments online or offline through the same solution, keep your inventory updated, and sync product changes between WooCommerce and Square.
I wasn't very involved in this decision as our marketing team is amazing and they can take a product spec and turn it into blog posts, product pages, emails, testimonials, tweets, and everything we need to promote this product.
We even explained to some of the Square sales reps exactly what it does so when their customers ask they understand the difference between WooCommerce & every other e-commerce platform. This was part of the partnership deal. We needed to make sure that their sales people have what they need to be successful. It's something to keep in mind when you have a partner like Square.
My favorite description of a Product Manager comes from Josh Elman:
Help your team (and company) ship the right product for your users
And that's what this process does. It's long and drawn out but it's drawn out for a reason. Every step of the way is validated to minimize risk and make a quality product.
- We knew we would have happy customers
- We knew we'd have a happy partner
- And we knew we'd make money doing this
The product launched but it isn't done. Nothing on the web is ever entirely done and you shouldn't expect it to be. I think we did an excellent job with this product but it's just one tiny feature of WooCommerce. Now we need to put this much thought into our other features.
For anyone who made it all the way through: I hope I shed some light on how we make products at Woo and I hope you can take some of this back to make your own products! 🙂
Credit Where It's Due
I did a lot of the initial work for this product but there were dozens of people involved and it was a team effort. Props to this amazing team:
- Matt Cohen – for talking through some of the initial POS solutions with me
- Roy Ho – for building the product
- Nicole Kohler – for writing a lot of the marketing copy
- Joel Bronkowski – for working out the partnership details
- Aviva Pinchas – for setting the marketing direction and continued discussions with Square
- Kat Christofer – for writing all of the docs