Warren Buffett for Startups, Andrew Wilkinson

Tiny co-founder Andrew Wilkinson is emulating the world’s most famous investor, closing deals on tech companies in short order.

July 27, 2020

Andrew Wilkinson has sold only two of the 20-plus companies he has founded. In a different world, one where private equity groups and hedge funds didn’t act like the private equity groups and hedge funds they are, he might have sold all of them.

“There have been many times I would’ve sold,” Wilkinson says, “but they made it too complicated.” 

It seemed like the buyers only cared about numbers on a spreadsheet. Once a deal was reached, after three to four agonizing months, they wanted to re-negotiate. There was a culture clash, too: The private equity guys wore Patagonia vests over starched button-downs and seemed to look askance at the startup uniform of a t-shirt and sneakers. 

“I started thinking,” says Wilkinson, 33, “maybe there’s an opportunity to become the buyer I wish I could’ve had.”

A Rare Buyer

In 2015, Andrew Wilkinson, with Chris Sparling, formed Tiny, an investment firm that buys middle and early stage internet companies in a process that lasts days or weeks — not months. When Tiny purchases companies, its goal is to place them on a path toward sustainable success. It doesn’t chop them up and sell them for scrap or install new leadership that would conflict with their previous culture.  

The strategy parallels Warren Buffett, who is famous for his handshake deals. Wilkinson, who’s still best known for designing Slack’s interface, may never reach Berkshire Hathaway levels of market capitalization, but he’s already shaken up a corner of the startup world by becoming the rare buyer who thinks like the young entrepreneurs who want to sell their companies the same way they built them — quickly and by going against tradition.      

I spoke with Wilkinson over the phone last month while he looked out the window of his office on a pleasant summer day in Victoria, British Columbia. He’s lived in the 92,000 population town on an island just south of Vancouver for most of his life, and the location outside of the Silicon Valley bubble suits the unorthodox style he’s taken in his Tiny pursuits. But during high school, bored and frustrated after his father moved him away from Vancouver, Wilkinson wanted nothing more than to flee to a bigger city. Instead, he got away by starting a tech news website. 

On MacTeens.com, Wilkinson and other writers reviewed Apple products and shared gossip about the company. For Wilkinson, who managed staff and negotiated ad deals, it became a full-time job, and he recalls barely passing high school. It was worth it: He met Steve Jobs — “like meeting Jesus,” he says — at an Apple event in New York and cornered him for a 10-minute interview. 

Like many Jobs acolytes, Wilkinson’s goal was to land in Silicon Valley. But he didn’t have enough money, and he was stuck in Victoria once again, funding his planned move by freelancing as a designer and developer. It became clear that greater profits awaited if he started doing business as an entity more formal than Andrew Wilkinson, so he started MetaLab in 2006, finding a niche spending three to four months building interfaces for numerous startups. Kavin Stewart, then the product manager at Offermatica, was Wilkinson’s first client. He could tell MetaLab wasn’t a formal, established company, but he had a good feeling about Wilkinson, whom he recalls meeting on Craigslist. “He represented himself well,” Stewart says. “If you can find undervalued talent you’ll generally just take a bet.”   

By its second month, MetaLab was making $30k in revenue. The first year it made about $250k on a 50%+ profit margin. Revenue doubled in the ensuing years, and MetaLab has continued to see 20-30% annualized gains. The company has worked with Facebook and Google, and in 2013 it built Slack’s interface.

How quickly did MetaLab grow into a power? Uber, then known as UberCab, requested MetaLab design its original website but balked when Wilkinson quoted $5k. “We were too expensive for them,” he says.   

Like this story? If you want access to dozens of other case studies and industry deep dives, just like this, you can try our premium subscription Trends for just $1. With Trends, you get access to reports just like this, access to several databases with proprietary information, access to a network with the smartest people we know, and more!

How Tiny works

For about a decade, Andrew Wilkinson used the profits to start new companies. After selling one of those companies, Pixel Union, in a drawn-out process, a friend suggested he read the Buffett biography Snowball for ideas on the next evolution for his career. Wilkinson knew it would be unsustainable to continue starting new businesses and was surprised by what he learned about Buffett. The famed Omaha investor had purchased more than 65 companies, usually at below the market rate and at a much quicker pace than traditional private equity groups. When Buffett bought an airplane parts manufacturer in 2015 for $37m, he spent about 25 minutes speaking with the CEO before making an offer. “We basically do no due diligence,” Buffett said. “Our due diligence is basically looking into their eyes.”  

the two-page Berkshire Hathaway offer letter to National Indemnity Company, via Berkshire Hathaway 2014 annual report

Copy of two-page Berkshire Hathaway offer letter to National Indemnity Company, via Berkshire Hathaway 2014 annual report.

Wilkinson, remembering the numerous attempts to buy his companies, thought quick-moving tech entrepreneurs would be even more open to a streamlined acquisition process than the traditional railroad and restaurant companies Buffett scoops up. Realizing the opportunity, he and Sparling formed Tiny in 2015.  

