This year has been a wild ride with some huge ups and downs. We have seen some of our biggest successes and experienced some major challenges; we sold one of our flagship products and we, along with the rest of the world, have gone through a global pandemic.
As has been my tradition since 2012, I'd like to reflect back on some of the challenges, successes, and events of the past year for us.
No 2020 year in review would be complete without a mention of the horrible virus that has plagued our world this past year and beyond.
So much of what we have taken for granted changed practically over night. Entire industries had their roots ripped out and businesses were plunged into uncertainty, unknowns, and, for many, more challenges and hardships than would have ever been imagined in the worst case scenarios. Millions of people have lost their employment and, horribly, nearly two million people have lost their lives around the world.
I cannot possibly put into words the full impact that COVID-19 has had. It has been an ever-present and looming threat this past year. Not a single day has gone by where it wasn't at the forefront of our minds, like some kind of horrible shadow that could at any moment reach out and grab you from behind.
We have been extraordinarily fortunate at Sandhills Development to have our primary business operations barely impacted by the pandemic. In fact, in March and April we saw some significant surges as huge numbers of peoples looked to the internet to create new revenue streams for themselves or their businesses. As a result of that, our revenues grew sizably during the second quarter of 2020. For us this was certainly a bright light in an otherwise bleak prospect for the months to come, and it does not escape us just how fortunate we were while so many around the world were facing immeasurable suffering.
Our business did, however, also have the opportunity to see a very different, though sadly exceedingly common effect of COVID-19 on the well-being of other companies. Sandhills Brewing, our microbrewery project, has had a night-and-day different experience than that of Sandhills Development. Our revenue there instantly dropped by huge amounts and our staff constantly faced the fear and worry of infection due to our close face-to-face nature of the business. Our Sandhills Development team all work remotely and can easily (and naturally) self-isolate at home while still continuing their usual day-to-day work, but that simply wasn't possible at the brewery. I'll share more about our experience with COVID-19 and the brewery below when I talk more about 2020 for the brewery.
Unfortunately we are still very far from being able to put COVID-19 behind us, but the prospect of being able to realize one day in 2021 that we have globally beat this virus gives me a lot of hope. I am looking forward to that day more than any other of recent memory.
Codifying our values
Over the last 10 years, I have had the immense pleasure of working on a myriad of projects of varying importance to us as a company. Having worked in nearly every role of this company, as most founders do at some point, I have enjoyed building platforms, creating processes, envisioning futures, and solving problems. One challenge I had not tackled prior to this year, however, was attempting to answer two questions:
- what do we stand for?
- why do what we do?
For most of our history as a company, the answers to those questions have been very simple. One, we stand for whatever we each personally believe, AKA, our work and beliefs are entirely separated, or perhaps not intentionally joined. And two, we do what we do because it just happens to be what we found ourselves working on at the present time.
Those two answers got us a long way, but as our organization has grown in the last few years, it began to become apparent that we would at some point need to answer those questions for us as an organization, not just for each of us as individuals.
To answer those questions, we set out to establish a set of core values that we could then use to help guide us in all of the decisions that we make, no matter how large or small. These values were also to be used to help communicate our true motivations throughout our entire team, from the most tenured to the most recent hire.
True values that empirically represent who you are cannot be created from thin air. You cannot simply put words on a page and claim they have meaning, rather the penned values must be a real representation of the values that an organization already holds true, but perhaps without realizing how to express them in words. I found describing our true goals, our true motivations, and the things we really believe in to be incredibly challenging. It has never been difficult for me to sit and write lengthy opines or in-depth reviews (such as this), but succinctly phrasing the qualities and values that this company has been built upon was so very different. I think, perhaps, it took me longer to write these values than even my longest post ever.
A definite goal of these values was to help align our teams on what we are striving to achieve. Our teams work together almost every day, but without a clear value statement, the motivations and objectives of each person are likely to vary. By establishing the principals on which all decisions are made, we can better ensure alignment with one another.
Once established, we can use these values as our guiding principals that help keep our work and focuses aligned with what is truly important to us as a company of people. We aim to always keep these values at the forefront of all the work we do, whether it be work on a product, work with a customer, or work with a team member.
So here are the core values that we now use to guide Sandhills Development:
This is the one and only Earth we have and the conservation of its natural habitats and spaces is of the utmost importance. As a company we commit to investing time and resources into restoration, conservation, and preservation projects every year. We will help preserve and create more green spaces in and around our communities for wildlife and humans alike.
Give back time
Time is the universal shared commonality, but not all time is equal. We constantly aspire to give more time back to our team, our customers, and ourselves. We work to live, we do not live to work. By saying "no" to pointless meetings and striving for excellence in everything we do and build, we can give our customers, our team, and ourselves more time away from work. This means less time sitting on calls and fixing ongoing problems. It doesn't have to be crazy at work.
The Earth is a huge place. Embracing a digital and distributed-first ethos grants us tremendous freedom to explore this wonderful world. We will always adamantly protect our freedom to explore and live wherever each of us chooses.
We recognize that in our communities and in our society there is a severe lack of diversity. We also acknowledge that any company which does not actively go out of its way to help fix this problem is complicit in the perpetuation of the inequities plaguing our society. We are not going to look the other way. We are going to be a part of the solution.
Aim for longevity
Short term gains and shortcuts have cost the world greatly. We make every effort to aim for the long term and build sustainably. We believe that building for our future selves and future generations provide the best returns.
Assume positive intent
Communication is difficult at the best of times. Too often disagreements and resentment stem from misunderstandings and miscommunications. When a message is unclear in its intent, we strive to always assume positive intent and seek better clarification and understanding and not resentment.
Adhere to strict standards
We must hold ourselves and each other to the highest standards. When the quality of our work or our communication suffers, it is paramount that we address it honestly, openly and without malice. Failure to hold ourselves and each other to strict standards in all that we do is a disservice to ourselves, our team, and our customers. Without standards, we cannot have longevity and we cannot assume positive intent.
We believe that the relationships we have with our team, our customers, our vendors, and our communities are strengthened when we all communicate with honesty and transparency. We share the real finances and the real challenges because seeing the whole picture is vitally important to a healthy team that is honest with each other.
These values are not set in stone and they will evolve over time, but for today they are a real representation of what we strive for as a company.
Last year I shared how we spent significant time and resources on organizing for the future to ensure that we were able to grow and scale as an organization. While we have never aimed to go after growth by hiring aggressively, we are very intentional about making our company a place that can grow naturally and when the need arises, and this year we grew by six!
At the beginning of the year, we set out to hire three people: one for customer support and two for plugin development. Our previous hiring rounds had all been successful and the vast majority of people we have hired are still with us today. This hiring round ended up offering us a completely new and significant challenge.
In the first weeks of January, we published job postings to our careers page, shared them through our networks, and posted the job opportunities to a number of targeted job boards around the web. Per our past experience, we expected to get a few applications from familiar faces around the WordPress world and perhaps a few dozen from the wider tech community that were unknown to us. What we got, however, was something completely unexpected. An absolute deluge of job applications came pouring in. There were new submissions literally every few minutes for days on end. We were astounded and overwhelmed. After just a few days, we knew we had a challenge on our hand because there were so many. How were we possibly going to review all of them effectively and actually select valuable candidates from the list?
In total, we received over 700 applications in the span of just a few days. We had to disable our job posting significantly earlier than anticipated because the applications never stopped and we knew we would not be able to thoroughly review them all if we continued to accept new ones.
It took weeks to fully review all of the applications and perform initial interviews, but in the end we successfully made our selections. Each person we extended an offer to went through a written application, numerous back-and-forth emails, and three face-to-face over Zoom interviews: once with myself, once with our Director of Operations, Kyle Maurer, and once with either our Director of Technology, Chris Klosowski, or our Director of Support, Keri Jacoby.
Shayne Sanderson joined our customer support team to focus on helping our customers set up and use our products.
Lisa Canini joined our development team to work on Easy Digital Downloads.
Robin Cornett joined our development team to work on Easy Digital Downloads.
All three joined us in March, 2020.
Later in the year we found ourselves needing to further expand our customer support team as we tried to manage continual growth of our AffiliateWP product, which has seen a 52% increase in email inquiries in the last twelve months. While our hiring round at the start of the year was tremendously successful, it was also enormously challenging and time consuming. We knew, however, that we may end up needing to hire additional people throughout the year so we kept short lists of applicants from that round we were unable to bring on in March, just in case they were still interested and available when the need arose.
That led to Taylor Jackson joining us in July, 2020, to work on our customer support team.
Then a couple of months later we found ourselves needing to hire again, this time for additional development focus. Once again we went back to our short list of people we already knew we wanted to work with given the opportunity and extended two more offers in October,
Nina Pacifico joined our development team to focus on AffiliateWP.
David Beja joined our development team to focus on AffiliateWP.
We are so happy and thrilled to have each of these six wonderful people working alongside us each day. The work they are doing humbles me constantly and truly excites me for the potential our products hold in the future.
While our team grew significantly this past year, we also had to say farewell to two of our long time team members. One we had to let go and one was ready for a change of pace and focus and informed us of his decision early in the year. Neither of these departures was easy and they both cause so many questions and emotions to be raised internally.
In 2017 I wrote about having to fire two team members and the mental hurdles that go along with that process. The experience in 2020 was very similar but with one major added strain: COVID-19. In short, we made the decision to cease a team member's employment at Sandhills Development during a global pandemic and . . . that felt awful.
This is what I wrote in 2017:
Going through the mental exercise of firing someone is exhausting. You worry about how the person will react. Will they be angry, understanding, sad, unmoved? You worry about whether they will be okay in the coming months. Do they have funds set aside to get them through a period of unemployment? Do they have something else lined up? You worry about how the rest of the team will react to the news of one of their team members leaving. Will that make the others worry for the safety of their own positions? Will it cause rifts or resentment within the team? You worry about the company’s performance. Will firing this person harm your ability to deliver on promises to customers? You worry about what they will think of you. Will this person hate you for firing them? You worry about their family. Do they have children to support and will they be able to provide for their kids when their paycheck is cut off?Quote from Pippin's 2017 year-in-review
Every one of those sentiments applied to this experience, but they were magnified many times over due to COVID-19.
Firing is hard, but having a valued team member announce their own departure is, in many ways, as equally hard. The emotions are different but just as strong. You ask yourself where you failed and where you should have done better. You wonder if there was anything you could have done sooner to help the person be happier in their work. You look inward at all of the times you didn't do enough. You also, however, wish the person nothing but the best and do not begrudge their decision in the slightest. How can you be upset with someone that is making a positive change for themselves, especially when taking care of ourselves and our people is one of the core values of the company?
While we do not relish either of these experiences, going through the process of firing someone and amicably saying farewell to another makes us stronger. Each time we review, assess, and respond to the causes and effects of people leaving and we make the company better. We learn and adapt.
Equal pay for equal work
It has always been our goal to pay our team well and to beyond adequately compensate them for the time, attention, and care they put into their work here. We are, however, an organization of fallible humans with wide-ranging experiences and we, like so many others, are figuring out this whole business thing as we go.
As part of our 2019 initiative to organize for the future, we made a commitment to our team: ensure that everyone is equally paid for equal work, no matter their age, race, gender, nor any other defining characteristic. We also committed to ensuring that everyone's compensation level was set based on rules of a clear system that removes emotion, negotiation, and subjectivity from the equation. No one should be penalized for being a less skilled negotiator, so we set out to remove negotiation from the conversation.
We also committed to ensuring all members of our team are paid at or above nationally recognized levels for the the job they are performing.
Over the course of many months, we meticulously researched salary data sources and slowly built a system that we could use to determine what each person on our team should be paid. Through this process, a project led by Kyle Maurer, we learned where our fallibility as humans had affected people's pay and we periodically corrected these mistakes by issuing raises to many members of our team, and then we repeated this process several times through the year as we continued to develop and evolve our system.
We have always been transparent with our finances, but one aspect that we've always kept secret even from the team is what everyone is paid. With the roll out of our new data-based compensation system, we decided to change that. We now share the full salary ranges for all job roles we have at Sandhills Development with the entire team. This gives everyone on the team a more clear picture of the opportunities afforded to them for personal financial gain and helps each of them to be certain in our integrity as leaders of the company by showing clearly how each level in our organization is compensated.
Today, shortly after we have entered into the 2021 new year, I am proud to confidently say that our team is all compensated properly and that we have the data to back it up.
Aiming for carbon negative
Climate change is a very real and a catastrophically dangerous problem threatening our world, and it is the responsibility of every person and every organization to contribute to reversing the massive amounts of carbon that we pump into our atmosphere every day.
Sandhills Development is ultimately a software company, but we are a company made up of people that live on this earth, and so we have an obligation to do our very best to mitigate our impact on the health of the planet and, when able, to work proactively towards removing even more carbon than we produce.
Our goal is not to become carbon neutral, but rather to become carbon negative, meaning we take out more carbon than we put in.
Our commitment to becoming carbon negative potentially became a reality in 2020, but we will continue working to further the efforts every year because it must be done. This is a global effort but, sadly, only a small fraction of our earthly residents are actively contributing, so each of us that is in a position to contribute must try and make up the difference as best as we are able.
We made several significant steps in our goal of carbon negative in 2020.
First, we purchased 54 acres of tallgrass prairie to preserve into perpetuity as a nature reserve and carbon sink. Tallgrass prairies are able to sequester between 0.3 and 1.7 metric tons of CO2 per acre each year. The amount their roots store depends largely on the depth of the roots, which can be a factor of the age of the grasses. Many roots can extend more than 10 feet into the ground. Our prairie was replanted roughly 10 years ago so the roots, while deep, are still maturing. A conservative estimate tells us that this ground is able to sequester ~50-60 metric tons of CO2 each year.
Second, we invested $87,000 into the installation of a 36KW solar array on our company headquarters and Hutchinson brewery. This solar array will be capable of producing 70-74% of our annual power consumption and is estimated to offset 72,951.48 pounds of CO2 every year.
Our solar panels are hooked up to a public monitoring site so anyone can see what we're producing at anytime. We're currently in the lowest production season right now, but as we move towards summer we'll see our daily production rise significantly.
And our third major contribution was the planting of trees. We focused our tree planting efforts in two areas:
- Trees planted by hand on our two conservation properties
- Trees planted by larger organizations and funded by donations
On our two conservation properties, we planted nearly 100 trees, including white oak, black oak, burr oak, persimmon, maple, pecan, and apple.
We also planted 10,000 trees around the world through a donation to TeamTrees.
Everyone has different levels of impact they can make in the fight against climate change, but it is everyone's fight and collectively we need every inhabitant of this world to contribute in any way they can.
If you make money online and want to contribute to the fight against climate change but aren't sure how to best help, you might consider donating to tree planting organizations such as TeamTrees or initiatives like Stripe Climate.
Climate change is everyone's problem and it is all of our responsibilities to do what we can to reverse it.
We have held in-person company meetups every year since roughly 2015, with more formally organized events starting in 2017. When we started the year we were already hard at work beginning to plan our 2020 meetup but, as we are all now intimately familiar with, those plans had to change due to COVID-19.
We initially put all travel and meet up plans on hold but with the hope of being able to resume them in the second half of the year. By May, however, it became clear that the pandemic simply wasn't going to be under control any time soon and the prospect of our team being expected to travel was burdening some of our minds and causing undue worry and stress for most, so we announced that all travel plans were cancelled until further notice.
Our annual summit is one of the best weeks of the year and is a great opportunity for our team to get real face-to-face time that is so important. Our team works together every day but there is simply no substitute for face-to-face for getting to know each other better.
In place of our in-person summit, we did hold several virtual summits for departments and one for the whole company. These were very different than our typical events but in retrospect we felt they still offered significant value to the team, something we worried would be difficult to achieve. Our goal was not to just have everyone sit on Zoom calls for hours on end (what a waste that would be) but to get real value from the time spent. We wanted the events to be engaging, helpful, and something that everyone looked back on with general notes of positivity.
I very much hope that sometime in 2021 we'll be able to resume our in-person summits. At the present moment, the prospect is bleak, but we will hold out hoping as we progress through 2021.
Selling Restrict Content Pro
In September, 2020, I announced that we had sold Restrict Content Pro to iThemes and Liquid Web.
Restrict Content Pro was one of our earliest products and was definitely foundational to our success as a WordPress plugin company.
I shared the reasons why and some of the mental battles we went through during the negotiation process so I won't repeat those here. Our hope in selling Restrict Content Pro was to narrow our focus and improve the resources that each of our teams have by reducing the number of products they maintain.
It is still too early to tell for certain if we can claim success in the long term, but so far the results are looking positive. Our support teams are performing better than ever, our development is moving faster than it has in a long time, and our marketing team's workload is significantly less. All in all, our teams are more effective and spread less thin.
One of the challenges that selling Restrict Content Pro posed to us was our profit margin. The monthly revenue RCP brought in for us was roughly equivalent to the amount of profit we were making each month. Selling RCP then meant that it was very likely our profit margin would go to zero, or perhaps even put us into a monthly operating loss. We knew this going into the deal and recognized it as something we'd have to focus intently on post-sale.
We have always focused on keeping a large amount of cash on hand to allow us to weather revenue down turns, but we have not yet had to actually rely on our cash reserves to meet operating expenses. We thought the second half of 2020 might be the first time we dipped into it, but I am thrilled to share that our efforts were successful and there were only two months after the sale of RCP that we saw an operating loss; all other months were profitable. Our profit margins are certainly slimmer than they were prior to selling RCP, but we've already made good progress on rebuilding our margins to get us back closer to our goal of a 20% profit margin.
It was really hard to let go of Restrict Content Pro but now several months post-sale and as we start a new year, I am confident that we made the right choice.
2020 proved to be a year of excellent growth for AffiliateWP. A few quick stats:
- We released 63 updates to AffiliateWP and its add-on plugins
- We assisted 6,136 customers with pre-sales, billing, and technical support
- We took care of 10,149 support, billing and pre-sale tickets
- We grew annual revenue by 24.5%
- We hired three new people to work exclusively on AffiliateWP
The AffiliateWP team is led in tandem by Andrew Munro as the Product Manager and Drew Jaynes as the Lead Developer and together they were able to release some really fantastic improvements. Especially of note are:
- A beta of our new Affiliate Dashboard experience
- Dynamic coupons in version 2.6
- Gutenberg blocks
- Sales report in version 2.5
On September 1, 2020, we introduced a price increase for AffiliateWP. We added $50 to each price level and also discontinued our Ultimate lifetime license option. Prior to this change, we had not adjusted our pricing in more than three years, with the last price change happening in March, 2017.
This price change went very smoothly and had substantial impacts to our August revenue. Prior to September 1, our average monthly revenue for 2020 was $118,896, but in August we brought in $155,850.00. This increase was due primarily to our announcement of the price change ~30 days prior to the actual change going into effect and customers choosing to take advantage of the lower price.
After the price change was implemented, we also saw a significant growth in revenue, both from the product having a higher price point and from customers locking themselves into the Ultimate price option before it was removed on October 1. This resulted in revenue of $166,264 for September.
Once everything settled, we were able to better see where we would be at. While we won't know for certain for several months, we feel pretty confident in saying that our price changes have sizably increased our monthly revenue for AffiliateWP.
Today AffiliateWP is the largest single revenue stream for us and is receiving the most growth focus and attention as we look towards the years ahead.
Easy Digital Downloads
There were some highs and lows for Easy Digital Downloads in 2020. First and foremost, I'd like to highlight a change that I'm really happy to be able to share.
All women development team
As of September, 2020, the development team for Easy Digital Downloads is now not only led by a female developer but is also entirely a team of women. Our core Easy Digital Downloads development team is:
- Ashley Gibson, Lead Developer
- Lisa Canini, Junior Developer
- Robin Cornett, Junior Developer
There are other developers that contribute to Easy Digital Downloads whom are not women, but the three above are the ones with a sole focus of Easy Digital Downloads whereas our other devs primary focus is one or more of our other products.
Ashley took over the role of Lead Developer at the conclusion of our sale of Restrict Content Pro, of which she was previously the lead developer. Ashley was hugely responsible for nearly all of the major improvements (and small ones!) made to Restrict Content Pro since we relaunched it and now she is leading all development initiatives for Easy Digital Downloads, including the long-awaited version 3.0.
Today the team is moving faster and doing better quality work than ever before.
Easy Digital Downloads 3.0
One of Ashley's primary focuses towards the end of 2020 and for the beginning of 2021 is completing EDD 3.0, which our team has been working on consistently for the last three years.
It has taken a very long time to get to this point, but I am happy to finally be able to share a real date for the first beta release of Easy Digital Downloads 3.0: February 16, 2021.
We will be announcing the beta on our development blog, so make sure to subscribe to email updates there if you are interested in testing the beta version and seeing the update progress reports.
Here are just a few quick stats from our Easy Digital Downloads project:
- We released 50 updates to Easy Digital Downloads and its add-on plugins
- We assisted 3,950 customers with pre-sales, billing, and technical support
- We took care of 7,333 support, billing and pre-sale tickets
- Our revenue from plugin sales decreased by 6.86%
- We hired two new developers to work exclusively on Easy Digital Downloads
We did see a revenue decrease from plugin sales for Easy Digital Downloads for the first time in 2020. That was disheartening, but also understandable as EDD been at a challenging position for the last several years. For one, we are seeing tougher competition than ever before, and second, we have not been able to push out as many improvements to customers as we used to release due to our intense focus on version 3.0. We are very excited for 3.0 to be released because, along with all of the major improvements that go out with it, we'll be able to get back to frequent update releases for new features, new integrations, and bug fixes.
While we did see a decrease in plugin sales, we were able to grow a new arm of our incoming revenue through affiliate agreements with partner businesses. One of these agreements was responsible for bringing a little more than $100,000 in revenue for Easy Digital Downloads in 2020. With plugin sales and affiliate revenue combined, our 2020 Easy Digital Downloads income increased by ~10% over 2019.
Easy Digital Downloads is the second place contender in the WordPress eCommerce space, though we will have to work hard to maintain that position. The competition today is more fierce than it has ever been. That's a challenge we recognize and welcome as competition helps to make us all better by forcing us to innovate and improve. We're far from finished with Easy Digital Downloads and 2021 has bright prospects with the release of EDD 3.0 and so much more.
Three years ago we set out to re-build and re-launch Sugar Calendar and transform it into another leg of our metaphorical table. In other words, we set out to build it into a successful product with a large user base that brought in significant revenue for us.
We made a lot of progress on that goal in 2020 and we had some successes, but we also had some challenges.
Here's a few quick stats:
- We released 28 updates to Sugar Calendar and its add-on plugins
- We assisted 193 customers with pre-sales, billing, and technical support
- We took care of 265 support, billing and pre-sale tickets
- Our annual revenue increased by 52.94%
Overall, we have not been able to move as quickly as we would like on this project. While our development team works on the product every day, there are some enormously difficult problems that arise when you are building event management tools. Mainly, anything related to recurring events is supremely hard to build in efficient and sane ways that scale well.
One of our major focuses this year has been to build out advanced recurring events, which we teased a year ago. At the time of writing that teaser, we anticipated the add-on would be finished within a month or two. That ended up being a highly incorrect estimate as we are now a full year later and we're still not done with it. The reason being primarily that the feature set we aimed to build was just so much more difficult than we thought it would be. Also while continuously working on Advanced Recurring, we also needed to maintain momentum and release several other add-ons, updates to the core plugins, and continue to grow the user base.
While we may not have succeeded in launching Advanced Recurring yet, we did succeed in other ways with the release of several other pro add-ons and numerous major features, including:
We also launched a newly designed website in March, 2020, that was done in-house by Sean Davis. Our previous site had been pieced together by myself and was little more than an MVP that did the job, though not well. With the launch of the new site we were able to establish our complete brand and present Sugar Calendar in a way that we're really proud to show off.
At the end of 2019, we set a goal of reaching $10,000 / month in revenue for Sugar Calendar. Did we make it?
Not even close. Our average monthly revenue for 2020 was $1,246 per month.
It has been disappointing to not see us achieve more financially with this product, but we're not done yet and we're still optimistic that we have a chance to successfully grow it into a viable product. So much of our time in the last two years has been focused on building the foundational elements of Sugar Calendar and creating the majorly important feature sets. Now that we have finished most of that and we can truthfully say that we have a top quality, flexible, and powerful product to offer that can compete well with all or most of the other event management tools available, I am confident we'll succeed in growing our customer base. This project has actually been a great reminder of the slow grind that most product and service companies go through when they first launch.
WP Simple Pay
In April, 2019, we completed our acquisition of WP Simple Pay and now, more than a year and a half later, I can say that this was a really good move. We've managed to grow the product significantly and it has become a major contributor to our company's revenue, and it's a product we love working on and making better.
One aspect that makes WP Simple Pay awesome to work on is that it interacts solely with the Stripe.com API and is not burdened by trying to support any other payment processor. Stripe has proved over and over that it is the best way to process credit cards on the internet and it hands-down has the most reliable and easy-to-use API. Our other products have always needed to integrate with other payment providers, such as PayPal and Authorize.net. Being able to depend solely on Stripe is wonderful and frees up so much stress and avoids the challenges of attempting to build a multi-platform payment tool.
When we first acquired it, WP Simple Pay was bringing in ~$20,000 / month. This last year it averaged $36,540. Our WP Simple Pay team is still small, with one full time developer, one full time support, and one part time product manager, but even with a small team we've seen some impressive improvements and growth for the product.
Here are some quick stats:
- We released 46 updates to WP Simple Pay
- We assisted 2,537 customers with pre-sales, billing, and technical support
- We took care of 3,258 support, billing and pre-sale tickets
- We grew annual revenue by 42.49%
It was a great year for WP Simple Pay but we also encountered a major challenge, detailed below.
A major fraud case
At the end of March, 2020, we and our platform were suddenly attacked by scammers that had found a way to exploit our system through a vulnerability in Stripe's Connect platform.
I first began to be suspicious that we had a problem when I logged into our Stripe account for WP Simple Pay and noticed a ~$6,500 reserve had been placed on our funds. This stood out to me as very odd because we had never once seen Stripe put holds on any of our accounts and over the last 8+ years we have moved significant volumes through our accounts, so why was there a hold placed now?
My gut told me something had to be wrong so I started digging. Before long I found a several records in our transactions history that looked like this:
There were a bunch of them, ranging from a few dollars to hundreds of dollars each. These transactions indicated that Stripe was holding us liable for balance issues on our customers' accounts, likely due to fraudulent activity on those accounts. This would make sense if we were a platform like Shopify or Gumroad but with the way our products work with Stripe, we are not liable for problems on the accounts connected to our products. At least we're not supposed to be . . .
I reached out to Stripe to clear up the issue but was told this was normal for platforms, something I adamantly disputed and explained why, but support was slow to respond and offered little help. This was frustrating and left us feeling helpless.
When we first discovered the problem, we were being held liable for just about $6,500 but over the next few weeks the amount being pulled from our account continued to grow as more and more reserve transactions showed up. I watched mostly helplessly as the total damages grew from $6,500 to over $47,000, at a rate of $1,000-$2,000 per day. Still Stripe's support team was barely responding nor acknowledging there was a problem.
We couldn't sit still and just watch more and more money vanish into the ether and so we worked to track down and identify exactly what was happening and how. If we didn't act, we'd be out hundreds of thousands of dollars very quickly with no way to stop it. It took about a week but we ultimately found the source of the problem, which turned out to be a flaw in Stripe's Connect platform that was enabling malicious actors to commit fraud that platform's like ours were then liable for. I won't detail exactly how the flaw was being exploited in case there are still vulnerable platforms out there, but I will say it involved debit cards and the Instant Payout feature.
Once we had tracked down what was happening we were able to push a hotfix to all of our sites that prevented the scheme from working and doing more damages. We also then detailed the exploit and sent it to everyone we could think of at Stripe to try and ensure they got our message.
It took a few more days but Stripe did acknowledge the problem was real and shortly after that the API was patched. Then a few weeks later new controls were added to the Connect settings screen inside of Stripe so account owners could have more control over which type of accounts can be created on their platforms.
A month after the initial reserves were discovered on our account, we were able to wrap up the saga with an email that came from Stripe:
The team has reviewed the activity, sorry about the delay. You won't be affected going forward with platform reserve balances from these fraudulent accounts. We are also issuing a credit of $47,381.85 that will be heading to your balance today. The attached .csv has more details into the account tokens and balances that will be reimbursed.
The team really appreciates you bringing this to our attention.Final acknowledgement from Stripe regarding our fraud case
Going through this was stressful but it was also an excellent learning experience and a great reminder of a few key points:
- This is a great example of why we always keep significant cash in the bank. Imagine a scenario where we only kept enough cash to cover payroll for the next pay period. This case would have obliterated our ability to pay the team. Before the problem was solved, more than $45,000 was withdrawn from our bank account.
- Trust gut instincts, at least far enough to determine if your gut is right. Upon seeing the reserved funds, I almost brushed it off as nothing. This problem could have grown so much bigger if I hadn't dug in right away.
- Fraudsters are often super clever.
This fraud case was definitely one of the most memorable periods of 2020 for me.
Introduced at the tail end of 2019, our Payouts Service grew and evolved tremendously in 2020.
First, some quick stats:
- Incoming payout volume, including fees: $517,300.54
- Websites connected: 1,008
- Affiliates registered to be paid through the service: 5,169
- Total payouts submitted: 767
The Payouts Service was built to provide an easy-to-use solution for AffiliateWP customers that struggled with the process of paying their affiliates. I know that we have executed on that goal supremely well and today our Payouts Service is hands down the simplest way to pay affiliates for AffiliateWP users.
Sean Davis was solely responsible for the design and buildout of the new website.
We first introduced the Payouts Service with an extremely raw site that was little more than a landing page with an information dump on it. That site worked well enough to convey the most important information but it was far from something we were proud to invite customers to. It did, however, serve its MVP purpose well enough. Now though we can proudly send customers to the Payouts Service website and feel confident that they are shown a great experience that truly represents the service we're offering and who we are as a company.
Designing and building the website also included a complete design and face lift for every screen and interaction our customers and their affiliates have with our service. It was an extensive project that took months to complete, but the results were spectacular. Take a look at our Screenshots page to see the website owner and affiliate experience.
Our processing volume for the Payouts Service has grown significantly and I anticipate we'll increase it from $500,000 per year to $1,000,0000 - $3,000,000 per year before the end of 2022.
This service is different than anything we've built before and has a very different revenue model. The processing volume is pretty significant already, but our take-home revenue is still small. In 2020, the Payout Service made us ~$15,000 in revenue from processing fees. There is a long ways to go before the service is self-sustainable but I'm very happy with how far we've come and with the potential for the service.
Perhaps one of the most interesting aspects of the Payouts Service, when compared with our other products, is how revenue growth occurs. For each of our other products, growing our revenue by $10,000, for example, requires us to gain a certain number of customers. With the Payouts Service, however, that growth can occur with a single customer simply because that customer has larger payout processing needs. We have seen this happen several times already as we've on-boarded some customers that process $100 per month and others that process $20,000 - $30,000 per month.
The revenue model means that our potential to grow this into a major contributor to our revenue is significant. And what's more, growing this service exponentially has very few of the same struggles that growing our other products has because the service is mostly passive and self-serve. While customers do still open tickets to ask questions, it is far less common for customers to experience technical issues that require significant time commitments from our support team.
Ultimately time will tell how well the Payouts Service works for us, but I'm very confident it will be a major component of our long term strategy and success.
Did it happen? No.
In fact, something else entirely happened.
Our development team was making tremendous progress on the platform and we were getting closer and closer to having a real product ready to launch, and then COVID-19 became the new normal.
The global pandemic of COVID-19 caused us to reconsider where we were focusing our time and whether it was worth it to be making major investments into products that we hoped would one day generate revenue.
In March and April, in the early days of the pandemic, we did not yet know what kind of impact we'd see to our business. Would our sales revenue plummet? Would it go up? Would some or all of our team get sick or worse? We just did not know. In light of that, we felt it only prudent to ensure that all of our resources were focused on the projects that were bringing in cash. Sellbird wasn't generating any cash and was little more than resource sink at that point, so we put it on pause.
When we put it on pause, our intention was to only do so temporarily. About the same time we were also working on completing the negotiations and signing of the Restrict Content Pro acquisition agreement. As I've mentioned before, one of the major motivators of that deal was to narrow our focus. It turned out that temporarily pausing Sellbird also had a similar affect: it narrowed our focus.
And guess what? We loved it! It was incredibly refreshing to work on and focus on fewer projects, and so with that, I can say with certainty that Sellbird is officially done. It's a project we've archived and do not at this time have any intention of returning to. There is some sadness there, but more than anything, there's relief.
2020 has been a year of absolute mental exhaustion and having fewer things to focus our time on has proven to be a majorly positive note.
Owning and operating a brewery in 2020 gave us a very interesting perspective on the economic impacts of the COVID-19 pandemic. Our primary business with WordPress and online services were not negatively impacted (purely financially speaking) by COVID-19, but the brewery business was a completely different story.
I remember the exact day that the pandemic's potential impact became a reality. It was a Sunday in March and the feeling in the air went from pretty well normal to palpably fearful, and that is the same day that the revenue for the brewery plummeted. Our business depends on foot traffic coming through our doors and the traffic vanished.
The nine months that followed were nothing short of exhausting, from every angle. We constantly faced the worry of keeping our team and customers healthy while struggling to keep revenues up enough to meet payroll and other operating costs.
As the virus spread like wildfire through the world, and huge segments of our population ignored science and dangerously politicized a public health crisis, we faced constant burnout as our teams struggled to cope. Nearly every other week someone on the team was facing a potential exposure or confirmed infection by the virus, resulting in extra time and strain for the rest of the team.
We constantly faced a catch-22. In order to keep everyone employed, we needed customers coming to the building, but we couldn't celebrate having customers in the space and nor could we celebrate when we were busy because those times posed an increased risk to us and our customers alike. We also could not mourn when we didn't see customers because staying away from others is precisely what we needed to happen in order for us all to put this pandemic behind us, but to make money and meet payroll, we needed customers in the building. To beat COVID-19, we needed everyone to stay home. Being in this constant state of contradiction of emotions was detrimental to our daily well-being.
This is an experience that anyone that works in retail or hospitality can likely empathize with, but it was also an experience completely foreign to most everyone that works remotely or in tech.
Throughout this pandemic we have globally recommended or enforced that people stay home, which was absolutely necessary for us to beat the virus, but at the same time staying home was detrimental to businesses around the globe.
Seeing the impact of COVID-19 from the perspective of a small, local business that relies on foot traffic gave me a new level of respect for the extreme challenges that lawmakers face around the world. I think people often over simplify issues and point out what they believe the clear policy should be, but the reality is that policy paths are rarely simple nor straight forward. They are nearly always gray, never black and white. Throughout this COVID-19 pandemic, we've really seen two major opinions:
- Lock everything down and enforce people staying home
- Leave everything open and let the people make their own decisions
Both have significant challenges associated with them and being at the helm of a digital business alongside a physical customer-facing business has made me dwell much more intently on how quick we are to believe one choice is fundamentally better than the other, and not just in pandemic times but all times.
2020 was tremendously challenging for the brewery, but we made it through and we have built the foundations that will be important for us as we work through the years to come. Really after COVID-19 it's hard to imagine a more cataclysmic event that could impact us more, so surviving this pandemic (not to suggest it's over by any means) gives me a lot of hope and excitement for the future potential of our brewery operations.
Since our first real estate purchase in 2018, we have aimed to increase our real estate assets each year. We added one property to our portfolio in March of 2020, which I previously mentioned above.
We have been working for the last few months to complete another commercial property purchase and had intended to finish it before the end of 2020, but paperwork delays caused by COVID-19 resulted in that being unrealistic. The purchase is still pending and we hope to complete it soon, at which point I'll likely blog about it.
Real estate has been a side venture for me with Sandhills for the past few years and there are several motivators driving it.
First, I want to continue to diversify our assets and income streams. If 2020 and COVID-19 has taught me anything, it's the increasing importance of not having all of our eggs in one basket. This past year would have been tremendously more difficult, for example, if Sandhills Brewing was our only venture. By continuing to diversify, we help to insulate ourselves against unexpected catastrophes.
Second, I want to continue to build our rapport with banks, financial institutions, and lenders. Physical real estate is something financial institutions deeply understand and recognize as collateral. If the need ever arrises for us to seek significant lending, I want to have that option available to us and sizable real estate holdings will help with that.
Third, I refuse to not be part of the solution to climate change and habitat destruction. While conservation properties have very little value or benefit to the two points above, they are deeply important to me and to the world, so we will continue to acquire as many as we can.
2020 overall was good for us in terms of revenue, but it was also very different than any year prior for two reasons.
First, we sold one of our major products, resulting in a large influx of cash from the sale and also causing our monthly revenue to drop by ~$40,000.
Second, we grew our Payouts Service with a very different revenue model than we're accustomed too. For legal and taxation purposes, all processing volume for the Payouts Service is counted as revenue for our company, but we only keep a small fraction of the processing volume for ourselves.
This section will be a little different than in previous years as I am not going to share the exact revenue numbers for Sandhills Development. This is simply because I am bound by legal contracts to not disclose the purchase price for Restrict Content Pro. Unless something unexpected happens next year, I'll be back to sharing full revenue numbers in 2021.
In total, we brought in $4,331,814.12 in revenue from plugin sales, affiliate agreements, services, real estate, and payout processing. And on this amount, we ended the year with a net profit of $232,201.
We strive for a 20% profit margin, but in 2020 our profit margin was significantly lower for four main reasons:
- We invested heavily into the company through payroll increases and hiring
- The acquisition of RCP lowered our monthly revenue from plugin sales by ~$40,000, which is roughly what we averaged in profit each month
- The Payouts Service majorly increased our gross income but it operates with a very slim profit margin, resulting in an overall decrease of our margin percentages
- We invested significantly into conservation efforts and attaining carbon neutrality
- We intentionally prepaid a large number of expenses before December 31, 2020, in order to offset tax liabilities caused by the RCP sale proceeds
Excluding proceeds from our sale of RCP, our total revenue broke down like this (amounts rounded):
- $3,721,934 from plugin sales
- $11,325 from real estate
- $200,079 from affiliate agreements
- $35,106 from misc activities and services
The revenue numbers above are all for Sandhills Development and do not include any revenue from Sandhills Brewing because we operate that as a separate entity.
For Sandhills Brewing, our total revenue was ~$531,000. Between our two locations that revenue was divided as such:
- $171,994 from our Hutchinson location
- $359,005 from our Mission location
Our goal for 2020 was to surpass $600,000 in beer sales. We didn't quite make it, but considering the impacts of COVID-19, achieving $531,000, an increase of 19.33% over 2019, is something we're still very pleased with.
Our revenue goal for Sandhills Development was to surpass $4,000,000, and we did it! Our gross revenue increased by 24.39% in 2020.
There is a lot to look forward to in 2021 but here are a few of the achievements we are targeting at Sandhills Development:
- Grow the Payouts Service processing volume to $1,000,000+ / year
- Release Easy Digital Downloads 3.0 and increase its plugin sales back to $1,000,000+ / year
- Expand our Payouts Service to products beyond AffiliateWP
- Grow WP Simple Pay to $50,000 / month average
- Reach $5,000 / month in revenue for Sugar Calendar
- Make AffiliateWP our first $2,000,000 / year product
- Acquire our second commercial real estate property
- Acquire a third conservation property
- Definitively measure our carbon footprint and reduce it further
- Grow our team with two or more strategic hires
Thank you to everyone that was a part of our 2020 and I want to wish every one reading this a terrific 2021! Any and all comments and questions are welcomed below or, if you prefer, via email.