Four years later, they are the only two employees, though they also use lawyers and accountants to finalize sales. Drawing from the high eight figures in revenue that Wilkinson’s companies make, Tiny buys internet companies that have been in business for at least three to five years and that make profits ranging from $500k to $15m.

More specifically Tiny looks for companies that have good products rather than features that can be easily replicated by Google, Facebook or other giants and those that are providing a positive service for the world. Their list of acquisitions includes several companies that make it easier for people to find work or to improve workflow. Lately, Tiny has been purchasing podcasting-related companies like Castro and DoubleUp. Wilkinson typically asks just a few cursory questions before making an offer:

  • What is the revenue, profit, and growth rate?
  • Is there a management team?
  • Do the current owners want to stay or go?

Tiny’s first acquisition was Designer News and then Dribble, both of which are online communities for designers.  Since 2015, Tiny has purchased about 10 other companies (it has also invested in dozens more), including the podcast app Castro, in 2018.

“When Andrew got in touch,” recalls Castro co-founder Pádraig Ó Cinnéide over email, “it was a simple DM on Twitter: ‘Hey dude. I’m a huge fan of Castro. Have you guys ever thought about selling or finding a partner to help grow (or take money off the table)?’”

That DM arrived on Sept. 2. Ó Cinnéide flew to Victoria on Sept. 24. They agreed to a sale via email Sept. 27. After a few weeks of lawyers and contracts, Castro had officially been sold to Tiny by Oct. 17.

Previously, Ó Cinnéide and co-founder Oisín Prendiville had talked to a radio organization about a sale. It fell apart after more than six months of discussion. “I really didn’t want the distraction created by months/years of taking calls, digging up metrics, and feeling like we had an uncertain future,” Ó Cinnéide says.

Sometimes, as with Castro, Tiny makes initial contact. Often, however, Andrew Wilkinson, who has a large following on Twitter and Medium, receives emails and DMs from curious tech entrepreneurs. Even as his firm grows bigger, Wilkinson anticipates he’ll be just as easy to reach — and to finalize a deal with.  

“Warren Buffett is still doing this and he has, what, $200 billion?” Wilkinson says. “I think we’ll be able to keep doing this for a long time.”

Like this story? If you want access to dozens of other case studies and industry deep dives, just like this, you can try our premium subscription Trends for just $1. With Trends, you get access to reports just like this, access to several databases with proprietary information, access to a network with the smartest people we know, and more!

Get the 5-minute roundup you’ll actually read in your inbox

Business and tech news in 5 minutes or less

100% free. We don’t spam. Unsubscribe whenever.


How'd Bezos build a billion dollar empire?

In 1994, Jeff Bezos discovered a shocking stat: Internet usage grew 2,300% per year.

Data shows where markets are headed.

And that’s why we built Trends — to show you up-and-coming market opportunities about to explode. Interested?

We’re shooting our shot…

Start your mornings with The Daily.

Get the freshly baked 5-minute newsletter every day except Saturdays.

It’s filled with the most interesting stories on business, tech, and the internet.

And written for innovators of every industry. Sign up for the news that slaps.

If you don’t like it, unsubscribe any time. Privacy policy.

[email-submission-form redirect-to-home="true" button-text="Join Free" include-trends-opt-in="true" id="main-signup-form" fail-url="" success-url="https://thehustle.co/signup" default-source="thehustleco" default-campaign="home"]
<script type="text/javascript"> var onloadCallback = function() { grecaptcha.render('verify-your-humanity', { 'sitekey' : '6LdddrcZAAAAALyttpvOqiwQGwq5BNhgDz4tMQGE' }); }; function getCookieValue(a) { var b = document.cookie.match('(^|[^;]+)\\s*' + a + '\\s*=\\s*([^;]+)'); return b ? atob(decodeURIComponent(b.pop())) : ''; } function setHiddenFieldValue(wrappingDiv, searchParams, className, utmName, cookieName, defaultValue) { var el = wrappingDiv.getElementsByClassName(className)[0]; var existingVal = el.getAttribute('value'); var newVal = searchParams.get(utmName) || getCookieValue(cookieName); if ((existingVal == null || existingVal == '' || existingVal == defaultValue) && (newVal != null && newVal != '')) { el.setAttribute('value', newVal); } } function setHiddenFieldValueFromUtm( wrappingDiv, searchParams, className, utmName, defaultValue ) { var el = wrappingDiv.getElementsByClassName(className)[0]; if (el != null) { var existingVal = el.getAttribute("value"); var newVal = searchParams.get(utmName); if (newVal != null && newVal != "") { el.setAttribute("value", newVal); } } } function initForm() { var wrappingDivs = document.getElementsByClassName('email-submission'); wrappingDivs.forEach(wrappingDiv => { var sp = new URLSearchParams(window.location.search); setHiddenFieldValue(wrappingDiv, sp, 'funnel-source', 'utm_source', 'funnel_source', 'thehustleco'); setHiddenFieldValue(wrappingDiv, sp, 'funnel-campaign', 'utm_campaign', 'funnel_campaign', 'home'); setHiddenFieldValue(wrappingDiv, sp, 'funnel-medium', 'utm_medium', 'funnel_medium', ''); setHiddenFieldValue(wrappingDiv, sp, 'funnel-referral', 'ref', 'funnel_referral', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-a', 'a', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-c', 'c', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-o', 'o', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-oc', 'oc', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-e', 'e', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-f', 'f', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-r', 'r', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-t', 't', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s1', 's1', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s2', 's2', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s3', 's3', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s4', 's4', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s5', 's5', ''); var error_message = getCookieValue('funnel_error_message'); if (error_message && error_message.trim() != '') { var error = wrappingDiv.getElementsByClassName('funnel-error')[0]; var prev_email = getCookieValue('funnel_email'); error_message = prev_email + " is not valid. Please try again"; error.innerHTML = error_message; error.style = ''; } }); if (false) { initCaptchaFormV2(); } } function initCaptchaFormV2() { var v3RecaptchaResponseEl = document.getElementById('recaptcha-response-v3'); v3RecaptchaResponseEl.parentNode.removeChild(v3RecaptchaResponseEl); var wrappingDiv = document.getElementById('main-signup-form'); var subForm = wrappingDiv.getElementsByClassName('email-submission')[0]; var captchaVersion = document.createElement('input'); captchaVersion.class = 'g-recaptcha hidden-input'; captchaVersion.type = 'hidden'; captchaVersion.name = 'g-recaptcha-response-v2'; captchaVersion.value = 'true'; subForm.appendChild(captchaVersion); var captchaEl = document.createElement('div'); captchaEl.id = 'verify-your-humanity'; subForm.appendChild(captchaEl); var captchaApiScriptEl = document.createElement('script'); captchaApiScriptEl.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit'; captchaApiScriptEl.async = true; captchaApiScriptEl.defer = true; document.head.appendChild(captchaApiScriptEl); } function appendCheckboxes() { var optInDivs = document.querySelectorAll('.trends-opt-in'); optInDivs.forEach(el => { if (el.getElementsByClassName('trends-opt-in-checkbox').length < 1) { var checkbox = document.createElement('input'); checkbox.setAttribute('class', 'trends-opt-in-checkbox'); checkbox.setAttribute('type', 'checkbox'); checkbox.setAttribute('name', 'trends_opt_in'); var label = document.createElement('label'); label.setAttribute('class', 'trends-opt-in-text'); label.textContent = "Yes, I'd like to receive updates on market opportunities before they explode from Trends by The Hustle"; el.appendChild(checkbox); el.appendChild(label); checkbox.click(); } }) } window.addEventListener('DOMContentLoaded', (event) => { var funnel_email_cookie = getCookieValue('funnel_email'); if ( (true) && (funnel_email_cookie != null && funnel_email_cookie != '') ) { window.location.replace('/home'); } initForm(); if (true) { appendCheckboxes(); } }); </script> <div class="email-signup" id=main-signup-form> <div class="funnel-error" style="display:none;"></div> <form class="email-submission" action="https://cms.thehustle.co/api/v1/contacts/wordpress_create" method="post"> <div class="email-form-wrap"> <input class="funnel-source hidden-input" type="hidden" name="source" value="thehustleco"> <input class="funnel-campaign hidden-input" type="hidden" name="campaign" value="home"> <input class="funnel-medium hidden-input" type="hidden" name="medium"> <input class="funnel-referral hidden-input" type="hidden" name="referral_code"> <input class="funnel-fail-url hidden-input" type="hidden" name="fail_url" value=""> <input class="funnel-a hidden-input" type="hidden" name="a" value=""> <input class="funnel-c hidden-input" type="hidden" name="c" value=""> <input class="funnel-o hidden-input" type="hidden" name="o" value=""> <input class="funnel-oc hidden-input" type="hidden" name="oc" value=""> <input class="funnel-e hidden-input" type="hidden" name="e" value=""> <input class="funnel-f hidden-input" type="hidden" name="f" value=""> <input class="funnel-r hidden-input" type="hidden" name="r" value=""> <input class="funnel-t hidden-input" type="hidden" name="t" value=""> <input class="funnel-s1 hidden-input" type="hidden" name="s1" value=""> <input class="funnel-s2 hidden-input" type="hidden" name="s2" value=""> <input class="funnel-s3 hidden-input" type="hidden" name="s3" value=""> <input class="funnel-s4 hidden-input" type="hidden" name="s4" value=""> <input class="funnel-s5 hidden-input" type="hidden" name="s5" value=""> <input class="funnel-success-url hidden-input" type="hidden" name="success_url" value="https://thehustle.co/signup"> <input id="recaptcha-response-v3" class="g-recaptcha hidden-input" type="hidden" name="g-recaptcha-response" value=""> <input class="signup-email" type="email" name="email" placeholder="Your email address" required> <input class="email-submit" type="submit" value="Join Free"> </div> <div class="trends-opt-in"></div> <div submit-success> <template type="amp-mustache"> <p class="c-message c-message--success">Thank you for subscribing.</p> </template> </div> <div submit-error> <template type="amp-mustache"> <p class="c-message c-message--failed">Your submission failed. Please try again!</p> </template> </div> </form> </div>