Archive by Author

I’m Joining Stripe to Work on Atlas

I’m joining Stripe to work on Atlas. Let me tell you why.

(If you don’t know me, howdy, I’m Patrick. I’ve run a succession of small software businesses from Japan for the last 10 years. They’re documented in a bit of depth on this blog and in HN comments, conference presentations, and the like.)

Some years ago, when I was still working for a Japanese company, I had a wee little side project called Bingo Card Creator. I wanted to be able to take payment for it over the Internet. Options for doing this in 2006 were absolutely terrible. I eventually signed with a shareware payment processor who wanted to keep 11% of sales for renting me their merchant account, and “signed” is to be read literally: it cost me over 1/4 of my budget to send them a fax internationally accepting their (egregious) terms and conditions.

I was quite excited when Stripe launched back in 2011, and quickly moved all of my businesses to it. In addition to being transformatively better from an API and business perspective, it was obvious from the first that Stripe gets people like me. (See, in particular, where their CEO Patrick Collison helped me debug a Ruby dependency issue with the use of git bisect. That actually happened.)

The Global Community of Small Software Entrepreneurs

Neither Chicago (where I grew up) or Ogaki, Japan (where I lived when starting my business) is the beating heart of the global software industry. I knew no one in software growing up and assumed that the only options available were safe boring jobs at big boring companies. When a classmate at college interviewed with Google, everyone I knew advised her to get a job at a consulting company, instead, rather than taking a flyer on a flash-in-the-pan Internet thingy.

That social and educational background explains a bit of how I found myself doing soul-crushing J2EE Big Freaking Enterprise Web Applications as a Japanese salaryman. (Ask me for the full story sometime.) It doesn’t explain how I escaped that hellish existence.

That was largely due to a single decision of Joel Spolsky: he made a forum attached to his blog where people interested in the business of software could talk shop. I read it obsessively in my spare moments, and it introduced me to the unthinkable notion that regular old geeks like me could run software companies. I thought it was illegal, because, like Jon Snow, I knew nothing — nobody had ever told me that “creating intellectual property” is something that you don’t need to ask permission to do and my background therefore suggested it was either forbidden, risky, or risked being forbidden.

I never thought I could build a Fog Creek, but I saw a bunch of other geeks building Poker Co-pilot and Perfect Table Plan and skeet-shooting scoring software, and I was pretty sure I could at least do something like that.

So I released Bingo Card Creator, and — still cognizant of the fact that I knew nothing — I decided to blog about what I was learning in real time. And I kept doing that for the next few years. I knew precious little about software development, but luckily the Internet is full of people who do. I knew nothing about marketing or sales, but the forum regulars were happy to talk me through the basics of AdWords and the Internet had some decent guidelines for SEO. And so on.

Fast forward ten years: I’ve built three software companies, worked in others, and now know more-than-nothing. My wee little blog and HN comments now total about ~3 million words, and other geeks have reported to me that they were able to use them to get their own businesses / careers off the ground, which makes me happier than anything else businesswise.

I’ve also spent a lot of time (a lot of time) online and offline with a worldwide community of practice. Just like there is a cognizable tribe of Rubyists or Pythonistas or ballet dancers, who share something with all other Rubyists or Pythonistas or ballet dancers regardless of borders or language, We Who Work For The Internet have gone out, found each other, and decided we rather like each others’ company.

We have forums. We have (nascent) professional journals. We have conferences. We started talking shop and we ended up as friends.

I’ve gone to work substantially every day for the last 10 years in my own software company, fixing bugs and running AdWords campaigns, but my biggest impact — and the most personally fulfilling one — has been helping others start and grow their own businesses.

Silicon Valley Is Full Of Crazy People

As part of rubbing elbows online with my tribe, I’ve had contact with another tribe over the years, which is venture-backed Silicon Valley entrepreneurs. To paraphrase a remark made by a Japanese businessman of my acquaintance, they’re a society organized around attempting to find the optimal level of crazy.

When you have too much crazy, you start a social network for cat photo sharing and say — in all earnestness — that it will change the world for all days to come.

When you have too little crazy, you end up taking a safe job at a megacorp and staying even though you hate it.

When you have just enough crazy, you found a payments company, heedless of the fact that founding a payments company is doomed to failure because it involves
mountains of hard and boring work and the incumbents have billions of dollars.

Patrick and John Collison are close-to-optimally crazy. When Patrick says “Stripe’s goal is to increase the GDP of the Internet”, that isn’t like Cthulhu’s goal to make a dent in the universe. It implies real people are going to make real businesses selling real products and thereby experience real improvements in their real lives. I know this works. I have seen it. I have lived it. I have watched it work for hundreds of friends and acquaintances.

Atlas Is Crazy

A couple of months ago, Patrick Collison came to me with another crazy idea. He said Stripe wanted to make “simple incorporation as a service”, so that any entrepreneur worldwide could have a corporate entity and a bank account spun up about as easily as they could get an EC2 server.

This idea is crazy. I’ve incorporated four companies and opened business bank accounts for all of them. The most recent required over a hundred pages of documentation and six weeks of negotiation to assuage a risk department’s concerns about foreign tech entrepreneurs. (Thanks, Bitcoin.) You’re not supposed to be able to do this.

Stripe did it. With crazy speed: the project was in beta within 11 weeks of conception. It can take that long to form a single company in much of the world. Stripe solved the problem like an engineer: establishing one company requires an annoying amount of form-filling so instead of buckling down and doing it you just make a company-establishing web application and abstract away form-filling for all time.

And they’re crazily ambitious about where it ends up: not simply incorporating companies, but eating all of the crufty back office work which distracts Internet businesses from getting more real products into the hands of real customers. Payments, contracts, invoices, bookkeeping, incorporation, taxes, etc etc, all things you have to do even if what you’re actually doing is selling bingo cards to elementary schoolteachers.

Patrick describes the success case for Atlas as being visible in global macroeconomic indicators, which is crazy. That said: if you’ve seen how fragile new businesses are at the margins (“Can I get a bank account? Can I get an insurance policy issued in time to close this first deal? Can I get a corporate entity spun up to actually be able to sign a lease or write employment contracts?”), then interventions early in the business funnel may well increase the number of successful businesses surviving to major milestones like launch, profitability, bringing on employees, and sustained economic impact. And if you believe that new businesses are where economic growth is going to come from, that sounds very impactful. Perhaps even crazily impactful, for well-established economies like the US and Japan and for emerging economies worldwide.

The Crazy, It Is Catching

My co-founders and I made the decision recently to wind down our last business, Starfighter, and pursue new adventures. I thought I was going to sell Appointment Reminder (the SaaS business which I’ve run for the last few years, and never really loved) and start another small SaaS business. That would pay the rent and let me continue writing and speaking with other entrepreneurs, which is the part of this gig that I really enjoy.

Patrick had a crazy proposition for me: why don’t I come work for Stripe on Atlas.

I found myself saying yes, largely because I think the potential impact of Atlas (and Stripe generally) is crazily high.

There are probably about a hundred thousand We Who Work For The Internet. There will shortly be a few million, and there will eventually be hundreds of millions.

The firm is a technological innovation which changed the world forever. The Internet is a technological innovation which changed the world forever. Firms which live on the Internet are already happening. Their growth, in number and aggregate impact, is inevitable.

There Is No Future For Scarcity

(This section owes more than a little bit to Naval Ravikant’s thoughts on leverage, most succinctly captured here.)

There is no conceivable future in which Internet-enabled firms are less numerous than e.g. insurance agents, which the US alone has ~450,000 of.

There is no conceivable future where it becomes harder to make products people are willing to pay for than it is in 2016. The technologies will change, but Rails is now the lower bar of how productive a software platform can be. Getting your physical product manufactured by a contract factory in China is within the capacity of college students in the first world; that or similar capabilities will only get more broadly distributed.

There is no conceivable future in which it gets harder to charge people money than it is in 2016. It cost $250,000 and six months of integration to charge a single credit card online in 1999. By 2006, that was down to hundreds of dollars and weeks of effort. In 2016, the integration can be done in a morning and the costs have likewise cratered. We will not forget how to do it.

There is no conceivable future where the network-effect businesses we use to reach customers — Google, AdWords, Facebook, the App Store, Twitter, Kickstarter, Alibaba, etc — collectively retreat in the number or aggregate affluence of the potential customers they can address. (See footnote.)

There is no conceivable future in which the number of people connected to the Internet shrinks. There is no conceivable future where smartphones become more exclusive products than they currently are.

There is no conceivable future in which the percentage of transactions consummated online decreases from its present ~1% in the most connected economies. The number of transactions worldwide will rise, by orders of magnitude.

These fundamental economic forces will continue bringing down the cost of starting new businesses and increasing the potential impact they have, even at very low levels of capitalization. We will see an explosion of them.

So Why Hasn’t It Happened Yet?

Our future colleagues are presently prevented from starting by a host of logistical difficulties and informational barriers. They don’t have business bank accounts. They don’t know what bookkeeping is. They’ve never negotiated a master services agreement. These are all things that can be learned, but the depth and breadth required from an aspiring entrepreneur feels forbidding.

So I’m joining Atlas to work on community and communication, which means something like “scalably educate the world’s Internet-enabled entrepreneurs, reduce any barrier to entry, and assist the global community of practice in growing to accommodate a lot more people.”

Hopefully the next few years look a lot like the last few years: code, write, talk, present, and be as helpful to as many people as possible. The main difference is that I now get scored on that impact directly, as opposed to it being a fun sideline hobby while my day job is actually shipping and selling business productivity software.

Stripe’s interest in increasing the GDP of the Internet is fairly transparent: they intend for Stripe to be the obvious choice for payment rails of every Internet business, and for Atlas to be the obvious choice for the back office of every Internet business. If that comes to pass, Stripe will be an enormously successful company.

Back To Working In Japan

I spend most of my working time on the Internet, but I actually live in Japan, and rather enjoy it here. If I have one professional regret, it is that fairly little of my work directly improves my local community.

I’m excited for the future of Stripe Japan.

Stripe Japan has a weird constraint where it has to be true to being Stripe (an entrepreneur-friendly focused-on-developers company) and, simultaneously, an authentically Japanese company.

I happen to be a bilingual developer-turned-entrepreneur who can pull off Responsible Japanese Salaryman when required. I look forward to helping Stripe Japan earn the trust of Japanese companies and be a pleasant environment for a multinational, multicultural team to work in. Also, I can help the mothership understand when they’re asking Stripe Japan to operate at incorrect levels of crazy.

We hope to grow Stripe Japan to a thriving software company in its own right. In addition to directly employing people in jobs which are better than those historically available here, we hope to provide additional evidence that a better way of working is possible.

Naturally, we hope to reduce payments as a barrier to entry among Japanese companies. There is a mind-boggling amount of cost and complexity to taking non-cash payments in Japan. Ask me if you’re curious, but the short version is that historically minimum-viable-online-payments has required more than a million dollars in capital. (Thankfully, this is starting to change.) That’s why anecdotally Japanese entrepreneurs have told me for years that they’re more jealous of Americans having access to Stripe than any other company.

We’re going to give entrepreneurs at all stages the Stripe experience that US startups now take for granted and also access to the walled gardens of Japan’s native payments ecosystems.

There are plenty of barriers to running a company in this country. Historically, the mechanics of collecting money are a major one. We will solve that problem.

Back to Being An Employee

I didn’t think I was ever going to be an employee again, and honestly, I have mixed emotions about it. That’s why I turned down other opportunities in the past.

Stripe is offering a very compelling mixture of impact and autonomy. I’m particularly attracted to the company culture of employees not being restricted to individual job descriptions, but rather getting autonomy and ownership to bring projects to completion. That appeals to the broad-spectrum generalist in me. It helps that the Atlas team is presently tiny and in dire need of broad-spectrum generalists. Some people would feel overwhelmed if asked to write Ruby, negotiate with vendors, and construct lifecycle email sequences — that sounds to me like a fulfilling way to spend any given Tuesday.

At the same time, I’m looking forward to working with a team. One of my favorite parts of Starfighter was working with smart co-founders and not having sole responsibility for generating forward progress in the company, which is the nature of the beast in self-employment. It will be nice to know that payroll, legal, devops, and the like are sorted by competent professionals who enjoy doing them, so that I can be a competent professional on the things I’m actually good at and not have to worry if the server is down at 2 AM.

It’s going to be an adjustment to having a boss again. It might be a bit of an adjustment for Stripe, too, as their expectation that I operate autonomously will probably not always coincide with their immediate desires.

Fun story: I’m probably their only employee who asked for “Employee will be permitted to continue criticizing Bitcoin in their personal capacity, despite the fact that Bitcoin is a technology that Stripe uses and promotes” to be written into the employment contract. (One might sensibly wonder if that were actually intended as a “no brown M&Ms” clause simply to test how serious they were regarding autonomy, but no, I just wanted to continue criticizing Bitcoin. Everyone needs a hobby.)

What Happens To Your Other Businesses?

Starfighter: Starfighter will be winding down operations. We experienced the oldest startup story: we shipped a great product but the business didn’t end up working out. I wish Thomas and Erin the best in their new adventure and they are likewise rooting for me at Stripe. I also wish our players and clients success in their future endeavors — feel free to contact me down the line if I can help you out (in my personal capacity).

If you want to know more about Starfighter, please check Starfighter spaces.

Appointment Reminder: Appointment Reminder will be sold in the next few weeks, through FEI, who I used to sell Bingo Card Creator last year. As of the publication of this post, the sale is already deeply in progress. If you have questions, please route them to FEI.

I’ll likely write up what I learned from AR at some point.

Kalzumeus Software: I will continue periodically writing and speaking in my personal capacity here and at my usual watering holes, but imagine that Atlas will be more than enough work for the next few years. I will likely not do any new products under the Kalzumeus banner.

Incidentally, I’ve partnered with Nick Disabato to finally finish that conversion optimization course I have been working on for forever-and-a-day, as my last bit of major creative work prior to starting with Stripe. (We wrapped two days of video shoots five minutes ago.) More details from Nick and I on our respective mailing lists as that is ready to show.

Want To Work At Stripe?

Stripe is hiring. Atlas is hiring. Stripe Japan is hiring. Their jobs page is here.

The overwhelming majority of jobs in the technology industry do not go to people who cold apply via jobs pages. This is important for you to know and operationalize. In general, you want to find someone inside the company who has hiring authority, make a good impression on them, and then get them to start the ball rolling on an internal application process.

I don’t have hiring authority, but I’ve had a standing invitation to talk to anyone interested in the software industry open for several years, and that isn’t going anywhere. I work at Stripe; I work for the Internet. If you’re on the Internet, I work for you, too. If you’re interested in potentially exploring options at Stripe, feel free to email me. I’ll happily take you out to coffee and/or a Skype call, give you the inside scoop, and make sure you’re routed to one of the friendly, accessible people internally who can actually make the hiring process happen. You cannot possibly waste my time.

See you on the Internet, and thanks.


There is a conceivable future where the de-facto monopolies that control discovery levy a 30% business privilege tax on the entire Internet, but living in that hypothetical cyberpunk dystopia would still be superior to every economic arrangement prior to the Internet. Man, what a downer of a footnote. Have I mentioned that it’s a good thing to make payment rails that don’t go through AppAmaGooBookSoft?

Kalzumeus Podcast Episode 13: Selling Online Businesses With Thomas Smale

I sold Bingo Card Creator, the business I’m probably best known for, through FEI last year. Thomas Smale, the principal of that brokerage, is now a buddy of mine, and he agreed to chat with me a bit about what goes into buying and selling online businesses. I think it is of particular interest to those of you with SaaS businesses already, but it might also be interesting for those of you who might found one eventually, as you can make early decisions (like e.g. technology stack) which built improved saleability into the business from day one.

I’ve previously written about the BCC acquisition here. Note that this interview doesn’t go into much depth about that acquisition per se, partially because that isn’t a new topic for me and partially because I’m NDAed with regards to specifics.

[Patrick notes: As always, the below transcript occasionally has my thoughts inserted in this format.]

What you’ll learn in this podcast:

  • Why SaaS businesses (and others with recurring revenue) receive a valuation premium
  • Why you should use a broker to sell a business
  • How to start getting a business ready for sale months before the process formally starts
  • How to ease the acquisition process, both for the buyer and the seller

MP3 Download (~50 minutes, ~60MB): right click here and select Save As.

Podcast format: either subscribe to in your podcast reader of choice or you can search for Kalzumeus Podcast in iTunes, Overcast, or another aggregator of your choice.


Selling Online Businesses With Thomas Smale

Patrick McKenzie: Hideho everybody. My name is Patrick McKenzie, better known as Patio11 on the Internets. I’m here for the 13th episode of the Kalzumeus Podcast with my friend Thomas Smale, who runs FEI. It’s a brokerage for online businesses, which I used last year to sell Bingo Card Creator.

Thomas Smale: Hi, Patrick. Thanks so much for having me on.

Patrick: Thomas, last year, you helped me sell Bingo Card Creator, which was the first business that I had been running from about 2006 through 2015 selling bingo cards over the Internet to elementary school teachers. Do you guys do a lot of work with SaaS companies?

Thomas: In the last 12 months, just to put it in perspective, we did about 80 deals, and this year, we’re on track to do around 100 deals. At the moment, around a third of our business is in the SaaS or software space. It’s not all we do, but it is quite a big focus internally.

Patrick: Just out of curiosity, what are the other sort of businesses that you guys see a lot?

Thomas: If we broke it down a third, a third, a third, to keep it quite simple, we do e-commerce businesses, selling on Amazon or Amazon FBA. E-commerce through their own store would be about another third. Then the third content businesses, whether that’s content-based sites monetized with AdSense or Amazon affiliates, they’ve gotten quite popular, especially on the lower end.

Then we also have a mixture of other businesses we do. Generally speaking, if it’s an online-based business, we will take a look at it.

Patrick: One of the things that was interesting to me was comparing and contrasting how the acquisitions work at the scale of the economy and also how that’s similar and different to more traditional acquisitions for start-ups or for larger firms.
One of the interesting things is that, just like in larger firms, SaaS gets a valuation premium relative to the revenue or cash flow that’s coming out of the business. Can you explain what that looks like in your experience?

Thomas: Generally speaking, a SaaS business on average, assuming all parts being equal and equivalent, an e-commerce business or content business will sell for more. In terms of how much more, generally speaking, you’d probably be looking at about 25 percent premium.

The real driver there is the fact that a SaaS business has that recurring income and that baseline. I think from a buyer’s perspective, worst case scenario, even if you can’t grow the business or even if it starts to decline, you’ve still got that baseline of subscribers.

Also, with a solid subscriber base, you can build momentum quite quickly. We’ve seen quite a few buyers come in to acquire small SaaS businesses where the owner has either moved onto new projects or run out of ideas with it.

They’ve managed to scale it quite quickly, because you’ve got that baseline that’s already there. That tends to be the appeal from the buyer perspective, and what drives multiples up compared to other business models.

Patrick: We’re well aware of this because you do 80 to 100 deals a year and I saw the process through the nitty-gritty, but I’m guessing that most of my audience doesn’t know exactly what the multiple we’re calculating is. We should probably be pretty explicit that the multiple is a multiple of what’s called the SDC, seller discretionary cash flow that’s coming out of the business. How about you explain that for everybody, because you probably know it better than me?

Thomas: We use SDE, which is seller discretionary earnings, but it’s basically the same thing as seller discretionary cash flow. You might hear it be described a few other things, as well. Effectively it’s the net profit of the business.

Some people like to use EBITDA, or EBIT, or a similar calculation to that, and then adding back, so effectively it’s not taking into account anything the owner has taken out of the business, for example, the owner’s salary. Anything else you might take out for tax purposes, for example, personal health insurance, a car, rent. [Patrick notes: For example, in Japan, self-employed individuals can write off 40~60% of their apartment’s rent against the profits of the business. I’ve done this for years, on the advice of both my accountant and the National Tax Agency. This is strongly discouraged by the IRS unless you meet their much-more-stringent definition of a home office.] Anything that’s not entirely relevant to running the business.

The reason that’s done is to standardize the sale of small business, because one owner on exactly the same business might pay themselves $50,000 a year, and the other owner might pay themselves $200,000 a year. If you don’t use an SDE calculation, the owner who pays himself less would look like their business is more profitable and worth more.

It levels the playing field. That’s generally used for any business making less than a million a year in profit, or SDE in this case.

Patrick: After you’ve calculated what the business’s revenues minus the necessary expenses to generate those revenues are, we multiply by a number, which is set by market conditions, mostly, where buyers and sellers are willing to transact. At the moment, my understanding is in SaaS that it’s about, roughly, three years?

Thomas: That’s about right. We have an internal evaluation model that we’ve built out, which looks at all of our past sales. At the moment we’ve done about 400 transactions now. All that data’s in there, and we’ll look at past deals, look at similarities.

Depending on the group, if you look at the last 12 months we see SaaS business go up to five times, or even six times, annual, but that’s looking at the last 12 months. If it’s growing, if you look at the last three months, we would generally extrapolate that out for the next 12 months, and then apply a three-times multiple to that. It’s more like five times the last 12 months, or three times, extrapolating the last three.

[Patrick notes: Let me put some fictitious numbers here to make this sound more concrete. Suppose that your business was doing $8k net income monthly last year and has added $1k of MRR consistently in every month at no meaningful marginal cost. Your net income for the last year is $162k. Your predicted revenue for the next year is $306k. Thomas is suggesting that if you valued the business at 5X its last year it would be worth about $800k, but given extrapolation of the clear growth trend, it would get 3X next year’s implied next year revenue, or about $900k. Note that the valuation for more stable businesses is generally around 3~3.5X of the trailing twelve month’s net income — the market places a hefty premium on demonstrable growth, in small businesses and unicorns alike.]

We only really do for SaaS businesses, because the growth can be a little bit more predictable and the revenue is a little bit more predictable. Whereas in a e-commerce store, for example, you could have had a couple of good months due to a sale, or running a promotion on Groupon, or something like that.

That’s not sustainable. It doesn’t really increase the value as much as an increase in MRR that you see in a SaaS business.

Getting Ready To Sell Your Business

Patrick: E-commerce businesses are also typically very sensitive to seasonality, which is uncommon in SaaS businesses, says the one guy with the extremely seasonal SaaS business that I used to run. [laughs]

When I was in the process of selling Bingo Card Creator with you, going through the process took a couple months to complete. Before that there was, obviously, a longer process with me thinking through, “OK, I want to sell this business. What do I start to do to get my ducks in a row?”

You gave me some good advice with regards to things that I could do that would both make the transition a little smoother, for both myself and the buyer, and which would tend to increase the valuation of the business. What are some of those things that folks who might own a SaaS business and be thinking of selling it in, say, the next 12 months could start to do today to make that process easier for themselves?

Thomas: That’s a good question. This is another good point that it is important to think about these things well in advance of the sale. You definitely did the right thing coming to us months before you were planning it. Most of the successful clients we see, who do sell their business, have done that, as well.

I’ll stick with relatively generic advice that would be relevant for any business. The first one — I know this is definitely something you experienced, and almost all of our clients do — is getting your financials in shape. That’s even as basic as making sure you track your financials.

It always amazes me how many small business owners run businesses and they have no idea what they’ve got going in or out each month. They don’t know until they get their tax return from their accountant at the end of the year. [Patrick notes: You’d be surprised how many years I had a great understanding of my unit economics and was surprised in December by my end-of-year numbers, in either direction. “$40k in travel costs? Wait, really? I didn’t… counts on fingers oh I guess I did.”]

We ask people for an income statement for the last 12 months with a monthly breakdown, which a lot of people don’t do, or their accountant might do for them, but they don’t necessarily have it to hand. That’s definitely something to start putting together.

In the case of people who own multiple businesses, often they’ll all run through one company. They might have an LLC that owns three assets, and they’ll have various shared expenses that run through that. That’s where it gets a little bit more complicated. I generally advice people, where they can, to start splitting out expenses.

For example, if you’ve got one server that has three different products hosted on it, then think about separating out the server for the one you want to sell, because that’s going to save you a lot of time and headaches when it comes to transfer. From a buyer perspective, also, it reduces the risk.

Making sure you’ve got your financials in shape, but can also allocate costs and revenue to the particular business that you’re looking to sell. If you can’t do that, it’s going to be quite difficult.

Quite often we have to make assumptions. Let’s say, for arguments sake, you’ve got an employee who’s a virtual assistant and works 40 hours a week on two of your businesses equally, then we’ll often take into account the cost of half their time as an assumption.

That’s a practical solution. Whether or not buyers will buy that effectively as a viable way of allocating the cost is a different matter. The more you can separate it, the better.

With SaaS businesses, particularly, it’s important to get your code base in order, make sure it’s properly documented. The same with systems.

We tend to find, especially on the lower-end SaaS businesses, which tend to be single-founder or partnerships, they’re quite often with a technical founder who’s built or written the majority of the code themselves. It might be very familiar to them, but from a third-party perspective, that’s not necessarily the case. [Patrick notes: When selling Bingo Card Creator, I spent four hours on a kickoff meeting with the buyer’s Rails freelancer taking them through the main workflows for BCC and how the code and site interacted, including the less-than-obvious bits. For Appointment Reminder, I did something similar with Makandra’s consultants prior to having them substantially beef up our test suite. The idea is reducing the amount of background knowledge which only exists in my head by capturing it in documents, code, or the heads of other people.]

In situations like that, there’s no problem with building your own product, or anything like that. I’d always encourage people to do that, but I would definitely recommend bringing in a third-party programmer, or coder, or whatever to get familiar with the code, so when you hand the business over, there’s at least someone who’s been in there before.

Maybe even get a friend or someone you trust to go through the code and make sure that they understand it, so for someone else who’s going to come in and take it over, there’s no issues.

If there are issues, which we’ve seen come up before in a few deals, it’s never too late to start working on the documentation, but the earlier you do it in the process, the less headaches you’re going to have later on. They tend to be…


Thomas: Sorry, go ahead.

Patrick: One of the things that was motivating me selling Bingo Card Creator and my other business, Appointment Reminder, was that I’m fully committed on Starfighter going forward.

One of the things that I did with the money I got from Bingo Card Creator was immediately plowed it into getting a firm to look at Starfighter code base, start to get familiar with it, and write a comprehensive test suite so that when we finally get around to selling, that process will go smoothly, in terms of both due diligence and during the hand-over.

I’ll have a consultancy that I can point to and say, “OK, if you need ongoing development or maintenance done in this product, this consultancy is already very familiar with this code base, and can help you out with that.” There’s no reliance on me as the bus factor one driving the business.

Thomas: That’s definitely a sensible plan. Another thing that comes up, which isn’t necessarily planning, as such, but it’s something we see, especially on lower-end businesses.

This doesn’t happen so much on the high six-figure and seven-figure businesses we do, but on relatively small businesses, it’s quite common for owners to decide they’re going to sell in three to six months, and effectively give up running the business. Then it falls into a state of disrepair and decline.

It’s important, when you do start thinking about a sale — and also throughout the sales process, as well — to continue running the business as if you were going to run it forever. That doesn’t necessarily mean you need to be working 70 hours a week writing new features and doing new marketing campaigns, but no one wants to buy a business on a decline.

Businesses that are declining are going to attract a significantly lower multiple than either stable or a growing business, so it is very important to make sure that you don’t drop the ball there. Even if you’ve mentally checked out, keep that going, because buyers really do punish you for any drop.

Patrick: One of the interesting things for me was that there seems to be a sweet spot between you don’t want to be too inactive, don’t want the business to fall into decline and disrepair. You want to continue doing maintenance, customer support, etc.. At the same time, you also don’t want to rock the boat immediately before an acquisition.

One of the things that you explained to me was that if you do particular moves, which might look like you were attempting to juice the revenue numbers, folks are perhaps a little less trusting of that.

For example, running promotions or drives to get new annual subscriptions on a month to two months leading up to an acquisition is something that is highly looked down upon, even if that would be normal if you were running the business for forever.

Thomas: No, that’s true. The only exception to that is if it’s a regular annual promotion, or something like that, you run. Quite often people think, “Oh, I need to make as much money as possible.” Like you say, they start running lifetime discounted plans, or annual plans at half-price, or something along those lines, which actually doesn’t help a sale at all.

Patrick: We talked a little bit about the range of acquisitions. You said that the higher end for your firm is the upper six figures, low seven figures. What’s the practical minimum for a size of the business that you guys would represent?

Thomas: In recent months, we’ve started expanding out our team. We’re starting a lease on a new office in Boston, so our team is growing out quite quickly.

We’ve started to increase our upper end. At the moment, we’ve got a couple of deals in the mid-seven-figure range we’re working on. [Patrick notes: After recording this podcast, FEI announced that it had successfully brokered the sale of Drip.] That will probably start going towards the low-eight-figure range, which is not something we’ve focused on much before, but we’ve got the depth in the team.

We’ve also got a very solid reputation in the SaaS and online business brokerage space. That means that we’re being seen as a pretty solid option at that level.

Minor correction there. On the lower end, generally the lowest will sell at around $20,000, but it’s quite rare for us to have anything below $50,000.

We do have a dedicated team. Quite often people come in with small businesses, and they’re a bit worried that if they list a $30,000 business with us, they’re not going to get the same level of service that they might get for, say, a million dollar business. Actually, what we’ve done internally is separate out teams.

We have a small cap team, their only job is to do $20,000 to $100,000 deals, a mid cap team that does $100,00 to $500,000, and then a large cap team that at the moment does anything from $500,000 up to about $6 million. It does mean that you very much get pretty much the same service for a $50,000 deal that you do for a $500,000 deal.

Patrick: It was interesting in seeing Bingo Card Creator…I’m NDAed on the exact number, but let’s say that sadly it was not a seven-figure deal. Even towards the lower end of that range, you guys have systems and processes in place that allow you to execute at a fairly high level of sophistication with regards to deals.

Let me put it this way, there was someone who used to work at Goldman Sachs who handled the due diligence for Bingo Card Creator. It was either Goldman Sachs or some other finance firm that is very similar to them.

I was very, very surprised to have them going out, line by line, through my revenue books. The final report listed one charge back that I’d missed in July that they had managed to identify, a $24.95 discrepancy in the revenue books. Hats off for the level of attention to detail on that process.

Thomas: We apply pretty much the same process to smaller deals we do larger deals. The only difference with larger deals are they’re generally more complex. The service is still pretty much exactly the same, but things like due diligence, contract reviews, negotiation, deal structuring, the initial preparation, all takes longer.

What Selling A Small Company Looks Like

Patrick: Why don’t we sketch out for a little bit what the process looks like, both in general and, if it’s simple for me to say, what the process looked like for Bingo Card Creator. The first step is fairly similar to what I went through. Typically someone reaches out to you and says, “Hey, I have a website. Let’s talk a bout it a little bit, because my plans might involve selling it.”

What does that initial reach out look like? How do you qualify someone as saying, “OK, we can represent this business,” versus, “Maybe this doesn’t hit our sweet spot,” etc.?

Thomas: We have two distinct types of inquiries. One would be someone who wants to sell now, and they’re already familiar with the process. They want to get started. The second group, which is probably more common, much like yourself was, “Hey, I’m thinking about selling. What do I need to do?”

The main thing from our side, the first thing we’re going to do is make sure that it’s a good fit for us. We don’t want to waste the client’s time on a business that’s not going to be something we’re going to take on, whether that’s a business that’s too small, or not in an industry that we have buyers in, or something like that. The first is always qualifying to make sure it reached our criteria.

Secondly is establishing what the client is actually trying to achieve. Some people want to sell now and they want to get market value for the business. Other people have a particular timeline in mind. They might say, “Hey, Thomas, I’ve got this new venture starting in six months. I want to get this all done.”

Other people say, “Hey, my business is doing really well. I want to get a million dollars for it. What do I need to get there?”

We’ll always have an initial conversation with them, whether that’s via email, phone, or occasionally you might meet people at conferences and events. We try to get an idea of exactly what the client is trying to achieve.

Once we’ve got an understanding of what they’re trying to do, we can then put a plan in place for an exit. Generally, what we’ll do is start with an evaluation, if that information is available, and then it helps the seller make a balanced decision about what they want to do.

You quite often find that sellers are surprised by the valuation, either in a it’s higher than they thought or lower than they thought. If it’s more than they expected, they’ll quite often want to get started with the process now. If it’s lower, there might want to be some things they work on.

The initial chat is very much a no-pressure, “Let’s get an understanding of where your business is at the moment and what it might be worth.”

Patrick: I remember, when we had the initial consultation, I came to you. What I thought the agenda for the chat was, was going to be working 100 percent on selling Appointment Reminder, and then maybe selling Bingo Card Creator if we had the opportunity to do so.

For context, for anyone that doesn’t know this, Appointment Reminder is, call it, five times larger business than Bingo Card Creator is.

I remembered being very impressed with you because you listened to my situation, and said, “Counter proposal: we should sell Bingo Card Creator first, because it would be an easier transaction.”

It would give me reasons to trust that you guys did a good job and would let me learn about the process so that, in the more important transaction, I’d have a better basis of skill for proceeding with it, to get a better outcome, and feel less risk involved in the process.

I was particularly impressed by this, because I’ve been a consultant for several years. It’s always difficult to turn down the larger paycheck from two consulting gigs when what the client really needs is the one that comes attached to the smaller paycheck. Hat’s off for that.

Thomas: That’s one of those things that we’ve always focused on over the year. It’s always doing best by the client, even if that’s not necessarily the best thing for us financially at the time.

The nature of the advisory world, business brokers, or M&A advisors, or what you want to call them, quite often get quite a bad reputation. We’ve always been quite conscious that we need to be a level above the average in what people perceive.

Being a very small industry, everyone knows everyone. It’s important for us to maintain word-of-mouth business, which is where we get quite a lot of our clients from. We’ve very much done the right thing. You might make more money in the short term giving the wrong advice, but in the long term it doesn’t really build a sustainable business or a good reputation.

Patrick: Speaking of reputation, one of the reasons that it took me so long to sell my business was because, let’s say, I’ve been around the Internet a few times. Business brokers don’t have a wonderful reputation typically. [Patrick notes: The only other broker I’ve been impressed with is Empire Flippers, at the lower end of the sophistication scale. Listen to their podcast even if you don’t particularly connect with running $2k a month AdSense sites — it’s fascinating.]

The reason I took a chance on you guys was Rob Walling and Mike Taber, two of my friends who run MicroConf, gave me a very glowing testimonial, personally. That was basically enough for me to take a chance on the conversation with you.

After the conversation with you, I was pretty convinced that I wanted to do a deal with you. After watching what the first deal went through, it’s pretty much a no-brainer that you’ll get the business for my second deal.

I’ve also referred something like seven people to you already. Working on number eight. We’ll see.

Thomas: Absolutely, we do get a lot of business from word of mouth. We certainly appreciate all of the people you’ve sent our way. That’s very much the way we’ve grown the business.

We don’t invest a huge amount into paid advertising, or anything like that. We’re very much a word-of-mouth and referral-driven business. We find one of the advantages of that for us, as well, is that we get far higher quality businesses that way than you might do somewhere else.

It also means you can, as you know, being a consultant, if you’ve got the reputation and the referral, you can be brutally honest with people and give them the right advice that they might not necessarily want to hear, and actually go through that process without issues. Whereas, if they’re cold, or they’ve come in off an AdWords ad, or a Facebook ad, or something like that, then it’s a slightly different approach to be effective. [Patrick notes: This advice is true for all sales processes and very few consultants or software companies exploit it effectively!]

Patrick: One of the reasons that the industry gets a bad rep is often a bit of baiting and switching with regards to give someone a very high, maybe not a formal, valuation.

Give them the expectation on the seller side that they’ll get a very high number, and then get them invested in the process, and say, “Well, actually, after reviewing it, it seems that we can only get you a number closer to where the market actually is.”

That’s neither here, not there. I have a reputation-based business. I’ve sent several friends to work with you guys in the last year. That’s worked out very well for everybody.

Surprises In Selling My Business

Patrick: Let’s talk about some of the things that were surprising to me when I was going through the process. Feel free to throw in stuff that might be surprising to other folks who are going through, either on the buyer side or the seller side.

Probably the biggest curveball to me was that I ended up selling my SaaS business to a pair of teachers, which is not quite a uncommon thing for someone selling a business focused on teachers. It turns out that most of the folks who buy SaaS businesses through you are not technical.

Thomas: It depends. I’d say this is one of the reasons we have different teams, is you do get a slightly different buyer profile depending on the size.

If a business is below $100,000, or in the SaaS space maybe even below $200,000 [Patrick notes: implies an MRR between $3k and $10k or so per month depending on cost structure], you quite often get non-technical buyers. That’s where it comes in handy having the code in good order and having a freelancer.

On the higher end, when you’re dealing with SaaS businesses, we recently completed a $1.1 million SaaS business sale. That had two technical cofounders who left the business as part of the sale.

The buyers there, they weren’t necessarily technical themselves, but they had access to a team that were. On million-dollar deals you would expect buyers to have that sort of infrastructure in place, but on a smaller deal, like $100,000, you don’t necessarily have that depth you can reach out to.

Generally people will buy SaaS businesses, or any online business, without a technical background if they know there’s a way they can get help, whether it’s a reliable freelancer, or occasionally the owner will agree a consulting agreement where they’re available, say, five hours a month for three months as part of the deal, to hang around.

It’s not completely uncommon to see non-technical, particularly outside of the SaaS space. The SaaS space I’d say it’s probably 50/50 technical versus non-technical, but with access to help, or freelancers, or whatever that might be.

Patrick: I was talking with the person who acquired my business, or, rather, one of the two people who acquired my business. She said that she and her husband had been looking at doing an offline business, like buying a Subway franchise, for a while, and then a friend of theirs who ran an FBA business…

FBA is Fulfilled by Amazon, for those of you who aren’t familiar with the acronym. It means that they stock some sort of product on Amazon, and then people buy it through the Amazon website, and Amazon takes care of shipping the product to them.

My acquirer’s friend ran an FBA business and told them that they should run an online business, rather than on offline business, because of lower capital requirements and the better lifestyle associated with it. [Patrick notes: Did you know it costs $200k to open a Subway or $750k in capital to open a McDonalds? The Internet is enabling a disruptively better path towards yeoman entrepreneurship.] You don’t actually have to cut any sandwiches to run an online business, and that was a fairly persuasive argument to them.

Other things that were surprising for me during the process, we talked a little bit about getting things ready in terms of getting one’s books in order. One of the things that probably took more time than anything else for me, since I was in the situation of running several businesses, which largely shared infrastructure, was breaking up different SaaS accounts, and hosting accounts, etc.

For example, I’d been saving five dollars a month on MailChimp by having four businesses each having their list run in MailChimp. In a fairly stressful period, while getting the deal put together and getting all my ducks in a row, I had to migrate three businesses’ mailing lists off of MailChimp, which is a rather involved process, and involved doing code changes to all three of those businesses to re-architect their mail signup workflows.

That was unfun. I recommend not attempting to save the five dollars on MailChimp if you’re in that situation.

Is there anything that you find that maybe tech folks, specifically, or sellers generally, might not have as great a handle on as you would like?

Thomas: Going back to your previous point about MailChimp, one of the reasons we’re so successful is because we have a very rigid process. That does mean, even if it’s a relatively small deal, that we still like to get the business in a good position to sell. We do very much try and apply the same advice and systems processes all the way from smaller deals, all the way up to much larger deals.

Your case is reasonably unique, where you had multiple businesses all sharing the same accounts. I would say the majority of clients we deal with, if they have multiple businesses, they generally are a lot more simple. They might have 10 Amazon affiliate websites, for example. They tend to be quite simple to split out and don’t really need a huge amount of work.

It’s quite rare to find people with multiple successful and profitable SaaS businesses. In your situation it definitely came up as a consideration, but for the average person, I don’t think it’s that prevalent.

In terms of other things that come up, the main thing is shared financing. Things like MailChimp, if you really needed to, you could run all the way through the process, and then they actually make the process of migrating the mailing list to a buyer when you are relatively simple at time of sale.

Servers are quite a common one. Quite often you find people have three or four products all sharing the same server. That’s definitely something to think about. You don’t necessarily need to split it out before the sale. It does make things easier when it comes to the transfer. [Patrick notes: A certain hosting provider fanatically supports not moving VPSes between accounts. As a result, I had to spin up the entire BCC infrastructure from metal at a competing provider, then cutover, so that it would not longer be in the same account as my other VPSes.]

Ultimately, it’s going to have to be split out at some stage, so why not do it now, when there’s no pressure on and there’s no money on the table for the deal, rather than mid-deal, when it comes up as problem, when you’ve got lots of other, different things going on as part of due diligence, and contract negotiations, and things like that.

Servers would definitely be one of them. The main one is keeping on top of your code, and making sure it’s in a good position to hand over to someone else.

Have someone else go through that code and look at it. You don’t necessarily need to invest a huge amount. Even if it’s a freelancer going through, or a friend going thorough the code to make sure they understand it, that’s definitely beneficial, especially if you’re dealing with a non-technical buyer.

What we like to do is, when were advising sellers, make sure we give then the advice to make sure their business appeals to the widest range of buyers as possible. There’s little merit in positioning a business if it’s only going to be of interest to a very specific buyer.

We get a lot of people who come in, and they say, “Oh, I’ve got a particular strategic acquirer, but they’re going to be the only one that wants the business.” In that case, occasionally it will work, and you’ll have the big exit that you often read about on the news sites out there, but to maintain our 95 percent success rate, it’s very much giving advice that means that business is going to be appealing to lots of people.

They would be the main things I would focus on. I would say, as a caveat, your case it relatively unique with the way you had it set up. Most people just have one, or maybe two, main products.

Patrick: Makes sense. After you’ve done the initial consultation with someone and figured out a plan forward, the next step was a bit of data gathering, where you give the seller a fairly comprehensive questionnaire.

I remember something like 100 questions regarding the history of the business, the finance of the business, every metrics-driven question under the sun. Where traffic sources come from, what this typical sales process looks like for the product.

For businesses that have more complex product offering, what that product offering looks like. Their conversion funnel, their upsells, yada yada yada. You then take that input, and take people’s numbers, and Google Analytics, and turn that into a prospectus.

Thomas: The process hasn’t changed a huge amount in the last year. We have built a more sophisticated valuation model now. We used to be very accurate, but we’re now even more accurate, and more scalable evaluations, because it’s now very much data-driven, with a little bit of experience in there, whereas in the past it was evaluation based on experience, but slightly less data-driven.

The questionnaire is quite similar. We have developed it. Depending on the size of the business and the complexity, it would be between, say, 80 and 120 questions. For example, a small Amazon affiliate site might only have 60 questions, whereas a $1.1 million SaaS business that we sold recently had more like 110 questions.

Once we’ve done that, we’ll do some back and forth, depending on the answers people have given. In your case you were very comprehensive with your answers. [Patrick notes: I have many flaws as a business owner but insufficient desire to write about boring details is not one of them.] We didn’t have a huge number of follow-ups, but in some cases, we’ll do quite a few rounds of follow ups to make sure that the questions are answered properly and there’s no issues in there. Also to make sure we understand the business.

From there, we then put together a prospectus, which is based on the questionnaire, the financials, like I said earlier, last 12 months broken down by month, neatly format Google Analytics.

In the case of SaaS businesses, we’ll quite often go through Baremetrics, whatever other SaaS metrics tool you have to get the data out, because in SaaS businesses particularly buyers are always interested in your metrics, like churn, MRR and all of those. That’s definitely important with technical businesses like that.

Once we’ve got a prospectus together the length of it will really depend on the size of the business and the complexity. Usually, it’s between 20 and 30 pages. We try not to go much longer than that. We’ll then go back and forth with the seller to make sure they’re happy with it and that everything is factually accurate.

Once that is prepared, we move on to listing. This is something we’ve developed in recent months. We now go through quite a distinct three-stage marketing process. The first step of the process is going out to buyers that we have in a very segmented list.

We spend years, and we continue to spend time and resources on developing out an internal CRM, which is something like a cross between Salesforce and Basecamp, for what we do.

Salesforce doesn’t quite work for us. Basecamp or Teamwork or something like that doesn’t quite work for us either. We built something in the middle, which means we track a lot of different data on buyers and sellers, what businesses look like, what buyers are looking for.

Our first round of marketing is to a segmented list. It might be buyers who said they want to buy a SaaS business below $250,000. That will be our first port of call . Quite often, that’s where we get the most success, because those people are being sent something they’ve very specifically requested.

We then go then go out to our wider list, which is well over 10,000 people at the moment. That’s a slightly more general interest list we do get that tends to generate between 100 and 200 qualified enquiries of buyers that then come in. We also promote the business on some third-party platforms, for example, BizBuySell, which you’ll often see brokers using.

It’s quite rare. Most like with sellers it’s very rare for a seller to come in and want to list with us immediately. It’s also the same with buyers. It’s very rare for a buyer to enquire from an ad and buy a business immediately. They’re more likely to end up buying something in 12 months. [Patrick notes: The buyer for BCC said that they had been receiving prospectuses for 6+ months prior to reading BCC’s, which “spoke to us as teachers.”]

We work through that process, hopefully get an offer or multiple offers on the table, and then work to negotiate the offer the seller wants to accept. That’s why we spend quite a lot of time upfront, just to understand the needs and wants.

Quite often people want a relatively quick, no hassle deal, even if that means accepting slightly less money. Other people would rather wait a little bit longer and push for the absolute best offer. They don’t mind offering a bit more in terms of time.

That’s really a seller preferencing. We don’t push people either way. That’s really saying that they need to decide. All we can do is give a balanced opinion on what the best offer is and why.

Once you’ve gone through that, offers get accepted in the form of a letter of intent or LOI. It’s a non-legally binding offer effectively. That will outline the approximate terms of the deal, although they can often change beyond that. The only thing we try and avoid changing is the actual purchase price.

Once that’s signed, it then goes into a due diligence period, which can take varying lengths of time depending on the complexity of the business. Also we have some buyers who might be quite comfortable with a business and go through the process quite quickly.

We did an $800,000 deal that closed out a couple of weeks ago. That due diligence period took less than a week. We’ve also done $200,000 SaaS businesses that took three weeks. That really depends.

From there, we go into contract negotiation, which is where we will work with the seller and the buyer to prepare an asset purchase agreement. We get the important terms in there, which have often been outlined in the LOI. We always try to make sure that any deal breaking or really big terms are agreed upfront.

Once that’s negotiated, sometimes that will involve lawyers, especially on larger, more complex deals, sellers and buyers want to get their legal counsels involved. Often on smaller deals, it’s not necessary. [Patrick notes: I did the BCC sale without running it by my lawyer. I read my accountant in on the details but didn’t have him work much on the deal.]

From there, we use a third-party escrow service who will ensure that the funds are securely transacted between all the parties and the business is transferred. So there’s no chance of you sending your business to someone and them not wiring you the cash or them wiring you the cash and not be given the business. That’s something we’ve used pretty much since day one of the company, and it’s worked very well for us.

That’s the overview of the current process.

Patrick: Yeah. It worked reasonably smoothly in my case. You mind if I dig into some bits of this just for people’s interest?

Thomas: Sure. No, absolutely. I’ve rushed through the whole lot. Say whatever you like.

Patrick: Sure. No worries. One of the things that you guys did, which I did not appreciate the value of it at the time, is that after we had identified the first prospective buyer for the business, David, who was the broker working at it for me, also continued developing other leads for people wanting to buy the business, which I was a little confused by, because I thought, “Well, it’s only going to get sold once, right?”

It turned out that, against everybody’s expectations, the first identified buyer pulled out basically at the closing for the business. David was able to slot in an alternate buyer within…The deal fell apart Saturday morning, Japan time, very early in the morning, and I thought I was going to have a very distraught weekend. Then by Monday, the deal was on with a new buyer, and then we closed out. The wire got cut that Friday or something. It was a whirlwind.

Yeah, you guys were really in my corner on that one.

Thomas: Yeah. That’s one of those things slightly unfortunate in that situation. It really doesn’t happen that often. But over the years, occasionally, because you were only dealing with human beings in a process, so quite often things can change about the process or people get cold feet, whether that’s buyer or seller.

We’ve got the experience now. That’s one of the advantages of working with a broker who’s done so many deals is we’ve been there done that and we’ve seen it all before. A lot of our job is not necessarily dealing with the easy stuff, which lots of people can deal with, it’s knowing how to react when issues do come up.

Invariably, selling a business, various individuals involved, things do come up. Lots of different potential problems can come up. That’s really where the experience comes in.

In that case, we were able to resolve the issue pretty quickly.

Patrick: Bingo Card Creator was a rather small transaction for you guys. But that’s a business that has more than a few moving parts, particularly once you throw multiple companies into the mix. For the larger purchases you’re handling, that’s already much higher than the typical transactions, as for, say, a house.

My father being in commercial real estate all his life, believe me, I can tell you, houses can throw lots of issues into the play late in the day. [Patrick notes: Commercial real estate is generally not houses but Dad would talk to me about his day-to-day like I talked about BCC, so I have heard years upon years of stories.]

Let’s talk a little bit about the contract negotiation. I ended up using just your standard terms with a few modifications that were requested by the buyer. Some of the standard modifications that you might want on top of the terms are things like, for example, a non-compete, where the seller promises the buyer that they won’t either retain another business in the same niche or immediately turn around and attempt to create a business in the same niche, which would tend to disadvantage the buyer, since the seller has the preexisting relationships and buyer does not.

An interesting thing. My business was largely built on search engine optimization. Search engine optimization is heavily sensitive to the link profiles of a website. It’s written into the contractual agreement for selling the business that I’m required to maintain certain links that the rest of my “business empire” has to point to the business that I sold, which was interesting.

I was totally willing to do it, but interesting to me that everyone involved in the process was sophisticated enough to ask for that. Just out of curiosity sake, what’s the weirdest term that you’ve ever seen in the agreement.

Thomas: The majority of deals we do follow reasonably standard clauses. We do try and keep deals quite standardized. We haven’t done a huge number of deals where the terms have got really out there and quite different. It really depends on the size of the deal as well.

We did a deal a couple of years ago where there was…A lot of these things are just things that we would have spotted upfront. For example, we knew upfront you had links from your other websites. That’s something we’re going to make sure is in the contract rather than becoming an issue once the deal is closed, and the site starts losing rankings because the links have been removed.

We’ve had deals in the past where there have been issues transferring the business. For example, we did one a year ago where the owner was in the UK and the buyer was in the US. They ran all their subscription payments through PayPal. PayPal, as it was a UK entity on the PayPal account could not be transferred to a US entity.

The clause we had in the contract there was this part of the deal the seller had to keep the PayPal account in good standing for 12 months while they transitioned out, firstly transitioned into their own payment processor for any new subscribers. Over the course of 12 months, the majority of people subscribing churned off in that period. [Patrick notes: Many of my SaaS friends who were using legacy payment processors end up using natural churn to transition accounts between processors, since legacy processors hate doing this. This process can take years and is unimaginably frustrating — it’s probably the worst form of lockup that software companies still deal with. These days Spreedly/Stripe/Braintree/etc make it much, much simpler.]

Most of the terms we look to put in contracts, especially when they are slightly different from the norm, what I would call a practical term. There are generally not things that screw over the buyer or screw over the seller. We very much like to have a fair and equitable agreement all round. In your case, keeping links in place is no problem for you to do that. From a buyer perspective, it means they don’t have the risk of losing the rankings.

In the other deal we did, it was an example of where the buyer wanted the business, the seller wanted to sell the business, and the most practical solution was to have an agreement where that would stay in good standing.

We’ve had various agreements like that. This, again, helps working through a broker, where just the nature of working through a trusted advisor means there is more trust in the process. The often we can agree or negotiate terms that in a private transaction might have derailed it, whether because there was emotion involved in the process or just a lack of experience dealing with roadblocks for a first or even second time selling a business might be completely new to you.

For us, across 400 deals and various people in the team have experience in mergers and acquisitions doing much larger deals than we do at FE International at the moment. We’ve seen a lot over the years.

Patrick: I like your emphasis on just two willing parties, willing professionals, attempting to get into a transaction together. That was definitely the vibe between Beth and myself when we were doing this transaction.

One of the things that goes into that, typically, for many businesses, there is a handover period where the two sides have agreed to have the seller participate in the business for a period of time while the buyer learns the ropes of the business.

That was very important for Beth, as she bought a fairly significant asset, and also for myself because I wanted the business to be in good hands, and for the customers of the business to have a good experience as Beth and her team were getting spun up on it, so that they knew how to continue supporting the business, continue growing the business and that the business’ reputation and the ability to service customers won’t be negatively impacted by the handover.

Thomas: Yeah. The handover period is always important, and it’s something that we insist on. We won’t even take on a deal if the seller’s plan is to sell the business and leave on day one and never be contactable again. Depending on the size and place of the deal, the buyer and the terms, we generally look for a transition period that’s just a month.

In much larger deals, and quite often I hear of private deals that have been done, they sound great on the outside, but when you actually look at the terms they’re really not great at all, because it involves two years of consulting or something on those lines.

Generally, we look for a 30-day transition. Ultimately, like you say, it should be a transaction between two willing parties. The contract here is to buy a business that you want to take over.

You shouldn’t really be entering into a transaction if you don’t trust the other party, and while you obviously need the contract to protect both parties if there are any issues. It should very much be fundamentally built on trust and goodwill, and ultimately two parties who actually want to deal with each other.

That’s almost as important as the actual deal terms. Quite often people just assume that getting the highest bid is the most important part of the process. We quite often get asked why we don’t run an auction format or bidding format.

It’s exactly that. Your $1 million offer might actually be better than the $1.2 million offer that has slightly worse terms attached to it, and a buyer that you don’t necessarily think is going to be a good fit.

Particularly, in the case of your business and quite a lot of other clients we deal with who were relatively high profile, it’s important for them to see their business and their legacy to continue to run properly. That transition period and a fair contract negotiation is very important all round.

Patrick: I was overjoyed that you found Beth and her husband, who were both schoolteachers in the American public school system, to run the business. I had been offered a few times privately for acquisitions of Bingo Card Creator over the years.

Largely, they were by, for example, affiliates who were attempting to separate UK retirees from their pension checks with gambling affiliate sites, yadda yadda. That was not what I wanted to happen to this business that I had run for five years as a labor of love. I did want it to be turned into just another scummy site on the Internet.

I’m very happy that it got used by someone as a stepping-stone in their online business career. It will continue to create value for teachers in the United States and the rest of the world and teaching kids how to learn to read. Yay.

Thomas: Yeah. Absolutely. It’s great to hear. It’s always good to hear those success stories down the line, that there’s nothing better from a broker perspective to hear that you’ve got two very happy clients 12 months down the line.

Anyone can get a deal over the line at the time, but making sure their firm is doing well 12 months on is really great too.

Patrick: One of my other desiderata was I knew I was going to be very, very busy with my new business this last year. Bingo Card Creator had been in a period of benign neglect for two years prior to the sale, where I was continuing to do routine customer support and the servers stayed up and running. But I wasn’t really driving the ball forward.

I have to report that after the transition period went over without a hitch, I have been able to mentally separate myself from the business. I’m presuming, because Beth hasn’t emailed me in a long time that the business is continuing to go pretty well for her.

Part of me always has the occasional itch to check in and see how things are going, and part of me is like, “No. Wait. That chapter is over. Time for a new chapter.”

Thomas: Yeah. Absolutely. Especially with sellers whether you’re in a portfolio or they’re quite active online like yourself it is quite important. Another reason for people to sell in the first place is because they really want to focus on one thing. Being able to let go seems very difficult upfront. Many people don’t even think they’d be able to do it.

Ultimately, if you find the right buyer, you’re not losing sleep at night. The business you’ve spent so many years working hard on and ultimately built a really great reputation on the back has been run into the ground in matter of months. That’s another reason why it’s quite important.

Patrick: That leaves us at a pretty good point for wrapping up the episode. Two little notes before we go. Number one, I still own Appointment Reminder, but if you’ve been following in the rest of this episode, you probably have a pretty good idea of what my mid-term plans are for it. [Patrick notes: cough Short-term plans now.]

If a slightly used SaaS business with slowly growing revenues [Patrick notes: 30% or so YOY] is something you would be interested in talk to this guy. Thomas, how can people find you on the Internet?

Thomas: The best thing to do is visit our website, which is You can always contract via our contact form. If you go on our blog, we have content quite broken down into buyers and sellers.

If you’re looking to potentially sell a business and you don’t necessarily want to get on the phone with me or someone on the team, we have a exit planning course, which is a free email drip course, which, I believe, actually you recommended, we launched about a year ago. That’s now out.

We also similarly for buyers we have an ebook call about introducing you to the process.

If you’re actually looking to selling out, you go straight to our seller site page and enquire. We’ll give you a free evaluation. If you’re looking to buy have a look at our buyer website page. If there’s anything on there, get in touch and someone from the team will reach out.

Patrick: Particularly, for those of you who are looking to sell, A++, would do business again, will do business again with Thomas and the team. But regardless of whether you end up using them to represent you or not, I would definitely solicit their opinions with regards to what the next steps are for your business, given your life/career plans.

If nothing else get their checklist on doing due diligence, etc., because it will make your life much, much easier as you get closer to the process, because these are very complex things even at the lower end of the scale.

When I sat down and made a trailer board of all the tasks that I would need to do prior to selling the business, I got 60-odd items. Your guy’s help was pretty instrumental in putting that together.

Thanks very much for taking the time with me today, Thomas.

Thanks very much for all of you guys for tuning in to the podcast. Wow, two episodes in two months, breakneck speed for us. Hopefully we’ll be back in the next couple of weeks with another great guest.

Thomas: Yeah. Thanks a lot.

Kalzumeus Podcast Episode 12: Salary Negotiation with Josh Doody

Several years ago I wrote a blog post on salary negotiation for engineers. This probably created more value than anything else I’ve ever written — I have a folder in Gmail with thank-you messages from people, and my running total is something north of $2.3 million in added salary per year, mostly in $15k to $25k chunks.

A buddy of mine, Josh Doody, has decided to thoroughly own this area, and published a book (Amazon link) on the topic. I rather enjoyed the book, and thought I would have him on the podcast to talk about the topic in more detail.

[Patrick notes: As always, the below transcript occasionally has my thoughts inserted in this format.]

What you’ll learn in this podcast:

  • How to avoid the “What is your desired salary?” question
  • How to trade off across multiple axes when doing a salary negotiation (salary, vacation days, equity, etc)
  • How to get raises after being hired

A brief announcement: Keith Perhac and I have parted ways with regards to the podcast, amicably, largely due to scheduling issues. Both he and I have been quite busy with business and life, and we’ve moved to different countries, so we’ll be running our podcasts independently in the future. We’re still great friends and will probably appear on each others’ programs occasionally.

MP3 Download (~49 minutes, ~42MB): right click here and select Save As.

Podcast format: either subscribe to in your podcast reader of choice or you can search for Kalzumeus Podcast in iTunes, Overcast, or another aggregator of your choice.


Salary Negotiation with Josh Doody

Patrick McKenzie: Hideho everybody. My name is Patrick McKenzie, but I’m known as Patio11 on the Internet. This is the 12th episode of the Kalzumeus Podcast.

Things are going to be changing a little bit. Keith Perhac and I have been co-hosting this podcast for the last couple of years, but we’ve moved in different directions in our personal and professional lives. Both of us have young daughters. We’re now living in different countries. It’s difficult for us to make the time to do this on a weekly basis as you might notice because we’ve only done 12 episodes in something like four years now.

We’re going to be podcasting independently. We’ll probably still be guests on each other’s programs in the future as is now, I guess, just the “me” podcast for the moment. I’ll have a variety of guests on.

Today, I’ve brought Josh Doody. John is a buddy of mine. We came up in the MicroConf community together. We play poker occasionally in Vegas. Josh is actually good at it. I’m not.

Josh has written a book called “Fearless Salary Negotiation” [Patrick notes: if you prefer Amazon it’s here] That’s what we’re going to be talking about today. Salary negotiation pitfalls before getting hired and after getting hired, specific mostly to software people, because if you’re listening in this podcast, you’re probably a software person, but widely applicable to folks from all walks of life.

Josh, thanks for coming on the podcast.

Josh Doody: Thanks for having me Patrick, it’s great to be here, can’t wait to chat.

(Not) Answering The Dreaded Salary Question

Patrick: Thanks so much for talking to me today, Josh, about this. One of the things that I hear a lot from people when we’re discussing the question about their job searches, specifically how the job search that relates to their final salary offer. Somewhere early in the process, they get asked a very terrifying question, you want to talk a little bit about that?

Josh: Yeah, I call it the dreaded salary question. It’s something that when you hear it, it will immediately sound very familiar, but the question is something like, “Where are you right now in terms of salary and what are you hoping for if you make this change?”

I think that particular question catches a lot of people off guard and makes them very nervous. They don’t know how to respond to it and also I think they feel like it’s a gatekeeper question.

They’re thinking, “I’m interviewing right now and I want to keep interviewing, and I want to do well in the interview, so I should just tell them the answer to this question, so we can move on.” I think you and I both agree that’s a pretty big mistake.

Patrick: The reason this question is dangerous, for those of you who haven’t experienced it before, or aren’t familiar with this line of conversation is that if you actually give a number in response to this question, that’s going to immediately cap your negotiator range.

If you say for example, “My current salary is 90,” then they know that anything above 90 is an improvement to you, and it would be too grave for you to say that. Even if they would have been willing to pay, let’s say 110 to the right candidate for this position, they’re probably going to offer you 95 and then walk it up to 98, 100.

Then you lose out on $10,000 right off the bat, plus the benefits that are tied to salary, say your 401K matching, plus the compounded growth of that salary over your next three years with the company, plus the anchor to your next salary, and every other salary for the rest of your career.

This question doesn’t sound like, “Hey, I’m trying to cheat you out of $100,000” but they’re trying to cheat you out of $100,000 when they ask this, and they know this. Every hiring officer knows this. This is covered in books, literally, you can you buy them on Amazon, but they’re going to ask it anyhow, with a smile on their face, just to see.

A lot of people, even a lot of very smart, smart engineers, folks who do hiring for a living even, will just straight up answer this question, and then face palm, but then it’s too late. How do we get out of answering this question?

Josh: That’s a good question. I think you did a great job, by the way, of summarizing why you don’t want to disclose it because you’re forced to, more or less, throw a number out, and guess that you’re in their range, and you’re probably not. How do you answer it? First of all, I am not a proponent of lying on these questions.

I think some people want to know, you know, “Should I just name a really high salary?” or something like that, and I think that’s not the way to go. The best way is to be honest. I mentioned, when I summarized the question, that there are really two components, your current salary, and then your desired salary.

I think the best way to answer the current salary part is to say something, like that you’re not comfortable sharing that information, and you prefer to focus on the value that you can add to the company, and not what you’re paid at your current job. I think that’s a very honest answer, I think it helps you demonstrate that you want to add value to the company that you’re talking to, and that’s a good sign, and it’s a good signal to send to them.

In terms of the desired salary part of it, I prefer to focus on, again, the value that you can add. My kind of pat answer to this that I like to suggest is, “I want this move to be a big step forward for me in terms of both responsibility, and compensation,” and I think you’re signaling a lot of good things there. “I want to do more than I was doing before, I want to get paid more than I was doing before, and I want this to be a big step forward,” by not giving that juicy nugget of information, which is your desired salary.

Patrick: I like both of these tacks for answers, both because they avoid the tactical trap of giving a number, and calculating your negotiating range, but they also advance you in the negotiation in a way that might not be totally obvious. In both interviews and negotiations, everything that you say is bits of evidence that the company is going to use for the decision to give you an offer, and to craft that offer to you, so you want these bits of evidence that you’re giving someone to resound in your favor, across all sort of axes.

Obviously, just like when you’re answering interview questions in a technical interview, you want to say, “Yes, I know my stuff cold, stuff that I don’t know I can learn easily, yada, yada,” and when you’re answering these softer questions, you want to come across like a competent, confident professional that will be easy to work with.

Often, the people that you are going to be having this conversation with are either business people or have this self-conception of themselves as business people as opposed to, say, techies. The ability to look someone in the eye and negotiate confidently is something that they associate with high performers, with people that they want to be working with. It’s probably something they see in their self-image.

If you perform wishy-washy in the negotiation, they count it as a strike against you. If you whine about it like, “Aw man, I don’t know,” then they might count that against you.

If you can say, “Look, I’m not comfortable with giving that information,” or, “Let’s circle back to that later,” or something which demonstrates you’re in control of this part of the interview, even when you’re not, they will read that as better than you might expect.

One of my favorite ways to get around the, “What’s your current salary?” question is, “I’ve been entrusted with a variety of information by my current firm. I intend to keep their confidences on that sort of thing. They consider their salary compensation private.

I think you can appreciate this because after I start working with you, I’m also going to be entrusted with confidences of your firm, and I intend to keep those confidences in the exact same way.”

It’s almost impossible for that statement to be actually be a lie. With Josh, always give true answers to questions but give tactically optimal true answers. It’s highly likely that your current firm considers compensation to be a very, very private thing, so just say that and add a quick, professional refusal.

Then, you’ve got to stick to the refusal when they poke you on it, and they’re going to poke you on it. Josh, what do you say when they say, “Yeah, but, I need a number to go forward.”?

Josh: I think, by the way, everything you just said is fantastic. If they keep pressing you, you can continue to stonewall. One answer that I like to give, especially on the desired salary side is something like, “It sounds like you’re trying to qualify me for a range, and if that’s the case, then I’m happy to let you know if your range is in the ballpark.”
You’re still not committing to the range, but you’re basically giving them an out if they are trying to qualify you for a range. You can say, “Basically, why don’t you tell me the range?” You’re trying to gather information while withholding information. I think that’s the bigger picture here. You alluded to this.

You only have so many pieces of information at your disposal when you begin a negotiation with a new company, really maybe two or three. One of them is current salary, one of them is desired salary, maybe another one might be how desperate you are to take the job.

On the other hand, they have an infinite, almost, amount of information relevant to what you have including what they’re willing to pay the position, which you generally don’t have a clue about.

If they continue to press, it may be effective to say, “Well, if you’re trying to qualify me for a range, why don’t you tell me the range, and I’ll tell you if I’m in the ballpark?” You’re still not committing, but you are saying, “I’ll entertain your range, and I’ll let you know if you’re way out of bounds,” which could be good information for you, as well.

Patrick: If they refuse to answer with the range question, that’s something that regards in your favor, as well, although you don’t get a bit of useful information. It gives you a socially acceptable out to say, “OK, no. We’ll both keep our cards close to our vest. That’s fine.” That’s probably not the first thing I would say about that.

I might say, “We’re both in this industry. We probably have a range of numbers that would work for us depending on the specifics of the offer, but I think the most important thing at this stage is to make sure we’re a great fit for each other.

Clearly, your company only hires people who are capable of performing at the highest levels, and I only want to go into a position which will be a meaningful step up in my career and where I can do work that really matters, so let’s make sure that we’re the right fit for each other.

If we’re the right fit, we can figure out a way to make the numbers, the vacation time, the package work. If we’re not the right fit, then we shouldn’t spend time worrying about the numbers, because we’ll never go forward with this anyhow.”

It’s a good way to kick the can down the road to a later meeting.

Josh: Yeah, I agree. It’s also a great way, again, to emphasize the value that you believe that you bring to the table for the company. It’s another opportunity to ring that bell while still not giving them the information that they’re asking for, so I like that answer a lot, too, quite a bit.

Patrick: This is another reason, by the way, to kick this can down the road. You often get asked the salary question very, very early in the process. In some cases, before you’ve had the opportunity to demonstrate much value at all. It’s highly disadvantageous for you to be coming out of the blue and saying, “I want 150, and you don’t know me from Adam.”

If you’re in a position where you have to say a number, you want to be saying that from a position of relative strength where they know about your accomplishments, they’ve seen your performance in the interview, they’re already thinking, “Yes, I definitely want to hire this person if we can come to a deal.”

Then when you say a number, that’s a number that can be worked with rather than naming a number which they might perceive as high, which would cause them to mentally check out from the conversation earlier, or even there’s high numbers and there’s high numbers.

Someone prior to having a good understanding of what your level of skill is, they might think that they’re unwilling to pay 150, but if they were aware of how good you are, they might be totally willing to pay 150.

If they think they’re unwilling to pay it and they don’t have any information to, to use a poker term, level you about where you are on the skill ladder for them, you might never get the chance to demonstrate how good you are. They will just select you out of the process early to save everyone some time.

You definitely don’t want to be getting into a deep conversation about salary, benefits, etc. until you’re at a point in the negotiation with them where they’re sure they want you if they can come to a deal.

I describe that as “yes if” rather than “no buts.” Yes, we’ll hire you, if we can come to a deal, rather than no, we don’t want to hire you, but we might be able to hire you if you’re really, really cheap. You never want to be coming in under that set of circumstances.

Josh: Yeah, I totally agree. I love the idea of thinking of it as kicking the can down the road as you continue to provide more information to the company that you’re talking to in terms of demonstrating competency and ability to them and the value that you’ll bring. Obviously, the longer you have to do that before they make their offer, the better.

That’s my overarching interview strategy is that you just continue to pound them with how much value you can bring to them and how you’re uniquely qualified to do the things that they need you to do, which then, in their eyes, raises your value to their firm. Obviously, the longer you have to do that, then the more value you can demonstrate.

I also like that you emphasized there, again, there’s still an honesty component here. I always emphasize that you should be honest.

I think it’s an honest thing to say, we nibbled around it here, “I don’t know what a good number is, because I have no idea how you value my skill set, and how you pay other people at your firm, and what sort of value I necessarily add in a monetary sense to your firm. I just don’t know.”

In a way, like you said earlier, this is a signal that I know that it would be foolish for me to guess at that value. It’s not wise for me to guess, and I can shoot myself in the foot, so I’m just going to defer and allow you to make that judgment for me and tell me about what you expect the value I’ll bring is.

We’ll wait as long as we can so I can continue showing you how valuable I’ll be as an asset to your firm if we get to that part of the process.

Patrick: You can explicitly say things like, I don’t know if I would use the exact words, “You have me at a disadvantage here,” but I like the tact that Josh just took which says that, “Look, you’ve had this conversation with many of the people who currently work for your firm.

You know what the numbers look like internally, what your general expectations are, what your ranges are for various levels of seniority, you know what the firm’s needs are, and you know what the hiring market looks like in your area. You know all this much better than I do.

I’m just an engineer. I focus on doing very, very good work and let chips fall where they may on the money side of things, because I’m not in the business.

So, I trust you to give me an offer which will be consistent with your standard practices and with compensation in the industry. I expect you to quote a number which will be fair to both of us, and then we’ll negotiate honestly on it, but I don’t feel the need to dictate to you what you should be paying your employees, because obviously I don’t have that information in front of me.”

Then, of course, you are going to negotiate once you actually get to the point of talking about the offers.

Let’s speed this conversation along, conversation interviewing process. You’ve been screened. You’ve passed through the screening. You’ve had your interview. You’re at “yes if.” They’ve said, “We like you. We would like you to work at our firm. Let’s talk offer.” Where do we go from here?

Josh: At this point, you have spent a good deal of effort throughout the interview demonstrating your value as a candidate, so you’re also waiting for them to make the first offer.

We’ve been talking about kicking the can down the road in terms of talking about desired salary, deferring to their expertise and experience with evaluating the monetary value that you’ll bring to the company, so you’re waiting for them to make you an offer.

Just before they make you that offer, I think it’s very important to step back and think about what you what I call your minimum acceptable salary is. In other words, what’s the line in the sand for me that I must make either directly as the offer comes across or in the course of the negotiation in order to accept this position for this firm?

You can do that by evaluating your market value — there’s a ton of great data out there online — and estimating your value to this firm and this region with your skill set and experience, with your background.

Try to determine what it is for you taking in even subjective factors like do I want to move to that location, what’s the cost of living there, how much of a commute will I have, how much of a drain will this be on my personal life? All those things get wrapped up into this minimum acceptable salary number.

Before you even hear their offer, you should have this number written down somewhere. If it’s 70,000 or 100,000 or 150,000, you write that down and you have that line in the sand. That sets up your negotiation to be a lot more successful.

Patrick: I really like the idea of explicitly writing this down. I would literally write out on an index card and keep it in my pocket. Obviously, I’m never going to show them the index card, but partly it’s imminent strategy.

Partly, the psychology of this conversation is ruinous for a lot of people, particularly a lot of people who act like engineers. It’s a very, very high stakes conversation for you. It’s high stress. In the moment, you might say yes to things that you’re not truly happy with just to get out of this high stress situation where you find your mouth talks before you can even rein it in.

My sister, who literally is a recruiting manager, found herself given a number, and it went south before she could even call it back. This is her only job. You want to prepare for the fact that I know I’m going to be under stress in this situation. I’m going to pre-commit by literally writing the words, “I will not say yes to any offer under X.” Right there in your pocket.

I want you to write a second thing right under that. “No matter what their offer is, I will negotiate upwards.” I think this is important. If your line in the sand is like I need $110,000 and they come in with, “We think that we could see a way to paying you $125,000.” You don’t say yes. You say, “$125,000 is a very interesting number, and I think we’re close.”

Then, you negotiate upwards from 125. Do you want to riff a little bit on why this is so important?

Josh: There’s an obvious reason it’s important, which goes back to what we talked about earlier, which is, you don’t know the maximum number they’re willing to pay.

My whole negotiation strategy that I write about in my book and everywhere else that I write is that you don’t know what the max they’re willing to pay is, so your task is to determine that number, to find that number, and you do that by negotiating.

First, you don’t give them any anchors to use when they’re setting your offer amount. They make you an offer. Then, you negotiate above that offer. Your whole goal is to essentially make them a little bit uncomfortable, push them right up to the tippy-top of their comfort zone so that you know that they’re giving you the best possible salary that they can give.

The only way that you can do that is by negotiating. Obviously, even if your minimum acceptable is 110, they offer you 125, this goes back to why you don’t guess. Obviously, you’re pretty far out of line in terms of what you thought that they would pay you or what you think your value is. You’ve misestimated your value.

It’s time to negotiate, and you’re 100 percent right that once you get that offer, your next move is always to negotiate.

Negotiating Non-Salary Components of an Offer

Patrick: We’ve been talking about salary like it’s a single scale or number, but there’s actually multiple components to an offer. Many of them are interesting.

Typically, the salary one is going to be the number that has the most amount of leverage for you personally. It’s the easiest thing to get them to negotiate, because paying money is easy and scalable. That’s why we do it. Some other parts of the offer are less easy to change on a per-candidate basis for the firm.

You should consider any number that they put in an offer letter, whether that’s salary, whether that’s vacation days, whether that’s number of shares in the company, exercise window, yada, yada, in principle, every number is negotiable. They’re all variables. You can trade off a little on one number to get you to happier on another number.

This is probably the first thing you should say after they say, “We’re at the absolute top of our range on salary. I can’t give you a single dollar more.” You say, “I understand that. Let’s bracket the question of salary for the moment.” I like that phrasing, because it doesn’t say I accept the salary number.

Just tabling that for a second, let’s talk about number of vacation days. You were offering me 14. 14 is very generous, but blah, blah, blah, I like traveling, I want to have a little bit of leeway. Could you see a way to offer 20?

If they say yes, great, you just got six extra vacation days for nothing.

If they say, “Well, this is company policy. Everybody gets 14,” it’s like, “If we don’t have flexibility on vacation days, where do you suggest that we have flexibility?” They might come up with something which is not too useful for you like, “We will flexibly offer you anything you want to eat from our selections of lunches available,” which you say, “That’s nice. Try again.” [laughs]

They might come back with something like, “We could potentially up your equity grant.” This is important for many of the people here who are working for start-ups and negotiating equity grants. It’s just a very deep topic. We’ll link you to a post or two about the specifics of this, because they’re mind-bending if you haven’t done it before.

[Patrick notes: This topic is a little off the beaten path for me, so I’m going to point you at VentureHacks which has done it better.]

The thing I would suggest for negotiating equity grants is, A, make sure it’s in writing in, like, the form of an offer letter, and don’t negotiate that live. Almost certainly need to have an Excel model in front of you to be able to properly value equity grants.

That’s something, by the way, that you can do with any components of this. Rough out the offer and then get it in writing, which they’ll force you to do anyhow in the form of a formal written offer letter. Say, “After I have your formal offer in hand, I will take a day or two to think on it and then give you my answer.”

You don’t need to give them any reason for why you need to think on it, but it’s almost always to your benefit to take some time, get out of a high pressure situation, and then come back with an answer that you’ve slept on and are happy with.

Josh: I totally agree with that. To put a finer point on some of the things you said, for me, I always emphasize that base salary is the most important thing. It should probably be the most important thing to you when you’re negotiating starting salary. I could think of exceptions, but for the most part, I think that’s a good rule of thumb.

Then, you just prioritize the other things that you think might be available. Your tactic is really great, starting with something that’s important to you. If they shoot it down, then asking them what’s available, what levers are available to pull. I think it’s important to start with some sort of priority in your mind so you can try to get the best thing.

My general rule of thumb is if they say no or compromise on the last thing you suggested, then there’s room for you to continue negotiating. If you said, “I’d be more comfortable at 120,000,” they said, “Deal,” then you’re probably done.

If you said, “I’d be more comfortable at 120,” and they say, “Well, we can go as high as 115,” then, just like you said, that’s an opportunity for you to say, “I was hoping for 120. You said we can come up to 115. Can you do 115 and an extra week of vacation?” or, “Can you do 115 and whatever?”

Then, you start walking down that list until you get a yes or you run out of things to ask about. Then you know that you’re at 115 with the set of benefits that are available that can’t be moved. I think that’s a great strategy just to walk down that list.

Patrick: It might be worth talking about here one of the classic things in negotiation is worrying about your BATNA, your best alternative to negotiated agreement. This is something that business folks do all the time. In the event that this doesn’t go through, what’s the worst-case scenario for us?

In general, you don’t want your BATNA to be unemployment. [laughs] It will make this negotiation much better, both for salary and for everything else out of this process, if you have multiple irons in the fire.

[Patrick notes: BATNA means “best alternative to a negotiated agreement.” It is a very useful word to learn and keep in your mind when negotiating. Basically: what happens if you walk away at this point? You take your best course of action available without this negotiation happening.

For example, if you’re a consultant, your BATNA to someone asking to chip 25% off your rate is possibly either “You don’t bill anything for two weeks” if you have no pipeline or “You bill two weeks at full rate” if you have decent pipeline. If you’re in that second category, you should almost certainly not accede to their request. If you’re in the first, you probably shouldn’t either, but you might be tempted because your easily available options are not wonderful.

This is one of those concepts that you cannot “unhear” after learning it. The MBAs occasionally have useful technology to steal git clone and appropriate for our own purposes.]

How To Use Other Offers To Your Advantage

Patrick: If you’re actually searching for a job with multiple companies at once and ideally you have another offering in-hand already. How do you play this differently if I have an offer in-hand already?

Josh: To pat myself on the back a little bit here, this is one thing I really like about my strategy is that it all goes back to your minimum acceptable salary. That number will change based on objective measures like your market value, as far as you can measure it, and other things but also subjective measures like, “Is this your only opportunity or do you have other opportunities?”

If you have other opportunities and you have a sense of what the value of those opportunities might be, then you might adjust your minimum to be higher. If you have two offers in-hand, then your minimum for either will probably be a little bit higher knowing that your fallback is most likely the other opportunity.

The simple method that I use is I don’t suggest adjusting your minimum once you’ve set it.

However, if you are in a situation where you’re getting multiple offers or you have other opportunities that are coming and going, then you might be adjusting your minimum just based on the probability that you’re going to land another gig, or that you’re going to have a better gig, or that this opportunity that’s in front of you doesn’t necessarily have to be the one that you get.

My general strategy is, continue to monitor your minimum acceptable salary and account for the fact that you’ve got other opportunities. There are a lot more nuances that you get into when you’re mostly juggling timelines. You’ll get I’m waiting to hear on this offer and they want to know by Tuesday. What do I do?

That’s, I think, a little bit different conversation than what you were asking about. Adjust your minimum to account for the fact that you’ve got other offers, and make sure that you’re being honest with that minimum.

Patrick: Should I explicitly say to my counterparty at the company, “I have a competing offer here.” Should I tell them what the competing offer is? Should I tell them who made the competing offer?

Josh: I think that’s a matter of personal taste. I’d be curious to know what you think about that. In general, I think that the less information you reveal, the better, unless you’re positive that it’s going to have some sort of benefit.

Back to something that we talked about earlier when we were talking about the dreaded salary question is one reason that you may not name your currently salary is you’re trying to keep information between you and a counterparty, which would be your current employer or, in the case of another offer that’s on the table, that other employer.

I do think that probably your first instinct should be I’m going to demonstrate to this firm that I’m talking to that I’m going to keep our offer between me and the firm, if possible, and to demonstrate that, I’ll not tell them the details of another offer.

You might run a blur filter over it and say, “I’m not going to tell you who the firm is, but I have another offer, a strong offer, that I’m very interested in, so we need to work on your offer for me to continue negotiating,” or something like that.

Patrick: I like that lens. I wouldn’t lead with the fact that I have another offer. I’d probably keep that under your vest until you get to the point where they’ve given you an offer which isn’t competitive or which you’re not fully happy with.
At that point, you say, “I think we’re close here. It’s important for me to let you know that while I would really love to work for your company, I’m fairly decent at what I do, and I’m obviously searching for a lot of offers in parallel. There’s another offer on the table from a peer organization.”

That’s as specific as I would be: “a peer company.”

Start-ups don’t feel that they have to match offers against finance firms, and finance firms don’t feel that they necessarily care how they compare with Google, so you just say “a peer organization.” That’s as specific as you have to be.

A peer company has put an offer on the table which I felt was very fair, and I don’t want to have to make the decision to work for that company just based on numbers. I would love to work for you so much, so do you have any slack on your offer?

Then, see what they can do.

If they ask you, “What is that offer?” say, “Just like I won’t be sending them a write-up of our conversation, I’m not going to tell you the specifics of the conversation I had with them, but trust me, I’m an honest professional.” If they don’t believe you’re an honest professional, then get out of this conversation, because you definitely don’t want to be working there.

This is, again, demonstrating competent, confident professional. You’re going to want to ask me some things that I do not want to answer, and that’s OK. We’re going to move on from that. If you attempt to brow-beat me about that, then I’m not going to wilt on this question, because this is what I do for a living.

A lot of engineers will read this as intransigence, a word I’ve only ever seen in print. They’ll think you don’t lose points if you don’t immediately roll over. This is the opposite of how business people think. I think that people who roll over immediately are less trustworthy in their eyes than people who don’t. Don’t roll over immediately in the face of opposition.

Josh: You’re dead on there about the signals that you’re sending. We talked about this a little earlier with the dreaded salary question, too. It’s sort of a double whammy if you just close that information.

Not only have you given away a few of the bits of information that you had that were unique that the company doesn’t have, but you’ve also sent a signal to them that you may not be the most savvy businessperson or the most savvy negotiator. You may not be someone who can be depended on to be left alone to your own devices because pressure gets to you and that sort of thing.

Even if it’s not an explicit evaluation that they’re doing of these things, it could be a subconscious thing. It could literally affect the offer they make you if they just think that you’re a weaker candidate because you’re too easy to push around.

There’s a lot riding on staying strong, setting boundaries, and sticking to the rules that you lay out during the negotiation to signal to them that you’re a serious candidate, and that you understand business, and you understand what you’re doing, and that you’re not going to roll over for them.

Patrick: I had an incident which put this in a sharp relief back during my consulting career. I was in negotiation with a prospective consulting client for a deal which was in the bag. He loved me. We had worked together informally for a bunch of years.

Then we got to the number question, and I said, “My rate is X, but because I like you, I’ll give you half X.” He told me, years later, “Yeah, I almost exited the conversation at that point.” He was face-palming internally.

I was like, “Of course you did, because I’m sending the signal very strongly that either I’m lying about my rate generally being X,” which I wasn’t, I was being totally honest about it, “or that I’m a terrible, terrible businessman to be in business with.”

I was just willing to give him 50 percent, negotiating against myself for 50 percent, which is an absurd discount, without even any hint of pushback from him on the number that I had said. I’m signaling all the sorts of the wrong things during that.

We eventually got the engagement done at half of my rate, and it was successful, but it got the engagement off on the wrong foot and cost me a whole heck of a lot of money without meaningfully improving anything about that relationship. Don’t do that to yourself.

Josh: Yeah, you signaled either that you are lying about your rate or that you don’t believe your own rate. Either way, it’s not good. Either way, you’re sending the wrong signal to them about how much of a professional you are and the quality of your work.

Negotiating A Raise While Staying At A Company

Patrick: We’ve talked a little bit about how to negotiate the salary before you’re hired. A lot of engineers ask me, “How do I negotiate a salary once I’m hired? I feel like I haven’t gotten a raise in a while, or market conditions have changed, or I’ve gotten better at my job, I’ve been given more responsibilities. I think I’m worth more. How would I go about getting that?”

Josh: This is a really common concern, and it’s quite a lot different than what I call a starting-salary negotiation when you’re changing firms. When you’re in the firm, things look quite a bit different. You mentioned earlier, for example, your BATNA.

You are not typically in a situation where you’re going to draw a line in the sand and say, “I’m leaving if I don’t get this,” so it’s a much more collaborative conversation where I think it’s even more imperative that you demonstrate value and quantify that value to your manager and to whoever else needs to approve the raise that you’re seeking.

My general strategy is, first of all, you hit the nail on the head with things have changed since my salary was set, so I need to estimate what my current value is to this firm. You do that, again, by doing a market value estimation, using the tools that are out there, talking to peers and colleagues, even people that work at the same firm, figure out what they’re making.

Little sidebar, people are uncomfortable talking about salary. I think we all know this. A nice tactic that I like to use when you’re trying to figure out what somebody makes is to ask them a hypothetical about someone just like them working at a company just like theirs.

People are surprisingly willing to say, “Hypothetically, somebody with my skill set and experience at my firm if they were hired tomorrow would probably make about X,” and it’s usually going to turn out that X is really close to their salary.

That’s a nice little workaround there to figure out pretty precise estimates of people’s salaries without actually asking them outright what their salary is.

You aggregate this data and get a sense of I think my value, my market value and my value to this specific firm, based on my experience here, and the responsibilities that I’ve taken on, and all that good stuff is some number. That’s your target salary. I think it’s good to have a target salary in mind.

From a manager’s perspective, if you imagine what it’s like to sit on the other side of the table, vague requests are very hard to satisfy and specific requests are very easy to evaluate and usually satisfy.

If you go to your manager and say, “I would like a raise because I need to make my car payment. I just bought a Ferrari.” Your manager, first of all, doesn’t have a lot of incentive to cooperate with you because he probably doesn’t care that you bought a car, and you buying a Ferrari doesn’t add value to the firm.

However, if you go to your manager and say, “I would like a raise because these conditions have changed. It’s been this long since my salary was set, and I think my value is closer to this other number,” then you have a conversation that can be very productive. Your manager has very specific, tangible things to evaluate and give you feedback on.

I think you should start by figuring out what your target salary is. Then, it’s important to catalog all the things that you mentioned earlier in terms of what are the things that are different now than they were when we set my current salary.

Am I leading a team and I wasn’t leading a team before? Have I learned new technology? Am I managing more projects? Am I managing a bigger portfolio? Am I doing more sophisticated reporting that demonstrates what my team is up to? All these things that you could be doing, I call them your accomplishments.

You want to specifically catalog what are the things that you’re doing that are adding additional value since your last salary was set. You also want to get social proof. I call it accolades. What have other people said about you?

This is usually somewhere in your inbox. You could search for things like “thank you” or “awesome!” and look for proof or feedback from clients and colleagues that demonstrate that you’re doing a great job, you’re going above and beyond.

This way, even if your manager hasn’t been paying attention or hasn’t had time to really think about what you’re doing, you can say, “These other people have been paying attention, and they think I’m doing pretty great.”

That all bundles up into a nice, tidy package that you can then present to your manager saying something along the lines of, “It’s been 18 months’ salary was adjusted. I’ve done some research. I think my value to the firm is probably closer to this other number.

Here’s all the stuff that I’ve been doing since my salary was last set to add value to the firm, to continue to take on responsibility. Here are a few things other people have said about me. Can we talk about getting a raise to X for me now?”

Then, you’ve turned it loose into the wild by proposing that to your manager.

Patrick: I also like to have this conversation be partly retrospective and partly prospective about your future value to the company. You’re going to be earning the new salary over the course of weeks, months, potentially a year or two in the future.

You’re not talking about your last, say, 12 months of accomplishments to talk about what got done within the last 12 months and you’re going to compensate me in the future for what I did in the last 12 months. Those salary checks have been cut. You’re even with regards to the last 12 months.

What you want to say is, “The last 12 months proves that I’m on a growth trajectory. I will be producing even more value in the future. Ideally, the amount of value that I’m producing is already accelerating. Given that I’m going to go on to do great things in the next 12 months, let’s talk about how to properly compensate me in the moment for those great things that will be happening.”

This is one reason, by the way, where it’s good to time this conversation, if you can, after you’ve delivered a major project, for example.

Say, “We got this done, but I’m not going to rest on my laurels. My next big thing that I want to deliver for the company is X, Y, or Z, and while I’m delivering that great value, which is demonstrated by the great value that we’re in the nice, warm afterglow of at the moment, let’s talk about making this a mutually rewarding outcome.”

Josh: I totally agree. I think that’s a great tactic too is to essentially demonstrate to your manager that you’re going to continue adding value and probably going to continue acquiring new skills and taking on more responsibility at about the same rate you have for the past 12 months, so this is an investment on both of your parts. I think that’s a great tactic.

One other thing you can do to maximize your chances of getting that raise through are I actually like to put that request in writing. So, everything that you said verbally in your manager, summarize it in a nice, tidy email and send it over after you’ve had a verbal conversation in a one-on-one or a face-to-face meeting.

The reason for that is a lot of times, even if your manager agrees with you, the next step will be they’ll have to go to their manager or somebody else and start the approval process for a raise. Typically, you’re not doing this to get a one-percent raise. You’re doing this to get an extraordinary raise.

It usually will require an approval process that could be grueling. It could be four, five, six people deep.

Giving them your written case, summarizing all that effort that you put into building your case, in an email gives your manager something that they can circulate so that now everybody who hears about the raise request that you’ve made also gets to see that accompanied by your case in writing.

Obviously, you’re going to do a better job of making your case than anybody else. That’s one more layer to the process that I like to emphasize.

Patrick: Plus, this makes it easier for your manager rather than forcing them to make the case and giving them additional work, which would be the lower priority for them than the work they actually get scored on. [laughs] It wraps it up nicely in a bow for them. Again, giving people the image of you as competent, professional.

It’s easy for just talk with your manager to be read as just talk, or maybe they don’t read it that way but they treat it as just talk. It’s like, “Yeah, Josh was grousing a little bit about his salary, but everybody grouses about their salary occasionally.” Professionals, when they want something done, they put it in writing. That’s a core professional skill.

When you put something in writing, in a well-written, formal request, you’re saying, “This is a request. You can say no to it. You can say yes to it. Because we’re professionals, when I put a formal request in writing, you are expected to act on it rather than just not acting for the next two weeks and seeing what happens.”

You can follow up a week later. Again, follow up verbally first, but then with email. “Boss, I’m just inquiring on the status of my raise request. Is there any additional information that you need to help make the determination to grant my request?”

I would approach it from the perspective of you’re not asking for the moon and stars here. You’ve earned this. It’s very obvious that it’s in the company’s mutual interest to keep you happy. You’ve calculated a number that will make you happy.

Enter the negotiation from the perspective of ”I assume that the company is going to say yes to this if I figure out the right words to say for you. Tell me what the right words are.”

Josh: That’s exactly right. I think everything you’ve said there is spot on. You want to make your best case but also present a professional front. You have to follow up. I think following up is something important that is overlooked.

You don’t verbally request, and then send an email, and then just forget about it and hope the raise happens. You’re probably going to need to ask again in your next one-on-one. You’re probably going to need to follow up on that email a week or two later. You might have to do that several times. As you mentioned, Patrick, there are specific job responsibilities that your manager has that are probably more important to the company and to him than your raise.

You’ve got to stay on the radar and keep on it and keep demonstrating that you’re engaged and that you would like a response.

Patrick: The potentially uncomfortable question comes up: what if you’ve topped out a firm, you’re at the very top of the ranges? The firm might not be keeping pace with salaries in the industry. Perhaps they’re at the limit of their actual ability to pay with their business model when compared to, say, the Googles of the world that are spinning money every day.

When we do make the decision that we need to have other offers on the table? Do we communicate that internally? How do we think about whether we want to jump?

Josh: It’s a great question, and it’s something that even in my book, it’s the unhappy coda to the raise and promotion process. Like I said, this is not the same as a salary negotiation where you’re evaluating your BATNA and you’re just going to walk away. You may actually have to walk away, even if it’s delayed.

If they say, “We’re not able to accommodate your raise request,” then I think the first thing you want to do is figure out why. You mentioned the term “topped out.” I actually take that term a couple of ways. The first way is the way I think you attended it which is the firm simply cannot afford to pay you more money for the role that you’re in for whatever reason.

It may be that they’re not plush with cash, or maybe they’re stretched for whatever reasons, the financials aren’t great. Maybe the role that you’re in is a valuable role elsewhere, but maybe not for your particular firm to the level of value that you’ve estimated. I call that being other-valued as opposed to over or undervalued.

It’s also possible that you’ve topped out in terms of the salary available to you in your current position, so you may actually be having the wrong conversation. You may have asked for a raise, and it turns out that giving you a raise would bump you into the top of the pay range available for the job that you’re in.

You, in fact, may be better off, then, trying to discern from your manager whether your raise is not the right request but you need a promotion, which will often come with a raise.

That’s the first thing to determine is why am I not able to get this raise? Is it because the firm cannot afford to give me a raise, or is it because my salary is more or less maxed out in my current pay range?

Patrick: Thinking about it from the firm’s perspective, the reason they have salary ranges for particular positions is they’re not just buying your time. They’re buying 30 units, which the firm considers more or less isomorphic to you at the moment, and the expectation of having these conversations hundreds of times with people who are in a position similar to you.

If having the conversation with you requires them adjusting their salary ranges, they get tremendous leverage with regards to that… in a bad way. [Patrick notes: It is positive for you when you create leverage which multiplies your effect across all of the firm’s clients, projects, or revenue. It is not so positive when the fact of having you at the firm increases costs across their entire engineering employee base.]

They might think, “Oh man, this is committing us not to giving this particular person $10,000 extra this one time, but rather paying 10,000 times the number of people we have in this position times the total number of employee years we expect to pay for this position from now to infinity.”

That’s a tremendous amount of disincentive for them to bump up their ranges just to make you happy. If “all you’re talking about” is just getting a promotion, you mean we don’t have to pay more for every other software engineer II for forever? We just have to put one person into the software engineer III bucket? Easy to do.

Josh: Exactly. It’s a much easier transaction often. Sometimes the benefit of that promotion, in that case, is that you’ll also get a raise built in. Sometimes it’s a lock-step raise and sometimes you’ll also get to negotiate for that raise in the same way that you did before.

It could also open up quite a bit more room for you next time you pursue a raise without going into the minutia of a pay raise or salary grades. Moving up into a new pay grade often means that your ceiling has just also moved up in terms of available salary. That’s a move that you want to pursue.

Usually your manager will be able to tell you. Sometimes they’ll think they have told you this. You might need to ask for clarification, but it is important to know, were you unable to give me a raise because the firm cannot afford to pay me more or because I’m in the wrong job? Then you have a much better picture of what your next step should be.

Patrick: Also an important thing: they might not say it in as many words, but it is possible that they might decline a raise because they do not have the same view of your accomplishments that you have of your accomplishments. It happens all the time.

There’s a variety of actions forward that you take if you get that signal. One option is doing the same amount of work and making sure that value is surfaced better within the company. If you’re doing great work and you’re in a position where great work is not being rewarded, then that should be a big, flaming signal that you should get into a position where great work is rewarded.

This is partly projection, because I spent six years in a variety of traditionally managed Japanese organizations, which are not set up to reward great performance, to put it mildly. Don’t work for people who don’t appreciate what you bring to the table.

That is a trap you get into, and it is highly unlikely that you will successfully change the company culture to suddenly start rewarding performance. Rather, get yourself to a position and to a company that feels like great work is something that’s worth paying for.

Josh: You just used the “culture” word. You end up quickly in this squishy area where it really depends on who your manager is and what the company culture is.

Some managers are very open. You’ll go to them and say, “I’d like a raise to this number. Here are the reasons that I think I deserve this raise.”

They’ll say, “I understand that you feel that way. However, here are the things that I’m seeing from my perspective. Here are the KPIs [Patrick notes: key performance indicators, which is MBA speak for “metrics you’re held accountable for”] that I’m measuring, the goals that I had for you, and here’s why you’ve fallen short so far. You haven’t earned the raise that you’ve asked for.”

That’s a good manager. A better manager is, “And here’s a plan that you and I can work out together to set a target time frame and responsibility bar that you need to achieve in order to get the raise that you’ve asked for.”

So that’s on the table. It’s not on the table right now, but here’s what you need to accomplish and here’s about how long I think that it will take us to get there to get you that raise.

On the other side of the coin is the sort of manager that just won’t engage. They’re too busy doing other things or they don’t want to ruffle feathers. A lot of managers simply don’t want to stick their neck out for people.

Detecting that can be frustrating but is also an important signal, like you said, to understand that it doesn’t matter what I do, how much value that I think I’m bringing or I am bringing, it can’t be rewarded at this firm for whatever reason and I might need to look for alternatives.

Patrick: If you hammer out a plan with your manager, again, be the competent, confident professional and follow up on that conversation via email.

Hey, Bob, thanks for having the conversation with me earlier today. I understand that you feel now is not the right time to grant my formal request for a raise, but I like the plan that we discussed where we have committed to revisiting this question in six months contingent on me achieving the KPIs X, Y, and Z, that we will reopen this discussion with an eye towards granting me the raise of Y.

Put it on paper or email, whichever. Even just announcing in writing, making sure we’ve captured that whole identity agreements. Bob might not be with the firm in six months, and you don’t want to be starting this conversation entirely again over with the person who replaces Bob.

Also, it is highly likely that Bob considers your salary less salient to him than, say, Bob’s salary or anything else that Bob is working about.

Bob might have totally forgotten this conversation in six months, so be able to have something to point to him like, “Hey, remember this conversation that we had last July, a whole lifetime ago? Well, I’ve kept up my end of the bargain.

With probability approaching the sun rising tomorrow, because you are a competent professional yourself, you are going to keep up your end of the bargain.”

Josh: Exactly. You would want to bring it up maybe not every one-on-one. If you meet with your manager once a week for a one-on-one, you might want to bring it up once every three or four weeks.

Say, “Hey, by the way, I’m still working on this plan we put together. As far as I can tell, I’m on track. What do you think? Here’s what I’ve accomplished since we set the goals,” and that kind of thing.

Keep it a front of mind thing for you, because now you’ve actually got a concrete set of things that you can do to demonstrate that you’re ready for that raise. Also for your manager so that there are no surprises when you show up out of the blue and say, “Here’s all the stuff I did. I’m ready for my raise.” It’s easier to take it incrementally.

Patrick: When you deliver on a huge project over the interval or when you hit one of your KPIs, you’ll tell your boss about this. In the email that you send out grabbing credit for it, remember to forward that email on to your manager with a quick note like, “Hey, Bob, first one out of three, knocked it out of the park. Still working on Y and Z, I’ll send you an update when it’s ready.”

“Hey, Bob, X and Y are done. Just Z left to go.” No surprises. I think that’s a pretty good place to leave us off for this conversation, unless you have anything else you want to add.

Josh: I feel good about it. I think we covered a lot of ground. I like that we got into raises at the end, so I feel like we hit a lot of the highlights and gave a pretty good overview of the before you’re at a firm to when you’re there and to what you can do to continue pursuing salary increases as you go. I think it was good.

Patrick: Thanks very much for taking the time to chat with me today, Josh. If any of you have questions on this or any other topic, my inbox is always open. I’m [Patrick notes: patrick at the domain you’re reading this transcript on]. Josh, if folks want to reach you, what’s the best way to do that?

Josh: The easiest and fastest way to get in touch with me is probably just to reach out on Twitter. I’m @JoshDoody on Twitter. You can find my blog and other things I’ve written at

I’ve also set up a special offer for Kalzumeus podcast listeners today over at Throughout the podcast, Patrick, you and I talked about estimating your market value and then leveraging that market value to request a raise later on.

I’ve got a great offer with a couple of guides on how to estimate your market value, how to request that raise, and even an email template that you can send to your manager with your written request after you’ve made it. That’s, and that’s a free offer that you can go download.

Patrick: Thanks very much for taking time to chat with me today, Josh. Folks, I really recommend his book. I’ve read it cover to cover. It’s exactly what it says on the tin. It’s a full book devoted to this question, which I think is really, really worth your time considering the amount of leverage you’ll get out of the salary negotiation question.

I would encourage you to read that in whatever form and definitely subscribe to Josh’s list. He’s got great stuff coming about this all the time. Thanks so much for talking with us today, and we’ll be back in a couple of weeks with a new episode. [Patrick notes: Yeah really — recording one later today, as a matter of fact.]

Links from the episode:

  • Fearless Salary Negotiation: book and Amazon link
  • Give Josh your email address and he’ll give you a freebie here (you should totally have one of these for any podcast appearances or conference presentations you do, by the way — it works like gangbusters specifically because it gives the people who got the most value out of your expertise the easy and accessible option to hear more from you)
  • Josh Doody’s site and Twitter: @JoshDoody

Developing In Stockfighter With No Trading Experience

Starfighter is a company which makes fun programming challenges. One of our goals is inspiring engineers to take a whack at problems they might assume are “too difficult for me.” Both sets of levels for our first game, Stockfighter, give copious opportunities for this: one set has you do algorithmic trading and one set has you do low-level C and assembly coding, reverse engineering, and security research.

In my experience, the modal web developer probably does not believe they can do algorithmic trading or reverse engineering of assembly code. We strongly disagree: every great developer you know got there by solving problems they were unqualified to solve until they actually did it. That’s why we’re making an environment to let you sink your teeth into fun, hard problems at your own pace, in a supportive community, with us taking care of the scutwork so you can focus on the intellectually interesting bits.

I wrote the algorithmic trading levels (with, I rush to add, no background in finance myself), so I thought I’d write a little bit about how to get started with algorithmic trading for a generalist programmer.

(If this is the first time you’re hearing about Starfighter (the company) or Stockfighter (our first game), you may wish to read or why and how we’re intent on spending the next few years of our lives fixing dev hiring. If you’ve heard of us before and are wondering “Yeah yeah, when do you launch?”, the honest answer is “We bit off a very aggressive engineering schedule between building a stock exchange and an entire C toolchain. The last few months have been pretty rough, but we’re almost done. The game is feature-complete, in private beta now, and will be coming to an Internet near you ‘shortly.’”)

Mea Maxima Culpa, Finance Programmers

I apologize in advance to experienced finance programmers — some of this is simplified a little bit for general consumption. Other parts might accurately reflect how Stockfighter’s simulations work but might not be maximally true-to-life, as we occasionally have to break with reality for pedagogic or player-experience reasons. (Also, it’s entirely possible that I’m wrong with regards to details — feel free to ping me if you think I have material errors. They’re my fault rather than that of our trading advisors.)

The Problem Stock Exchanges Solve

Andy wants to buy a stock. Beth wants to sell the same stock. A stock exchange gives Andy and Beth a place to transact where they know there is a high likelihood that a willing counterparty (someone who takes “the other side” of the trade) exists.

The stock exchange is built around a data structure called an order book. An order book records orders: offers to buy a stock or sell a stock. By convention, these are called bids and asks respectively. (If you need a mnemonic, try “both ‘bids’ and ‘buy’ begin with ‘b’”, but you’ll have this in your muscle memory by your second day of writing trading systems.)

For a trade to happen, a bid and an ask must cross: that is, the maximum price the buyer is willing to pay must be greater than or equal to the lowest price the seller is willing to sell at. You might find it handy to remember those prices as ‘limits’, for reasons which will become obvious later.

An order book is a prioritized queue (or two of them: one for bids, one for asks), ordered by “priority”: “What is the first order that an incoming order would cross with?” There exist a variety of prioritization schemes at various exchanges, and they have huge impacts on how trading happens on those exchanges. Stockfighter assumes the simplest and most common algorithm: price/time priority. Basically, an order always interacts with the best priced order on the opposite side of the book first. Ties are broken by the timestamp that the exchange accepted the resting order at.

Since the order book is split into two parts, it’s often useful to know what the best bid and the best ask are. This is often called the quote. It is expressed as “$BID / $ASK” or, in spoken language, “$BID by $ASK.” For example, if I quote Google to you at $750.05 / $750.06, that means someone is willing to buy it for up to $750.05 and someone is willing to sell it for at least $750.06. (More sophisticated traders might want to know the size available at those levels. A level is simply a price. Why not call it a price? I have a sneaking suspicion Wall Street invented many of these words to give customers the impression “This is all really, really difficult — pay us money and the complexity goes away.”)

The Fundamental Order Book Algorithm

There exist multiple order types which an exchange can support. By far the most common is a limit order, which can be understood as “I want to buy X shares (or as many up to X as I can) for a price which is no more than Y” or “I want to sell X shares (or as many up to X as I can) for a price which is at least Y.”

For each limit order the exchange receives, it checks:

  1. Does the order cross with an order presently resting on the order book? If yes, they match, for as many shares as possible (up to the number specified in the order).
  2. Is the order fully satisfied yet? If no, goto 1 until the order no longer crosses with anything on the other side of the order book.
  3. Is the order fully satisfied? If no, the remainder of the order now rests on the book.
  4. For each order we matched with, write the fact of the match (the fill / execution) to the tape.

Steps 1 through 4 are, essentially, atomic with regards to all orders on the stock exchange. You’re guaranteed to not have two orders interleave execution — only one order is incoming at one time. It is either fully processed (potentially with part of it coming to rest on the book) or canceled before the next incoming order is processed.

The Tape(s)

Markets are by nature distributed systems. To simplify all participants having the same view on reality (or as close to that as possible), they typically have a relatively slow way to get a current snapshot of the order book and relatively fast ways to get a stream of deltas to the order book as they come in — new orders, order cancellations, executions, etc. That stream is called a tape, because way back in the day it was physically printed on a ticker tape.

The Stockfighter exchange implementation exposes a few tapes to users: one of all executions (with a new message for each execution) and one of all quotes (with a new quote — containing an at-a-glance view of the order book state and last trade — each time someone either sends in or cancels an order).

Stockfighter also does not, at this point in time, directly expose orders/cancels via a publicly visible tape. This is a considered game design decision for Chapter 1. I’m calling this out here as “A significant way we deviate from reality”, which we’ll do any time we need to to make the game more fun for players.

Order Types

We discussed the simplest and most common order type, limit orders, above. There are many order types supported by exchanges in the real world, all of them offering some benefit to at least some exchange participant. (Exchanges make money on every consummated trade, and they’re in vicious competition with each other for business, so they generally want to innovate on order types which offer particular customers things those customers want. They are constrained by the law and “not advantaging any participant overmuch against other participants, because that would chase the disadvantaged participants to a competitor.”)

Stockfighter supports three order types besides limit orders:

Immediate-or-cancel (IOC) orders: Exactly like a limit order, except if there is a part of the order which is not filled, that part is canceled rather than resting on the book.

Fill-or-kill (FOK) orders: Exactly like an immediate-or-cancel order, with one wrinkle: if the order can’t be fully filled for all shares it requests, it is canceled without causing any executions. (On real exchanges, this is sometimes described as “immediate-or-cancel all-or-nothing”, or “IOC AON.”)

Market orders: Market orders are what mom-and-pop retail investors use: they include a direction (buy or sell) and a quantity of shares to transact, but no price. They execute instantly and take whatever price the order book offers, again matching the most favorable prices first.

Let’s Talk Liquidity

One of the fundamental problems with buying/selling anything at all is that one is not guaranteed to have a counterparty ready at any given moment. This makes it difficult to buy/sell your thing and forces you to take a worse price if you want certainty of execution.

Consider houses. Lining up a buyer for your house takes, typically, weeks or months of work. If you needed to sell your house not at “some time in the vaguely defined future” but “within the next five minutes”, you would have to offer the house at a tremendous discount to its market value. Similarly, if you wanted to buy a house immediately, you would probably need to pay a tremendous premium.

The housing market is said to be illiquid, or lacking in liquidity: you cannot conveniently transform houses into money or money into houses quickly without losing a lot of value.

The stock market is incredibly liquid: for any stock listed on an exchange, you can buy almost any quantity and sell almost any quantity, at any time the market is in session. No negotiation, no red tape, no uncertainty. Click a button on your computer and bam trade done.

This property of stock markets is optional, tremendously useful for some participants, and very not free. Liquidity is a thing that can be sold, and much of the money on Wall Street is made by selling it. Let’s walk you through how it happens, but first, a bit of an explanation about why people actually want to buy it.

There exists a tradeoff between price and execution certainty. If you send in a limit order, there exists the possibility that it will not execute. This probability is higher if the order wouldn’t cross with the current state of the order book, but even if it looks like it will, the market might well change before your order arrives at the exchange. Even if it looks like someone is willing to sell Google at $750 a share, if you send in a limit order for 100 shares at $750, you have no guarantee that you actually get any Google shares.

If you send in a market order for Google shares, you’re guaranteed to get all of them that you want (subject to the availability of them at any price), but you give up certainty about the exact price you get.

That’s a reasonable tradeoff for many market participants! A family doing some casual trades in their retirement account wanting to buy 20 Google shares (~$15,000 worth) doesn’t really care about the exact price they get. If Google moves by a few cents in the interim, that costs them only a few dollars of value. Oh well — they just want to have the Google, for whatever investing or speculative reason they had for placing the trade originally.

A professional trader, who cared a lot about getting the best possible price and was therefore willing to pay attention to the market all day, might say “Well, Google routinely swings around a bit, so I’ll put in an order at $748 and see what happens.” If they’re buying 10,000 shares at a time, that saves a meaningful amount of money… if that order gets hit at all. If they were wrong, then they don’t get their Googles… or they have to adjust their orders mid-day. That’s fine — executing trades is their job.

Market Makers And The Spread

So the stock market exists to connect Andy and Beth. What happens if Andy and Beth want to trade a stock but are not both in the market at the same time? Enter the market maker. Once upon a time, market makers were designated individuals (called “specialists”), but these days it is often just “anyone running a market making strategy.”

A market maker’s job is TTTaaS: Teleportation and Time Travel as a Service. Suppose Andy wants to buy at 9:15 AM and Beth wants to sell at 9:30 AM. If neither Andy nor Beth are willing to wait, no trade would happen, and Andy, Beth, and the larger economy are all sad.

A market maker says “This is solvable. I sell Andy the stock he wants to buy at 9:15 AM. I then buy the stock back from Beth at 9:30 AM. I charge them slightly different prices and make a modest profit for holding onto the risk for 15 minutes. Then I do this a lot.”

(That’s the time-travel aspect. The teleportation aspect involves cross-venue arbitrage. Too complicated for today, but know that it exists.)

The difference between the price a market maker is willing to buy at and the price they are willing to sell at is called the spread. If you put in a market order, you’re guaranteed to “cross the spread”, effectively paying the market maker a small toll for guaranteed instant execution. (If you don’t want to cross the spread, just put in a limit order such that it rests on the book rather than immediately crosses, and hope that that limit order gets hit — again, no guarantees there.)

How Wide Is The Spread?

The width of the spread — the price of liquidity — is set by the market, not the exchange. It arises from the frothy interactions of thousands of participants firing orders at the exchange.

In the bad old days before computers, stocks were priced in eighths of a dollar (multiples of 12.5 cents). The spread could never be any less than 12.5 cents, which is a substantial chunk of the transaction value for many stocks.

Additionally, specialists colluded with each other extensively, such that they agreed to quote only “odd eighths”, essentially widening the spread to an entire quarter. They collected a one quarter tax on every share of stock which traded, every time it traded, for decades. Specialists loved this system. Investors, not so much — somebody pays that tax.

These days the markets are decimalized — stocks trade in increments of a penny. (They are not allowed to trade in increments smaller than a penny, by federal regulation. This is unfortunate, because “the minimum spread is 0.01 dollars” is not any more rational than “the minimum spread is 0.125 dollars” — if someone is willing to provide liquidity for cheaper, we should encourage that.) Additionally, since anyone can trade from any computer hooked to the exchange, human specialists have largely been outcompeted by algorithmic traders — computers which place orders all day long trying to be the one market maker of hundreds who successfully captures that penny.

You may have heard about High Frequency Trading (HFT). There is no hard-and-fast definition of it. You should understand that most HFT firms are just executing market making strategies really, really quickly while in vicious competition with traditional market makers (whom they utterly crush, because computers are better at doing math fast than people are) and other HFT firms. This is a huge benefit to most people attempting to transact in a stock, because a) no one is forced to do business with the market makers (again, just use a limit order and accept the risk of not executing if you don’t want to pay for their liquidity-providing services) and b) the presence of HFTs competes the spread down to a penny in most highly-traded stocks. Since they’re legally prohibited from competing with price below the penny increment, they then have to compete on speed, and that competition has intensified to the point that HFTs routinely run up against “the speed of light” as an annoying constraint on their engineering teams.

What Is The Risk In Being A Market Maker?

Your job is teleportation and time travel. Bad news: teleportation and time travel aren’t actually possible. This means you take on risk.

Consider the case where Andy wants to buy at 9:15 AM and Beth wants to sell at 9:30 AM. The market maker is not aware of Andy or Beth’s plans and cannot be certain they will not change. The market maker also cannot know what happens between 9:15 AM and 9:30 AM. The stock that they sold to Andy for $40 a share could soar in value to $50 a share when Beth wants to sell, costing them a loss of $10 a share.

This risk is the economic justification for liquidity having a price associated with it. If it were as simple as accepting “Hey, hold onto this stock for 15 minutes and then someone will ask for it — you have no price risk at all”, then it would cost as much as a coat check (“We’ll just throw that in for free”), and not “a small amount on every transaction” which turns into “billions of dollars over the course of the year.”

(You might sensibly be curious as to the impact on individual investors. Fair enough. I’m a small retail investor who trades very occasionally. I ran the math and, on my portfolio of ~$80,000, I’ve paid approximately $6 to market makers over the last ten years. This compares to e.g. $500 or so in commissions to my discount brokerage.)

How Do You Manage Risk As A Market Maker?

This is the entire ball game. At the most basic level, you want to limit the amount of inventory you take in any stock in either direction and charge an appropriate price for liquidity.

Sophisticated market makers use statistical techniques, simulations, etc to try to guess the near-term future behavior of the market, using this to determine how much inventory they’re willing to hold at any given time and what prices to charge.

In the real world, market makers use a variety of other instruments to hedge their inventory risk with respect to any given stock. In the early levels of Stockfighter, we intentionally restrict you to thinking about only a single stock at a time (for simplicity), so your main levers are canceling your existing orders, adding new orders to the book at different price levels, and (in extremis) unloading your position by transacting with orders on the book placed by someone else.

(Probably another market maker. Fun fact: most orders resting on the orderbook at any given time, both in Stockfighter and in real life, are there because a market maker put them there. This was one of my fun takeaways from the research phase for this project: liquidity really does exist primarily because market makers are actively adding it.)

The Simplest Market Maker That Can Possibly Work

1) Guess a current fair price for the stock. (The midpoint of the current quote might be a good first approximation, or perhaps the last price a trade happened at.)

2) Put that price on a number line.

3) Draw three equidistant ticks to the left of that price and three to the right. The distance between the ticks is up to you — you could use a set interval (say, 5 cents) or something sized relative to the price of the stock (say, 0.5% of the midpoint price).

4) Send orders into the exchange such that you currently have orders to buy or sell at each of those ticks. Sizing is up to you: the simplest thing that can possibly work is just “pick a number and use it everywhere.”

5) Wait.

6) Did someone transact with you? Great! Cancel all your outstanding orders. Now, do it all again.

7) Keep doing this until you make a squazillion dollars.

This is about as easy to implement as it looks. (My first market maker clocked in at about 144 lines of Ruby.)

Shockingly, if you’re the only market maker in the market, this will actually work most of the time. The monopoly supplier of liquidity makes money virtually by definition, particularly when the market does not quickly move in one direction and stay there.

In real life, you’re not the only market maker in the market, and you’re liable to get crushed if you try this, as you’re going to be systematically outcompeted for trades which are safe and you’ll systematically undercharge for trades which involve risk. Also, in real life, other people can look at how you choose to do business… and they have a lot of experience picking the pockets of naive market makers. Don’t say I didn’t warn you.

Doing This In Stockfighter

Now that you know in broad strokes how to write a market maker, you’re probably wondering “OK, but how does one actually do that?

In real life, you’d post about $30,000 of capital (bare minimum) with a broker, get access to their API, and then try not to bankrupt yourself while you learn the ropes. I can’t recommend most developers actually try this.

In Stockfighter, your fictional employer in the fictional game will give you lots of fictional money, backed by a reset button should you ever run out. We give you access to a REST API, which has everything you need to send in orders, get the status of orders, get quotes for stocks, and what have you. You can connect to the various tapes provided by the exchange over web sockets, but this isn’t necessary for our earlier levels — the vast majority of players will just write a for loop and poll every few seconds for updates.

This would be problematic if you were competing on speed with a HFT firm, but not only are our bots written in Ruby and not designed to be speed demons, we intentionally hobble them in the early levels to make it an inviting experience for programmers new to trading. (Our stock market maker bot is also literally the first trading program I ever wrote and close to the dumbest a market maker can possibly be, so clocking it shouldn’t be that difficult.)

In real life, most exchanges expose a quirky protocol called FIX. Stockfighter will support FIX in a later release, but for our Chapter 1 release, we have a simplified REST API with JSON. You’ll end up doing things like:

POST /venues/FOOEX/stocks/BAR/orders

with the order:

  “symbol”: “BAR”,
  “venue”: “FOOEX”,
  “direction”: “buy”,
  “qty”: 20,
  “price”:  5100,
  “type”: “limit”,
  “account” : “OGB12345”, // your trading account (game gives you this)

and get a response back like:

  “ok”: true,
  “symbol”: “BAR”,
  “venue”: “FOOEX”,
  “direction”: “buy”,
  “originalQty”: 100,
  “qty”: 20,   // this is the quantity *left outstanding*
  “price”:  5100, // the price on the order — may not match that of fills!
  “type”: “limit”,
  “id”: 12345, // guaranteed unique *on this venue*
  “account” : “OGB12345”,
  “ts”: “2015-07-05T22:16:18+00:00”, // ISO-8601 timestamp for when we received order
        “price”: 5050,
        “qty”: 50
        “ts”: “2015-07-05T22:16:18+00:00”
      }, … // may have zero or multiple fills.  Note this order presumably has a total of 80 shares worth 
  “totalFilled”: 80,
  “open”: true

Take it from this web developer — you can be up and running on this API in a matter of minutes.

After you’re able to work with the API, you just have to use that to solve whatever challenge the level throws at you. One challenge might be “Here’s a venue (stock exchange) where a particular stock is traded by many bots, one of whom is running a poorly considered market making strategy. Implement a better one and make $X before time runs out.”

Our desired difficulty curve: our first level is a cakewalk if you’ve ever programmed with an API before. Our first few levels after that are solvable in an hour or so of donking around with the API. They range in conceptual difficulty from “A motivated CS102 student should be able to do this in a fairly straightforward fashion” to “You’ll feel pretty proud of yourself once the code works.”

We also have later, more challenging levels, calibrated to be a fun evening project for a developer skilled enough to make it to them. Many of the solutions would make a good conference talk: here are the dead ends I tried, here is the insight those gave me, here is the approach that ultimately worked, and here are the fun implementation details.

Affordances We Built To Make This Easy

Every public endpoint of our API is documented. This includes code samples, sample responses, commentary on how one would actually use that endpoint in an application, and an in-page API explorer so you can run ad-hoc queries without needing to write any code. This is courtesy of, which is one of my favorite new SaaS apps.

We’re not releasing the API documentation publicly until the game formally launches, to avoid giving anyone the ability to pre-write clients for the game. (Though that earlier sample probably gives you enough to predict most of the API… hmm… well, good on you if you can do it from that.)

We will not be releasing first-party libraries for the API at launch, to give the community the opportunity to build them for yourselves. (“Can I write a e.g. Python library for the API and throw it up on Github?” Heck yes. “Can I use a client library someone else wrote to let me focus on the fun work involved in solving my levels?” I’d personally be very disappointed in an engineer who, in 2015, defaulted to scratchbuilding their own clients for every API they consumed. Starfighter loves OSS and the OSS culture. Go nuts.)

You can, of course, use any language capable of driving a REST API to play these levels. Or curl, for that matter. (To quote Chris Rock: “You can drive a car with your feet if you want to, but that doesn’t make it a good idea.” Memo to self: add a Drives Car With Feet badge to the game.)

A Non-Trivial Sample Application

We built an in-browser trading application in React, which you’ll get instant access to once you open one of our trading levels. This interface is essentially what a day-trader would be working with… if their brokerage of choice made some pretty poor UX decisions because their dev team was one guy writing his first React app.

Wait, did I say that out loud? What I meant to say was: we produced an entire web-based trading interface, driven 100% through our API, which allows you to see the API actually getting worked with.


It has virtually complete coverage of our API, by necessity, so if you need to know how to e.g. interact with a web socket you can just right-click and View Source. We don’t “cheat” and do anything to make the API easier to consume for our own applications like e.g. adding private endpoints which pre-digest information for the client.

(Most of our bots don’t cheat, either — they interact with the stock exchange the same way your applications do, and have no privileged access to e.g. market data. There exist exceptions to this general rule, in particular, in Chapter 1 level 6. I won’t spoil it for you.)

Further Reading

If you’re having trouble visualizing what an order book looks like, particularly as it gets mutated in response to incoming orders, I recommend taking a look at Chris Stucchio’s examples in these three essays. They’re in the context of an argument that HFT is not as abusive as the engineering community often believes.

I happen to think that Chris has the right of that argument, but even if you don’t, read his examples closely, because Chris has a view of trade execution which can be reconciled with reality and Michael Lewis (of Flash Boys) does not, as you will quickly discover if you try to actually write out what Lewis says is happening in pseudo-code.

What Happens If I Can Make A Market Maker?

In the process of learning to build a market maker, you’ll both demonstrate substantial practical engineering skills (e.g. working with a novel API, dealing with state, modeling a data structure that probably isn’t built into your language already, etc), learn some fun new things, and get a whirlwind tour of common Wall Street activities.

Each level of Stockfighter introduces you to a challenge which builds on the last, in the context of a narrative taking place in a simulated world. You can’t possibly screw up anything so badly that the reset button won’t fix it, and no money is actually on the line.

For example, after you have successfully built a toy market maker, we might give you a new level where that market maker is exposed to harsher conditions and tell you to adapt to them. (Fun intellectual exercise: read the section on risk and try to predict what features of a trading environment would make a market maker’s job harder.)

Market makers are among the first of many concepts Stockfighter will teach you. Our intention is that many generalist programmers, including folks who have never had the opportunity to do anything more interesting than a standard CRUD app, will discover (or develop) depths of engineering skill they didn’t know they had. That’s awesome regardless of what happens.

Our games are free to players. Most players will be playing Stockfighter simply because play is fun. We’ll always support that, but we want to support the engineering community in more direct ways as well. If you find that you’re a better engineer than your day job needs you to be, we might very well be able to find a job more suited to your abilities. Our business is introducing talented engineers to clients who want to hire them. They pay us if they hire you. We’ll have about 15 clients signed at launch, ranging from Wall Street institutions (“Want to learn how to do this when it isn’t a toy?”) to non-profits to startups with interesting engineering problems.

The market doesn’t believe there exist enough engineers who thrive when given a novel, hard problem. We think you’re out there, in multitudes, and we think there exist many other engineers who are on the cusp of greatness. We want to meet you and geek out together.

See you in the game in the near future. If you’d like to make sure you hear when we launch, and you’re not already on our email list, fix that here.

Designing And Building Stockfighter, Our Programming Game

Stockfighter, Starfighter’s first programming game, is presently in private beta. We’re moving to dark launch (to clients and handpicked vict^H^H^H friends) next week. We’ll launch publicly immediately after the servers give us signs that they won’t go down in a roaring fire. I’d anticipate within 3 weeks of today, but you know how engineering schedules go.

(Starfighter is a company which is trying to solve engineering hiring. We make games/puzzles which one plays by programming. Think Minecraft meets Legos meets World of Warcraft meets a CS class — we’re giving people a fun little world to play in by programming with some pre-planted goals and then seeing what emerges. More on our website or here if you’re curious.)

I wanted to talk a little about what we’ve built and why, both out of general interest and because I know some folks want some direction for how to prepare. I’m going to take the liberty of not spoiling actual levels, because discovery of them is a lot of fun, but will focus on the setting, infrastructure, and design goal.

Picking The Fiction / Setting

We picked “cops and robbers on Wall Street” for the setting of our first game — making money by legitimate means (like charging for liquidity) and illegitimate means (like stealing it). Although my co-founders Thomas and Erin have done substantial work with securing real stock exchanges over their career, I have no particular background in finance. We’re also primarily interested in general engineering skills rather than e.g. quantitative trading specifically. So why start in finance?

Basically, rotating the player around a series of Wall Street institutions allowed us carte blanche to hang virtually any engineering challenge off a more-or-less cohesive narrative. Trading systems touch low-level coding, networking (all seven layers of hello OSI Model), APIs, end-user UI, databases, embedded systems, enterprise web frameworks, cutting-edge programming language research, Big Data, state management, etc etc.

The fiction also gives us excuses to be naughty, which is something we think many programmers are attracted to. Many CTFs (games which practice security skills) cast the player as a hacker breaking into something, which works to a point. You can get the same adversarial frisson in legal fashions on Wall Street, often by building things rather than strictly by breaking them. (Though, ahem, not all of the things our levels have you build are, strictly speaking, legal. That’s also part of the fun. The fact that you’re being naughty vis-a-vis institutions which are not well-liked in the programming community is also useful to us from a player-motivation perspective. I hope people will, in the course of robbing them blind, actually learn what major Wall Street institutions do for a living and come to a more nuanced understanding of their position in society.)

There are natural in-universe tie-ins for both player-versus-player contests (which we won’t ship at launch, but soonish) and for dealing directly with computer-controlled opponents. Wall Street is, after all, one big computer-controlled opponent.

Some folks have been surprised that our game is not more, you know, game-y. Couldn’t we have made e.g. an RPG or strategy game or similar? Yes, certainly, but we had some concerns of a social nature.

Cards on the table: I used to run a World of Warcraft raid guild before I went into business. (Business has less dragons and better loot.) My co-founders, on the other hand, feel about gaming approximately the way I feel about ballet: it’s great that it exists in the world and I’m glad people find enjoyment in it, but it isn’t for me. This view is shared by many talented engineers and would-be engineers.

As of 2015, we don’t gate entrance to the tech industry based on demonstrable enthusiasm for ballet. It is important to our founders that the industry is not gated by demonstrable enthusiasm for gaming-qua-gaming or related geek cultural signifiers, like e.g. a fantasy or sci-fi setting.

Starfighter doesn’t ever intend to build gates (gates close; that’s what they are for). We dynamite gates.

Tech Trees

Stockfighter is divided into tech trees. A tech tree presents itself to the player as a series of challenges linked by narrative progression and pedagogy. Learn a new concept; beat a level; get introduced to new levels where you can build upon what you build and what you learned. (Fun game design challenge: how do we not bust you back to a blank editor between every level while simultaneously not making it feel like you’ve “already done this.”)

In architectural terms, a tech tree typically requires additional back-end engineering work on top of our general platform, and also some front-end engineering to make it playable in the browser. (About which, more later.)

We’re shipping two tech trees at launch: automated trading and emulators and compilers. My co-founder Erin discussed writing our emulator already, so I’ll be covering mostly the trading tree today.

Automated Trading

Automated trading is the classic problem people think of when they hear Wall Street. It’s topical: Flash Boys (a book about high-frequency trading) was on the New York Times bestseller list. It delivers on the “make a squazillion dollars using only your wits” fantasy for the game. (“Fantasy” is, in this sense, a term of art from game development: much like someone writing a novel or screenplay, a game designer wants to have intentional control over the player’s emotional state. If you’d like to read more about this, Raph Koster’s A Theory of Fun comes highly recommended.)

In Stockfighter’s automated trading tree, each level gives you a new scenario (randomly generated and assigned to a wee little copy of the world accessible only by you) and a plausible set of objectives. You achieve the objectives by driving our REST API, using any language/stack/tooling you’re comfortable with.

What we built to support trading:

  • a limit order book, written in Go
  • a stock exchange front-ended by a REST API, written in Go
  • a settlement system, written in Go
  • a world simulation for a universe of fictitious companies, written in Ruby
  • several automated traders, written in Ruby
  • a game master server, exposing a REST API, written in Go
  • an internal message bus, about which more later
  • a blotter interface (similar to a retail trader’s web application — think “what I see when I sign into eTrade”) written in React and consuming the exchange and game master APIs

I wrote most of this myself because Thomas and Erin were doing the technically ambitious parts of Stockfighter. No, really, compared to their stuff, scratch-building a stock exchange is actually fairly straightforward.

Writing A Stock Exchange

My primary stack since 2010 has been Ruby on Rails. I love Rails, and we use it for our user-facing web application, but Rails is not the right choice to build a stock exchange. The biggest reason was concerns about raw performance.

Stockfighter doesn’t do “high-frequency trading” like Wall Street understands that term, although it does support (and have you actually do) what many lay people understand HFT to mean.

The difference is one of degree. Many lay people basically think that any algorithm placing orders is HFT. There are many prop shops — i.e. hybrid tech/finance companies using the company’s money to trade algorithmically — which have a timescale on the order of days rather than on the order of nanoseconds. Their individual orders (and the logic behind them) might be faster than a human can reasonably follow, but that’s still not HFT. (Acid test: if you have never worried about the speed of light between your systems, you’re not doing HFT. The amateur trading from London on the Chicago Mercantile Exchange using MS-Freaking-Excel to place trades? Not HFT, guys.)

We abstract the notion of time quite a bit, but it was obvious that each exchange was going to have to be able to process thousands of orders a real-life second.

This would be… challenging in Rails. Low-complexity operations which do need to write to the DB typically hit about 300ms in my Rails experience. (Better, more experienced teams like the folks at Basecamp have gotten it to 50~100 ms in typical cases.) We would need to do thousands of them a second and, unlike a typical web application, we a) have a bursty, write-heavy, uncacheable load by nature and b) have some severe constraints with regards to requests affecting each other.

Why? Well, it is a stock exchange. The order book — the list of how many shares at what prices are currently available to be bought and sold — is (conceptually) a singleton sitting behind a global lock. (Per-exchange — Stockfighter will simulate thousands of exchanges simultaneously, but architecturally, it needed to consider the “Thousands of people hitting a single exchange at once” use case from the jump.) This is getting all the player and bot interaction. The matching engine has to be completely done with a particular order before starting processing of the next one.

We solved this in a roughly similar way to a real stock exchange: the order book is persisted entirely in memory, in Go.

Stockfighter is my first production system written in Go. The Google (et al) performance wizards have absolutely delivered. The language screams and, happily, it is possible for a mere mortal to actually ship a web server with it. (Note “server” but not application. More on that later.)

Incoming orders from the REST API or our internal message bus are passed to a single goroutine which manages ingress and egress to the order book. This goroutine writes the results of those orders to a series of tapes. A tape, physically, a buffered channel with a servicing go-routine. The tapes are then consumed by other parts of the systems to e.g. send execution notices to players/bots, update the quotes displayed by the API/UI, etc.

Our exchange is blazingly fast: we can process fairly complicated orders matching against a filled order book in on the order of 100 to 200 nanoseconds. Read operations are even faster. (I might eventually figure out some way to re-architect the exchange such that reads don’t touch the matching engine at all, but at present some of them do. Whoopsie.)

This is good — it allows players substantial latitude for experimentation with trading strategies (including ones which push the performance envelope), lets us run dozens or hundreds of bots per player, and keeps our infrastructure costs down to “less than a small fortune.” (We’re on EC2. At release, pending understanding how many users we have and what their typical behavior is, I anticipate that we’ll have a count-on-your-finger number of t2.micro instances for the stock exchanges.)

Getting this working was a bit of a beast. Our order book is represented internally as a red-black tree (Go implementation via GoLLRB). I had never actually used a red-black tree since finishing my CS degree. (Well, OK, they’re sitting down somewhere in MySQL or Postgres but I’ve never had to actually think about them before.) This is a preview of coming attractions for Stockfighter: even when we aren’t explicitly making tech decisions for pedagogic purposes, modeling the complexity of the stock market is a real engineering workout versus e.g. the typical CRUD application.

Bonus points: most players will, at some point, choose to represent the order book on their own machines. This is foundational to many trading strategies. If you want to golf cycles off to make your code faster, that will a) directly advantage you in later Stockfighter levels and b) be a fun opportunity to play with algorithms and data structures.

A quick case for a LLRB for the order book data structure: they tolerate arbitrary writes and deletes very well, are sorted, and let you do things like “Iterate over every price point on the tree from the low-price side and give me everything until you count up this many shares and do it fast.”

My main issue in this part of the development was managing concurrency. If I had cottoned onto the wisdom of the common Go pattern “Make a server object with one managing go-routine and have it tightly loop on a single channel of incoming requests” earlier, I probably would have a avoided a whole lot of deadlocks, crashes, and concurrency bugs caused by e.g. reading the order book for GET /venues/FOO/symbols/BAR at the same time a match was ongoing subsequent to someone POSTing a new order.

Stock Exchange Simulations

There exists substantial prior art on funny-money stock exchange simulations. Most of them are cunning artifice — you’re not actually trading with another actor. When you put in an order, you receive the results suggested by a stock market simulation. Amalgamated Cat Food (ACF) is up today — you paid $45.32 for your shares! But you didn’t buy them from anyone. Your account just got incremented, but there is no corresponding sell anywhere. Your counterparty is a fiction.

There are excellent engineering reasons to do this and I won’t knock their decision, but Stockfighter had different goals.

Why? Well, a lot of the fun engineering problems in trading are caused by it actually not being reliably the case that you send in an order and it gets unproblematically matched at “the price.” Markets are distributed systems. The exchange’s view of reality and your trading system’s view of reality are, by necessity, separated by the great firewall known as “physics.” For maximum possible results, you have to be able to do things like accurately predict what the future state of the exchange is, because the order you’re composing right now will arrive in the future not the present, while being cognizant that your present view of the exchange’s state is actually the exchange’s past.

Sound hard? It is hard. You don’t have to worry about it for the first couple of levels… well, actually, let me take that back. We do not intentionally expose you to the speed of light as a limiting factor early in Stockfighter… but we can’t remove latency as being an actual limitation distributed systems have to overcome.

Here’s an example of how this manifests: I was very frustrated during development at one point, debugging a level I had written. The blotter interface was showing a quote with an ask for 500 shares available for $100. (You’ll pick up the market jargon quickly — an ask is an offer to sell a given quantity at a given price. If they want to buy, it’s called a bid.)

I sent in a market order for testing. A market order is a special order type which doesn’t specify a price — it says “I’ll pay literally anything, I just want guaranteed execution of this order immediately.” (Aside: Stockfighter will quickly teach players in a visceral fashion why Wall Street considers people who place market orders to be idiots. Use a limit order most of the time. If you need instant execution, use fill-or-kill or immediate-or-cancel with a suitably-generous-but-not-actually-unbounded price attached.)

My order came back saying that I had bought 0 shares. And the quote from the exchange now read “500 shares available at $120.”


After a lot of spelunking, I figured out what happened: there was only one bot on the ask side of the order book during that level. That bot had an order resting on the book displayed on my screen. In the time between I hit the button and my order reaching the exchange, the bot had hit the REST API to cancel its order. Then my order arrived to an empty book, soaking up 0 shares. It was then canceled (because market orders are instantaneous). The bot then replaced its order, causing the exchange to issue a new quote, which made it back to my PC before I had time to blink. From my imperfectly attentive human perspective, it looked like the exchange and the bot were intentionally colluding to abuse me.

They’re not.

But that sort of interaction — orders resting on the book, cancels, timing issues, different views on reality, profiling incoming order flow (as reflected by the quotes or execution tapes) and using it to send in or cancel orders faster than the incoming flow can itself adjust, using executions from one exchange to drive decisions to send orders to another exchange, etc, are all so fun to play with. And to do that, you need other agents participating on the exchange with you, rather than the exchange being a single-player experience.

Enter the bots.

Writing Bots

Since player-versus-player interaction causes a lot of social issues which we weren’t ready to design for for release, and since players are not reliably available to play a) at your skill level b) right-the-heck now, we knew we wanted AI to trade against for most levels. (Aside: We’ll support PVP in some levels of later chapters, for those players who enjoy it. If you just want to treat Stockfighter like an intellectual exercise and never have to worry about another human during your experience, that is a game mode we will always support.)

It fell upon me to write multiple trading algorithms. For context: I have an undergrad background in AI (enough to know that it’s largely not applicable to the problem at hand) and most of my investing experience was simply buying-and-holding rather than trading actively. (Aside: retail investors should not trade actively. If someone thinks Stockfighter has given them the confidence to try actively trading for real, I will bang my head into the wall several times and wonder how we can make the next chapter more clearly communicate how ROFLstomped one will be if one tries that.)

Luckily, the market has participants operating at all levels of skill. Markets are aggregation mechanisms for price signals, and they come to surprisingly sophisticated behavior even when composed out of relatively unsophisticated individual agents. As soon as we had multiple bots operating diverse strategies, we started to see fun emergent behavior.

An example, hopefully without spoiling too much: I did a technology preview of the game with a friend who has a Wall Street background. The only actual goal-oriented level in the game at the time was our tutorial, which just has you buy 100 shares to prove you’re mechanically capable of doing so.

(Aside: I could describe level 1 as “FizzBuzz for a REST API”, but we don’t. FizzBuzz is widely used to quickly weed out non-programmers from engineering hiring processes, but the experience of being asked to do it is a little off-putting for experienced developers. Giving people an actual fun goal — demonstrate mastery over a new system! — allows us to covertly test core engineering skills without writing This Is A Test Of Core Engineering Skills at the top of the screen.)

Anyhow, my Wall Streeter friend sailed through the tutorial and asked what was next. I told him “Well, content-wise, I’ve got nothing. But you’re hooked up to a stock exchange and all the other participants are idiots. What do you think would be fun to do?” “How dumb are they?” “Pretty dumb.” “So dumb they would follow the stock all the way down to zero if someone was to manipulate it?” “Umm… I don’t know.” “Let’s see.”

Five minutes later, we had verified that unplanned interactions between bots who a) don’t collude, b) don’t know of the existence of each other aside from seeing the order book, and c) have no mental model of the player can in fact successfully model sheer, unrestrained terror if a player manipulates the market correctly.

We’ve found a small number of not-too-complicated bots to be the gift that keeps on giving for level design — remix them and tweak parameters and the behavior of “the market” is different on every playthrough but roughly configurable in advance. This made level development much, much less expensive than I had modeled it out as.

We’re shipping with six trading levels, but we’ll have Chapter 2 out the door with more, probably within a month or two of release, and we intend to continue shipping new chapters every 6~8 weeks, indefinitely.

Another fun thing consequence of being a games company: in real life, when the state of the art advances in trading algorithms, you throw out everything that was done before because it would now be predated heavily. Being predated is a victory condition for us — it means levels are winnable! As we get better at building trading algorithms internally and/or hire experts to do it for us, earlier dumber bots don’t end up as bitrot, they end up as valuable game content. For example, the bugged momentum following bots which were proximately at fault for the market cascade were too disruptive to keep in that level… but, well, they’re now a resource that one can deploy to a variety of purposes.

Even after we have very sophisticated market makers (if that is a new word for you, I promise, you’ll understand it by the end of level 3), our idiot market makers are still valuable content for people who are still learning the field.

Simulating An Entire World Economy

Stockfighter’s trading levels are about trading rather than investment. It’s important that the markets dance to an internal logic, but it is less important that that logic be particularly complicated. We wanted the companies at issue to have plausible behavior — some do well, some do poorly, some are stable, some gyrate, and sometimes the entire market goes into bull or bear mode for uncertain reasons before unpredictably reversing. We’re not really concerned, though, with e.g. line-by-line analysis of the earnings report for Amalgamated Magitek Corporation.

So we faked it. I’m going to elide the details of the fakery here. Our order book and exchange server work like they have to work, so I’m happy to spill beans about implementation details. The world simulation, though, is “security sensitive” — if you understand the world simulation you can predict and influence the future. That’s an I-Win button for most of our trading levels.

“What if players reverse engineer your world simulation?” Then I pin a freaking medal on that player (and ask whether they’re happy in their current career).

I think you’ll be pleasantly surprised with some emergent features of the simulation.

At present, it’s totally opaque — the only thing you’ll learn about Amalgamated Magitek Corporation is what you surmise based on seeing a market for its shares develop organically out of the actions of various bots.

Some of the bots are performing market functions which are neutral with regards to the underlying, like a market maker. Some of the bots actually do care about AMC. Well, to the extent that a 200 line Ruby script can care about an earnings report.

It’s not perfectly realistic and isn’t designed to be.

For one, we abstract time heavily. It’s a lot more fun to play through one trading day every 5 seconds and thus get a year’s play done in a 30 minute session of watching your script run than it is for that to just represent the quiet post-bell lull in the morning on January 3rd.

For another, again for maximum fun, our simulated world is more volatile than the one we actually live in. The in-universe financial press would be an impossible job for someone who wasn’t actually manic depressive.

In the future, we’ll expose various elements of the simulation to players. For example, there is an in-universe Twitter. Seriously, that is an actual thing that exists. I pipe it to a text file and tail -f it as a debugging tool, because otherwise it is difficult to figure out whether e.g. the price is cratering because I inverted a comparison somewhere or the price is cratering because Amalgamated Magitek Corporation was hit with a terrorist attack.

The Magitek industry is, as they say, “politically exposed.” Plucky teenagers with outrageous hair hate them and blow up their buildings with disturbing regularity. They just have no consideration for the Imperial Pension Fund’s AMC holdings or the chaos that news will unleash on the markets.

(Aside: geek references are capped at about 5 to 10% of the stocks in the game — you’ll also see a lot of things like Red Tree Agriculture or Uganda Mining Inc. We also reference various things that only have value in a fictional universe, like unobtanium or Bitcoin.)

(Aside: I promise that’s the last Bitcoin joke I’ll make until we ship our cryptocurrency tech tree some months from now. Actually, no, I can’t promise that.)

Anyhow, we’ll expose the in-universe Twitter directly to players in a later chapter. You can try your hand at doing things like e.g. sentiment analysis or trading on news generated by the world simulation before other trades can react to it.

The best example yet of the flexibility this simulation gives us is in the 6th trading level. I won’t spoil the details here, but after I beat it the first time, I told Thomas and Erin “This level is why I signed on to this project.” It’s the capstone for the trading tree in Chapter 1.

A particular fact is inserted into the world simulation and bubbles up to the stock exchange. You’re asked to discover the fact. There are literally infinite ways to do it.

Players getting to level 6 are by construction pretty good at programming and will have learned enough about market microstructure to be effective at trading. Level 6 is, let me not mince words, hard. You have to synthesize what you’ve learned about market operations, about our particular implementation, and then stir in some special sauce of your own… and we give rather little direction on what that sauce needs to look like.

I expect that level to be very challenging, because it is totally out of left field, but it also rewards creativity. You can Big Data your way through it. You can Hadoop cluster your way through it. You can probably solve the hardest phase of it with an Excel spreadsheet. You can use Statistics 101 (if you figure out the right question to ask). You can even solve it by eyeball if you parse the right data and graph the right thing about it. I expect players to do all of these things, with substantial variation. I also expect the unexpected, in spades.

We can’t wait to see what you come up with.

Level Design

Again, no spoiler on individual levels, but I’ll talk about what makes a good level from the perspective of Starfighter.

Appropriate challenge progression: Our desired curve is:

  1. Early levels: Solvable by people learning to program with effort approaching an undergraduate lab session. Cakewalks for professional engineers.

  2. Middle Levels: Solvable by people who possess professional-grade engineering skills, even if they may not have professional-grade titles yet. Expect the level to require a bit of thought and execution quality but not to have much technical risk.

  3. Later levels: Solvable by very skilled engineers, but requiring an investment of effort, and having a corresponding emotional payoff for it (a sense of mastery, learning new skills that you could reasonably take with you, etc).

I was asked how we difficulty curved our levels. My design process was to throw out a lot of real-world trading problems (thanks a million to our advisors from industry; all mistakes in interpretation are our fault alone), winnow to the ones which seemed most amenable to working on our system, and then arranging them in rough order of difficulty assuming the player takes the most straightforward route through the level. I then wrote ourselves a few levers for difficulty — for example, parameterization of the level goals (e.g. if it is too hard to make $1 million in a simulated year, edit a YAML file and now players only need $250k) and providing instructions/hints.

While we’re doing our technical burn-in, we’re also collecting feedback on whether we guessed right on difficulty levels.  We can titrate how difficult a level is in production by choosing between e.g. giving no instructions on the path forward, saying something like “The path forward is obliquely suggested by the API docs.”, giving in-universe hints in e.g. the level briefing, giving out-of-universe hints, and directly telling players “Here’s one way to do it; you produce code to that.”

Players can, naturally, also do this, which suggests that our earlier levels are likely to get easier over time as e.g. better tooling is available on Github or people post walkthroughs. That’s a natural and not-unhappy result from a game design perspective.

Variety: Starfighter is a company, not a one-off event or a mobile game. We expect to (eventually) have a relationship with players which is denominated in years, not minutes. Accordingly, we want to produce regular content updates with them feeling sufficiently distinct from each other that there is a reason to play.

Variably difficulty: We wanted players to be able to Choose Their Own Adventure. If you want to pick the most straightforward solution for a level which works, blast through it, and move on, go for it. If you want to golf your solution, go for it.

Some of the most fun I’ve ever had with another team’s CTF was on Stripe’s 3rd CTF, where automatic detection of e.g. program speed supported a thriving optimization metagame. An example: some players looked at a fly like “An O(N^2) loop which compares text word-for-word against a world list.” and eschewed the flyswatter “An O(N) loop which compares against a hash table.” in favor of an orbital ion cannon like “Pre-compile the dictionary into the executable as a trie or bloom filter.”

We have per-level leaderboards which give people a meaningful number to golf on, and additionally, we have discretion to (automatically or after human review) award additional badges for going above-and-beyond on a level. We’ll also do that outside of levels, too — I can imagine issuing badges for people who, e.g., write OSS clients for our API, submit documentation patches, responsibly report security issues, etc.

Specified goals. Unspecified solutions. A common pattern in CTF development is “Make a program which conforms to this toy interface.” A lot of the work on the player’s side involves understanding that interface (and, often, the undocumented quirks of it). The interface often dictates exactly what your algorithms/structures/general approach need to look like.

We prefer modeling the actual practice of engineering, where you build stuff not to satisfy an arbitrarily defined interface but to achieve some motivating goal. Figuring out what to actually build to achieve the goal is a substantial portion of the challenge of real engineering work — and a whole lot of fun! (Also, companies hiring engineers right now are often looking for folks who can, given an underspecified goal, successfully reduce it to working computer code.)

This lets us support multiple solutions trivially, if we pick goals which are sufficiently robust. Luckily, the Wall Street fiction gives us numerous options. I mean, when in doubt it’s “Here’s the world; make money.”, but things can be arbitrarily rich.

This also has some unplanned for benefits from our internal engineering perspective. The modal level orchestration for our trading levels is roughly ~50 lines of Ruby code. Most victory conditions can be evaluated in a function with less than 10 lines. (Level six? The most fun I’ve ever had which was judged by a single string comparison.)

Level Orchestration

We have a GM server (“Game Master” is an RPG term): it a combination simulation of the world, judge, orchestrator of the non-player characters (bots), and opinionated producer of fun.

Our GM server is written in Go and exposes a REST API. (You could, in principle, play Stockfighter entirely through curl if someone told you what URLs to hit. That would be pretty spiffy. Tell me if you manage to do it.) This accepts commands like e.g. POST /levels/foobar, which creates a new instance of the foobar level.

GM’s level orchestration logic is actually kicked out to Ruby, mostly because I develop Ruby much faster than I develop Go and, since this code is less performance intensive than the stock exchange, we had some flexibility. Levels are plain-ol’ Ruby whose design was heavily influenced by Rails — convention over configuration, lots of reflection used to locate files given predictable naming schemes, etc. They also have a YAML configuration which allows us to adjust e.g. which bots are present in the level, what instructions are given to the player, etc.

The bots… well… every project which ships ships with one decision that you feel the need to say “Look, I know, I know, but it actually worked.” Our bots are all written in Ruby. The goroutine managing the level instance on the GM server periodically wakes up, opens a Ruby subprocess, unpickles the state of the world simulation and the bots, has the bots update themselves against the state of the exchange via the REST API, accepts the bots desired orders, makes them against the REST API, pickles the state of the simulation and the bots, and then sleeps until the entire process starts again in a few seconds.

Why? A combination of “That lets me write levels and bots in my best language”, “I wanted to ship in 2016” plus “If I did a slightly more obvious thing and kept all of our levels and bots constantly in memory rather than slicing them 500ms of the server’s attention every N seconds, then our memory requirements at launch would be measured in terabytes and go up from there.”

Why use Go for the server then, instead of e.g. Sinatra? Because Go’s concurrency story is much better than Ruby’s is.

Front-End Engineering

A core design goal for Stockfighter is that it is quick to pick-up-and-play, right in the browser, without requiring one to have a complicated toolchain installed.

Why? First, from a strict conversion optimization perspective, I’d anticipate a heavy, heavy dropoff between signup and completing level 1 if my first instruction was “OK, get a fully-functioning C toolchain installed on your box. Now clone this repo.” or even “Download this Vagrant image.”

Second, this is particularly difficult for less-experienced engineers. They’re not the core of our business, not by a long-shot, but I want to support them to the extent possible. I want a CS101 classroom to be able to play Stockfighter together. Many practicing engineers don’t remember this, but a CS101 classroom finds installing e.g. a full Rails toolchain to be a hard, frustrating, failure-filled experience. (I’m a professional engineer using Rails for the last 8 years. If you gave me a blank Macbook and a day I could do install Rails… after a lot of Googling to check whether we still use rbenv and Bundler or if that changed since last week.)

So a hard requirement for both of our tech trees was that they be playable in the browser to start. After players are invested, they can get additional edge by working in their stack of choice locally, writing tools which sit on top of our systems, or even e.g. deploying code to EC2 or Heroku or what have you, but batteries had to be included out of the box.

Thomas and Erin build an entire in-browser C development toolchain which compiles down to assembly and then executes on a farm of emulated Arduino processors. I had the comparatively easier task of figuring out “What does the simplest version of automated trading that works look like?”

Answer: it’s manual trading! So we made a blotter interface — basically, a stripped-down retail day trader’s interface for monitoring the market, placing orders, and seeing executions. You can use the UI to poke at any of our levels and get a sense for what the “normal” behavior of the market is given that level’s load out of bots and stocks. You can also use it as a stepping stone for bootstrapping your first programs — there is no need to write e.g. code to poll whether your orders hit anything because we’ve already taken care of that for you, so all you need to do is focus on generating the right orders to send in. If you want, you can even totally replace the UI with your own web application — go nuts.

Another nuts option: if you feel confident in your trading abilities, it is at least theoretically possible to beat many of our trading levels the old fashioned way — by running the math in your head and keying in your orders faster than the other guy. This is hard mode, since the other guy is Ruby code, but given that we force him to sleep for 80~90% of every trading day it’s at least possible.

The UI also includes controls for level operation, like e.g. restarting the level if you get stuck.

It was obvious that given goals like “Make a million dollars!,” in the inevitable learning period you could quickly get yourself in an unwinnable state by e.g. losing 95% of your starting capital. The designed operation of our trading levels is “Play them, lose horribly, write a program, reset the level, run the program, have it crash with a bug, fix and re-run, lose modestly, adjust your approach, re-start the level, run the program, win.” (Folks have asked whether we’ll hold this against you. No, no, of course not. We log everything under the sun, but losing/restarting levels is planned. That capability is an advantage of doing this in a rich simulation as opposed to real life — you can go Knight Capital as many times as you want and no one loses their job!)

We did the UI in React, because it has a lot more going on than most CRUD apps.

DHH describes the sweet spot of my favorite stack (Rails-with-some-Javascript) as “documents with some dynamic sprinkles.” I really love that model, but it does not describe a trading interface. You have an incoming stream of events, many per second, updating part of the DOM, potentially hundreds of orders open whose state can mutate at any time and whose accurate display is important, and a variety of actions available to you at any time.

Obligatory learning curve aside, as this is my first React app, I’m loving React and the Flux architecture. (We use Flummox, which was — sadly — EOLed between us picking it and launching. I swear, all the jokes about JS frameworks are true. That said, of the available options it seemed to require the least boilerplate, which can be further reduced with a sensible naming convention.)

Our blotter interacts directly with the exchange API (unlike most retail trading applications, which interact with a brokerage which interacts with another party which interacts with the exchange). This was enormously useful as I was doing parallel development on both systems. Forcing me to write a fairly complicated application against our API burned out a lot of the usage niggles prior to them being exposed to players. (Oh, don’t worry, you’ll find plenty more.)

Requirements generated by the blotter, like “Polling for order status is just crazy after you have hundreds of them — we need some sort of pub/sub system accessible over a websocket.”, made the exchange better for a variety of trading applications.

Here’s an image, although it’s modestly more amusing when quotes are streaming in and things are updating constantly.

Stockfighter Trading Front-End

The big challenges for React development, aside from the learning curve, were state management when switching between levels (eventually solved by rethinking our store design) and dealing with lots and lots of UI repainting.

At one point I was playing a level with a hundred bots. Each of those bots sent in about a thousand orders a minute. Each order changes the quote for the stock, causing a separate websocket message. Each websocket message would cause my entire table of orders to refresh.

100,000 refreshes of a table with a thousand elements in a minute will, pretty reliably, melt your poor little Macbook.

We eventually solved this by using built-in React features like shouldComponentUpdate (basically, we got very detail-oriented regarding the performance-sensitive components like orders and quotes, made sure they would always render the same given the same prop and states, and then canceled the render if their prop/states were deep-equals equal) and using keys on child objects.

Fun fact about child keys: even if every child is itself immutable, if you choose keys poorly (like, say, simply making a unique ID on creation of the child UI element), updating a single order out of an in-memory list of 1,000 will cause the entire table to refresh, and if your child key is different than the key for the same element in the last version of the table, React’s magic DOM-diffing technology does not save your bacon. Instead, your bacon sizzles amicably on your Macbook.

After I got my head around that and started picking better child keys (appending the ID and modified timestamp is all you really need — same as Rails Russian-doll caching), our UI became quite snappy. I log into our staging environment (Amazon’s Oregon data center) from Tokyo and I can’t tell it’s not on localhost… except when the speed of light decides to play tricks on me.

Supporting Technology

Our web application (signup/login/leaderboards/etc) is a bog-standard Rails 4 app. There is very little technically interesting about it, but it works and was quick to write — this is exactly Rails’ sweet spot.

You know whose sweet spot it is decidedly not? Go’s. I tried, I really did, but it would be very difficult to recommend Go for a web application at the moment.

The ORM we ended up using for e.g. our settlement service, Gorm, is not anywhere near the level of maturity of ActiveRecord, and to get its (valuable!) feature set you have to tolerate a) throwing out most of the benefits of using a type-safe language and b) programming bugs which can cause statements which certainly look like they should generate SQL queries to just silently not generate SQL queries. In general, working with the database has been so painful in Go that I have been instead either a) hitting a REST endpoint on an internal API to have Rails do the DB access then return formatted JSON (which Go can actually consume fairly decently) or b) throwing the data at NSQ.

I have fallen in love with NSQ, an enterprise message bus for people who don’t ever want to have an enterprise message bus. The elevator pitch for it: write a textual message, tag it with a topic, and send it to your local NSQ daemon. On some other machine that doesn’t even know you exist, another program says “Apropos of nothing I’m a member of the $FOO channel and want a copy of $BAR topic messages which have not been processed by the $FOO channel yet. $FOO doesn’t exist yet? It does now. Hit me.” NSQ handles all the magic to make that happen.

We use it for everything. Rails controllers need a way to log analytics-style events? Pipe it to NSQ — we’ll make a decision on an analytics-provider later and, in the meanwhile, we’ll have nsq_to_s3 just save them for us. Our settlement system needs executions from the stock exchange? Open a settlement channel on the executions topic; done. Executions also need to be logged somewhere? Sure, open a dumpToLog channel on that topic and use the provided nsq_to_file utility; done. We want a per-player list of historical UI actions taken by levels? Sure, no worries, have the GM server write to the levelActions topic, open a peristToDB channel on it, and use nsq_to_http to have those hit an internal API on our Rails app which takes care of that.

The best part? When you just assume the existence of NSQ everywhere, you don’t have to think about e.g. dropping more instances of a particular service on your infrastructure, routing requests, etc etc. You just fire-and-forget at the bus.

Actually, that isn’t actually the best part about NSQ. The best part is Stockfighter ships with about seven microservices and having them all understand every HTTP endpoint available would have been unwieldly. Instead, we standardized on a small set of common JSON object representations and then the topic names. This lets us do things like e.g. have our Arduino emulator slurp up quotes from the stock exchange simply by saying “Hey I’d like quotes, too” without the stock exchange even knowing that an Arduino is a thing.

For our services which communicate over HTTP, like e.g. the exchanges, we have to be a little smarter about routing because we can’t treat NSQ as the Magic Oracle Of Making Sure Messages Get Delivered. The short version of that story is, the longer version is a full infrastructure post because it gets complicated.


We’ve been using for our player-facing documentation. I haven’t pushed our docs live yet (spoilers abound) but I love this service.

  • The docs come out looking very pretty without me having to do any more CSS munging.
  • The UX of the docs approaches that of e.g. a Stripe or Twilio rather than a Markdown file.
  • There is an in-browser API explorer, so you can (if you want) copy/paste in your API key and, from the page describing e.g. our POST /venue/FOO/symbol/BAR/order endpoint, actually post a live order against one of our running stock exchanges. It displays the HTTP headers and full response in-line. is ridiculously fun. We’ll push the docs live to it when the game launches publicly.

Further Reading About Trading

We’ve promised players a reading list to help with understanding Wall Street for generalist developers. Here’s a brief tour of my Amazon history over the last several months:

  • Flash Boys, Michael Lewis: I find this book impossible to avoid in a discussion of automated trading and yet difficult to recommend. Lewis is an exceptionally talented writer. I think many Starfighter players will come away from some of our levels saying “Michael Lewis, I have attempted to actually do the thing you said that the bad guys did, and that is, as a matter of engineering reality, actually impossible.” That said we’re totally ripping some levels off of his (highly entertaining) storytelling here. I mean, they named a computer program after a Greek god. How can we not make that into a level.
  • Flash Boys: Not So Fast: A much more lucid take on HFT, by someone whose paycheck depended on being able to turn it into actual engineering artifacts.
  • Dark Pools: The Rise of the Machine Traders and the Rigging of the U.S. Stock Market, Scott Patterson: If the title doesn’t give the game away, spoiler alert: Patterson probably doesn’t consider “more engineers able to do algorithmic trading” to be a victory for truth and justice. (Of course it is! At the very least, consider it self-defense training.) That said, unlike Flash Boys, the discussion of issues/attacks strikes me (and our advisors) as being more tightly grounded in consensus reality. This book also includes an excellent history of the development of computerized exchanges in the US from about the 90s through today. It was particularly wild when I realized that our cute little toy hosted on a t2.micro was a $X0 million or $Y00 million engineering project back in living memory.
  • I hesitate to recommend it based on the price, but if you want to pursue this topic professionally after Stockfighter, the Bible at Thomas’ last company was Trading and Exchanges: Market Microstructure for Practitioners.

That’s all I’ve got for today. Back into the code cave for us. We’ll see you in a few weeks!

Talking About Money

Twitter is presently abuzz with #talkpay folks sharing their salaries. The movement is rather Marxist in character, but this capitalist encourages you to look beyond that, as it is in the general interests of everyone who works for a salary or rate to understand what the market is like.

Why Do I Support Talking About Salary?

I was raised to not talk about salary. This was largely for sociocultural reasons in the American Irish-Catholic middle class, where money was seen as a corrupting influence which should be kept from children for as long as possible. This decision is probably the only major point of difference I have with my parents regarding my upbringing — I would have made much, much better decisions early in life if I had any clue what the world looked like.

Employers have perfect information about salaries at their firm and fairly reliable salary information for the local slice of their industry. Candidates often have no clue whatsoever. To the extent that candidates in general have accurate impressions of what salary ranges are, these accurate impressions often travel along peer networks at roughly the speed of beer. Informal networking like this is superior to no information exchange at all, but results in people who are not present in those networks being at a negotiating disadvantage.

I’m not a Marxist — and in fact so non-Marxist that I’m honestly troubled by joining a Marxist movement on May Day — but I would have to tear up my Member of Vast Capitalist Conspiracy card if I thought that one side of a negotiation having a permanent information advantage didn’t influence how the negotiation turned out.

Compensation negotiations are presently like a stock exchange where only your counterparty can see the ticker and order book. You’d never send an order to that exchange — it would be an invitation to be fleeced. “I happen to have a share of Google and want to sell it. What’s it go for?” “Oh, $200 or so.” “Really? That feels low.” “Alright, $205 then, but don’t be greedy.”

The spot price of Google when I write this is $535. Someone offering $205 for GOOG would shock the conscience. In the years since I wrote a post on salary negotiation for engineers I have received many letters suggesting folks have received and accepted employment offers much worse than that, relative to reasonably achievable market rates.

A Quick Note About Being Fortunate

I don’t know if “fortunate” captures my position in life well, since that suggests rather more luck/chance than I think was involved.  It seems to work as a word, though, given that political implications that “privileged” have come to have are not my politics. That said, for the last couple of years I have been a rather well-compensated member of a well-compensated industry, and I’m cognizant that I have advantages that many people, including myself a few years ago, lack with regards to this conversation.

One advantage in particular is that talking about salaries can expose you to disciplinary process, either formally or informally. Salary structures are treated as corporate secrets in many places ostensibly to prevent morale-sapping internal conflict and — can we be real here for a moment, fellow CEOs? — explicitly to avoid having accurate market intelligence used against the company during salary negotiations.

Consultants/freelancers/etc also have to be cagey about their rate, because very few have just one rate, and if you disclose a previous rate then you can end up negotiating against yourself when attempting to take on a new client. (Most important takeaway about salary negotiation, by the way: disclosing a previous salary is almost always against your interests because it pegs your new salary to that plus 5% rather than your value to the new firm minus a discount, which is a brutal mistake, particularly in the years of your career where natural growth in capabilities/experience/the market/etc causes you to bring vastly more to the table with each new job.)

Happily, these days I’m a) CEO of a company I co-own, b) have no investors to keep happy, and c) have no reasonable prospect of ever having a client again, so I can publish salary/rates without blowback. I’d encourage folks who are likewise well-situated to do the same. In particular, I think that Glassdoor/salary threads on HN/etc often fail to capture the top end of the distribution due to (basically) professional courtesy/discretion, and it is really, really important that young/impressionable/lacking-information members of the industry understand that the top end exists.  (Incidentally, “the top end” suggests that there’s a ceiling/asymptote, but it’s really closer to a long tail distribution.  Pick a number, any number: somebody does a lot better than that. For most numbers you’d naively think of, its an awful lot of somebodies. $100k? Not the top. $250k? Not the top. $500k? … Not the top.)

I’d encourage similarly fortunate members of the industry to strongly consider dropping some breadcrumbs for folks who are still leveling up, either on your blog or even just informally to your peers.  Remember that nobody is born in possession of reliable market data.  Make it a point to assist other people as they journey up the career ladder.  It’s the right thing to do.

Salary History

I have a pair of undergraduate degrees, one in Computer Science, from Washington University in St. Louis.  As of graduation in 2004, my impression was that $50k was a reasonable achievable mid-career salary as an engineer and that, if I worked very diligently, I might eventually hit $100k per year.

Order entry (ages 18 ~ 20, Chicago suburbs): $10/hr, no benefits, $0.25/hr incentive pay for working in non-airconditioned parts of the operation.
Work Study (ages 18 ~ 22, St. Louis): $10/hr. Positions included data entry and basic technical support for e.g. printers.
Undergraduate research (age 22, St. Louis): $12.50/hr. My first position where I shipped code for a living.
Technical translator/researcher (age 22 ~ 25, Ogaki, Gifu, Japan): 3 million yen per year (quoted post-tax) with housing benefit with a fair-market value of approximately 500k yen per year. This was roughly equivalent to a $35k to $40k professional salary in the US, with a comparable benefits suite.
Engineer, first-class (age 25 through 28, Nagoya, Japan): ~260k yen per month (age * 10k yen is approximately the salaryman expectation for engineers in and near Nagoya), overtime pay (a lot of it — as a salaryman I routinely was compensated for more than 50 hours of it in a month… and worked “rather more than that implies”), and the standard benefits suite for professional workers in Japan. No housing benefit. Standard non-taxed transportation benefit covered more than 100% of transportation costs, as is common in Japan. I don’t want to dig out my pay stubs because seeing the number of hours I worked might cause PTSD (not a joke) but my US tax returns were generally in the $45k per year region.

A brief digression about salarymanhood: Salaries are not just internally transparent at Japanese megacorps but they’re so predictable that any middle-class adult in central Japan can accurately predict my salary history at Japanese organizations. I mention this partly because it’s an interesting cultural note and partly to say that salary transparency by itself does not guarantee happy outcomes for employees.

Consulting Rates

After that I quit my day job and started consulting simultaneously with running my own business. Now things get a little… crazy. I reiterate that this isn’t to brag, it’s just to hopefully show people how the world works.

My consultancy is shuttered now, so I can’t hurt myself with revealing the following information, but in deference to identifiable past clients I will be vague about details about particular engagements. I consulted in Tokyo, Chicago, New York, San Francisco, Germany, LA, Austin, and remotely from my then-home in Ogaki, Japan. My typical client was a privately owned software company with $10 million to $50 million a year in revenue. People generally assume that I must have been working for funded Silicon Valley startups to earn the following rates so I think I’ll explicitly call out that they represented less than 10% of my consultancy’s business.

While I was still consulting, my rates were private, largely so that I had freedom to price new engagements.  This worked out rather well, as I walked my rates up rather quickly.

First consulting gig: $100/hr
Second consulting gig: $4k/wk
Third consulting gig: $8k/wk
Fourth consulting gig: $8k/wk “Hey I wonder what happens if I just put $12k on the proposal?” $12k/wk
Consulting rack rate, year 2: $20k/wk
Consulting rack rate, year 3: $30k/wk
Highest accepted proposal: $50k/wk (The gig fell through. Had it not, my rack rate after it would have been $50k per week, at least until I convinced a firm to pay more than that.)

There were a few engagements which I priced at below rack rate, for longstanding clients, clients operated by friends, and the like. I also did a modest amount of semiformal pro-bono work.

What I did to earn those rates:

I combined a modest amount of programming skill (typically Rails, Ruby, and Javascript) with substantial experience with using engineering skills to move marketing/sales levers, including by doing SEO, email marketing, A/B testing, (light) UX design (typically around high-value parts of a SaaS business like signup flows or purchasing pathways), etc. I turned down essentially any gig which was strictly engineering in character and rather aggressively went after bigger projects which were “closer to the money” every couple of months.

I aggressively solicited formal and informal case studies from clients who had had successful outcomes, which went directly into proposals for subsequent engagements. Most of the discontinuous jumps in my consulting rate were directly occasioned by an engagement which had gone exceptionally well.

The main thing holding my rate down for the early years was personal discomfort with being “worth” the types of rates which I desired to charge. I dealt with (deal with?) impostor syndrome frequently and had little context for what alchemy one needs to work to justify professional rates.

Spoiler alert: there is virtually no difference in the mechanics of work done between $100 an hour, $200 an hour, and $30k a week — all of the leveling up there is in sophistication on who you go after, what engagements you propose and deliver, and how you package things for clients.

By the end of my consulting career, I pointed to a small pile of mostly satisfied customers and other evidence that I could do the work, sketched out a “Here’s how I plan to create a couple million dollars of value for your company” in proposals, and then just announced my rate. I received rather less pushback than I expected and virtually never negotiated on rate, using a trick from Thomas Ptacek (“If a client says you’re out of the budget, start talking about the scope of the engagement to find something they can afford rather than slipping your rate.”)

One under-appreciated benefit of charging premium rates is you get to be really picky about engagements. This lets you both deliver only engagements where you have an expectation of being able to do meaningful, successful moves-the-needle-for-everyone work, and it improves your negotiating position. If you charge $60 an hour and desire to be middle class, you have to jump on virtually every engagement which comes your way and if someone counterproposes $50 an hour you virtually have to hear them out.  If you charge more professional rates, you have the wherewithal to decline work below your prevailing rates and simply take an unpaid vacation or concentrate on building higher-quality pipeline for new full-rate engagements.  That is a high-quality BATNA to have, and existence of it helps close negotiations successfully all by itself.

My impression is that my consulting rates are both high and not nearly the top of the market for professional work done in our field. I could substantiate that with data from other people, but that would require divulging confidences.

Folks occasionally think I’m a member of a shadowy cabal for being able to charge the above rates, but believe me, I was nearly exactly the same level of capabilities at $30k a year as I was at $30k a week, I just got better at organizing the business to expose me to opportunities to capture the better rate. I’m good at what I do, but the premium built into the rates versus many other people who can knock together a Rails app is not, not, not due to superior skill with Rails, the elite fraternity of the Ogaki tech industry, etc.

Business Results vs. Wages

I ran a succession of small software businesses between 2006 and 2015, which both earned money and gave me the skills/platform which allowed me to do the consulting thing described above. They’re not directly relevant to discussions about “pay”, as running a business has many types of tradeoffs not directly comparable to those experienced by employees/consultants.  In particular, running a business exposes you to substantially higher risk.  Business owners have a huge variance in outcomes due to factors both inside and outside of their control.

That said, I originally got on the transparency train back when I had $25 a month in revenue and just never stopped publishing numbers. There exists a fairly comprehensive breakdown of my business’ numbers every year since starting (c.f. 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, and 2014).


As a small-business owner, my net worth is dominated by equity I own in my company. This is important to discuss in any conversation about wages in the tech industry, because for historical/cultural/tax reasons we put a large percentage of the industry’s total compensation in equity grants. This is particularly true as you get increasingly advanced in your career.

It’s extraordinarily difficult to value equity in a small company prior to selling it. At one point, I wanted to invest a small amount of money into startups which were owned by other people. This requires one to be an “accredited investor” in the US, with either $250k salary for two years (a bar which I did not hit) or $1 million in assets aside from the value of one’s primary residence. After speaking it over with my accountant, we mutually decided that we could attest to me being an accredited investor in good faith.  (Somewhat surprisingly to me, a two-sentence letter from a CPA suffices to establish accredited investor status.  I had a vague notion that it would probably require a balance sheet or complicated well-researched valuation of assets, but no, it’s basically “I’m professionally responsible for looking after this client’s finances.  His assets exceed liabilities by more than a million dollars.”)

I recently sold my first SaaS business, Bingo Card Creator. I want to disclose how much it went for, but am prohibited from doing so by the terms of my agreement with the purchaser. Speaking generally, small SaaS businesses are presently valued at between 2X and 3X “seller discretionary cash flow” (SDC), which is essentially “how much money could the owner extract from this, totaling profits and their salary, if they only paid absolutely necessary expenses.” BCC’s SDC can be reasonably estimated from previously published numbers. That’s all the bars I can hum.

I have another SaaS business, Appointment Reminder, which I am a 100% owner of. The business is modestly successful. I have a particular number in mind for it, which I’d be crazy to quote publicly prior to selling it, for the same reason that you’d be crazy to quote your desired salary in a salary negotiation.

If a buyer pitches me on 2X my desired number I will, naturally, say “That’s an interesting number. If you were offer insert 2.2X here I think we’d have a deal.” No buyer will pitch 2X if they know what X is, though.  A younger, less savvy me would interject here “Why ask for more money given that they’ve already offered you enough?” and my answer to that is “Because everyone in the negotiation is a businessman and any number we are mutually happy with is a morally acceptable number.  Given this, and keeping all else equal, I prefer ‘more’ to ‘less’ and always, always, always ask for ‘more.’  You should try that — it’s a trivial tactical suggestion which helps address you systematically low-balling yourself, which you’re prone to.  You think that asking for ‘more’ will result in ‘less’ being yanked from the table, but you believe this because you’re young, inexperienced, and working from a narrative about desert which is quite disconnected from how rational businessmen actually operate.  No counterparty who you actually want to work with will hold good-faith negotiating against you.”)

I expect, regardless of the outcome of negotiations over the business, that the sale will pay for my daughter’s college education, repay the out-of-pocket investments I made in growing the company, and establish a healthy buffer for my family.  That said, I’ll still need to draw a salary for the near future.

I did not accept equity in any of my consulting clients.  I own a very modest amount in two companies which I am an angel investor in (Binpress and Riskpulse) and one company which I am a formal advisor in (MakeLeaps).  Like most angel investors in tech, most career returns will likely come down to equity awarded as wages rather than equity purchased primarily for cash consideration.

Present Salary / Equity Situation

I’m presently an equal co-owner in Starfighter with Thomas and Erin Ptacek. As the CEO of a pre-revenue company, I don’t presently take a salary. After Starfighter has revenue, I expect all the co-founders to draw substantially identical salaries (pegged at market rates for senior technologists). We will also receive distributions.


Anyhow, that’s the boring-but-hopefully-instrumentally-useful discussion of ten years in a rather quirky tech career. I am impossible to bore or embarrass on this topic, so if you ever want private advice, drop me a line.

Final words of advice: Technologists are in a wonderful position presently to create a heck of a lot of value in the world. Don’t be hesitant to be compensated equitably for the value you are creating.

Announcing Starfighter

Thomas Ptacek, Erin Ptacek, and I are pleased to announce Starfighter, a company that will publish CTFs (games) that are designed to develop, improve, and assess rare, extremely valuable programming skills.

Starfighter CTFs are not fantastic Hollywood-logic depictions of what programming is like. There is no “I built a GUI interface using Visual Basic to track the IP address.”

You will use real technology. You will build real systems. You will face the real problems faced by the world’s best programmers building the world’s most important pieces of software.

You will conquer those problems. You will prove yourself equal to the very best. Becoming a top Starfighter player is a direct path to receiving lucrative job offers from the best tech companies in the world, because you’ll have proven beyond a shadow of a doubt that you can do the work these companies need done.

We’re not here to fix the technical interview: we’re here to destroy it, and create something new and better in its place.

Sound interesting? Our first game will be ready shortly. Give us your email address and we’ll tell you when it is ready.


We’re going to publish a game in the genre often described as “Capture The Flag” (CTF). It will be a goal-oriented exploration of technology.

You will code to play. You will not pay to code.

Our CTF will be totally free for players. (Not “free-to-play.” There is no catch. We will not ask you to pay extra to buy funny hats or recharge energy or unlock the full version.)

To progress in the game, players will have to use every programming skill they know, and pick up new tricks along the way.

CTFs are a superior way to learn rare and valuable programming skills which you would not otherwise be exposed to. We’ll give you the excuse, and code/test harnesses/documentation/community support/etc, to try that language/framework/problem space/etc you’ve been meaning to learn “someday.” The games Starfighter produces will help programmers all over the world learn these skills absolutely free.

We’ve done this before: our founders ran MicroCorruption. It is one of the most successful CTFs ever created, by any metric, and unlike most CTFs it is still playable years later. Starfighter will run ongoing, supported, progressive CTFs at scale, which will operate indefinitely. Making and supporting CTFs will be our only business.


Starfighter games will be, first and foremost, fun to play. You’ll get to dig into new tech, on your own terms, in the comfort of your own living room. You will achieve mastery of it. You will be able to show off your skills to other devs, and they will say “That’s awesome how you did that.”

Progress in a Starfighter game will map naturally to skills that top tech employers need RIGHT NOW. Playing will teach you crazy programming skills you can’t learn anywhere else. (Bold talk, right? No, really — some of our levels are so fun that if you did them in real life you’d be thrown in jail. Others put you in charge of highly-lifelike-simulations-of programs that, if the real ones blew up, would rate the nightly news worldwide.)

You will learn what it is like to see the Matrix.

Sounds like BS, right. I know. I’m a generic web programmer (yay Ruby, meh JavaScript, boo low-level anything). The last time I played a CTF, written by my cofounders, they had me breaking into locks controlled by micro controllers which ran embedded assembly code. I haven’t touched assembly in 12 years, because I thought I hated it. But then I found myself in Hanoi finding myself with only a lock running vulnerable assembly code separating me from 25 points.

I pulled my hair out for hours. I tried everything I could to get that lock to open. I cracked open a book on assembly. I read tutorials on the Internet. The opcodes were an impenetrable blob, and then something I could sound out but make no sense of, and then a functioning computer program, and then… then they were a target.

I… I can’t even believe I’m saying this… I exploited a buffer overflow bug to corrupt the value on the stack storing the program counter so that when the function returned it wouldn’t go back to the call site but rather jump into memory that I controlled where I had pre-staged handwritten assembly code to gain control of the lock.

Take that, Neo. [Thomas comments: That’s one of the easier levels, actually.]

You will do bigger, more impressive things.

Starfighter will allow you to develop and show off skills possessed only by the most valuable programmers in the world. Does that make you one of the most valuable programmers in the world? Yes, yes it does.

Want to land a better gig? This is your opportunity to level up. Do well in the game, and we can short-circuit the resume spray-and-pray hiring nonsense and introduce you directly to CTOs who will be happy to hire you. (We’ll only do this if you ask us to.)

Sound good? Give us your email address; we’ll tell you when we have a game ready for you.


The science of hiring practices is settled: work-sample tests are the most effective way to assess skill in potential hires.

The problem? Work-sample tests take time and money to develop, deliver, maintain, and support. You’re not in the work-sample test business: you have a company to run.

Starfighter games are work-sample tests, built by a company which will do nothing else. We’ll treat our CTFs like a first-class tech product, because they will be our only product.

We will market them actively. We will track player behaviors and skill at incredible levels of granular detail, instrumenting them like they were built by the Orwellian MiniPeace. We will iterate on their game design, calibrating it to be accessible in the earlier levels but provide an appropriate challenge even to the best engineers in the world. We will create regular content updates. We will make the supporting documentation/libraries/etc a first-class concern rather than the afterthought of an overworked team building a side project. We will engage our players like our ability to feed our families depends on it.

We will erase all doubts you have about a candidate’s ability. You can guess whether they grok REST APIs based on their Github profile, if you are OK with ignoring 90%+ of the hiring pool with no public Github profiles. We can tell you exactly what happened when your candidates tried to implement a REST API. We can compare their performance against hundreds of other talented engineers (including your current employees) on the same task.

We can bring engineering rigor into your hiring process.


You do not have enough qualified candidates, because your candidate filter greps resumes rather than ability. Starfighter will dispense with resumes and measure ability directly. We will source a higher volume and higher quality stream of engineering candidate leads than any channel you presently use. (We’re shooting for higher volume and higher quality than all channels you currently used, combined.)

We will love our players. They will love us. We will help the right ones fall in love with you, too.

Your present hiring process is secretive, scary, and stressful for candidates. We can offer an independent front-end to it without requiring ongoing management overhead from you.

Your team may occasionally falter in building hiring pipeline — the business gets busy, the milestones start slipping, so prospecting stops and coffee dates get neglected and interviews get rescheduled. It happens. We will constantly be identifying new, talented, pre-vetted engineers and introducing them deep into your hiring funnel.

Has anyone ever posted a video of themselves interviewing at your company? No. It is a painful experience. Nobody wants their friends to see them struggling in front of a whiteboard. Some companies would even threaten a candidate with legal action for doing this.

People will post Let’s Plays of Starfighter CTFs to Youtube. They will get together with their friends to to talk how awesome your company’s hiring funnel is. We won’t send them a cease-and-desist. We’ll send them a pizza.

“Aren’t you worried about players gaming your assessment?” The only way to game a Starfighter assessment will be to demonstrably possess the type of engineering skill which you want to hire for. Are we worried that players will teach themselves these skills just to play Starfighter? We’re counting on it. That would be an epic success.

You cannot buy hiring pipeline as effective as the one Starfighter will build for you.


The technology industry structurally excludes many qualified candidates from their hiring funnels and then is shocked when those hiring funnels disproportionately select for candidates who are not structurally excluded. Traditional tech interviews are terrible ways to identify, qualify, and evaluate top programming talent. Filtering by education level or university is unreliable. Keyword searches are applied by people who don’t understand the underlying technology. The tech industry excludes perfectly viable candidates for no reason at all.

(Case in point: Donald Knuth would be selected out of the hiring process for [senior C programmer with Unix experience] before any human had ever considered him at most tech companies. His CV doesn’t match the keywords C, programmer, or Unix.)

Starfighter is different. We attract the interest of a huge pool of potential talent. Tens of thousands of people will play Starfighter games for fun, and the act of playing improves their skills for free. Some will find them too difficult. Some players will sink their teeth into them, self-studying and rising to the occasion. A small percentage of serious players will breeze through all the levels faster than we can possibly create them.

You will want to hire our best-performing players, before someone else snaps them up.

You need people with skills, and we’d be happy to make the introduction. We run the CTF, then make the appropriate introductions under a standard contingency recruiting arrangement. You don’t need to make major changes to your hiring process to adopt Starfighter. (We’d be happy to suggest some, though.)

Everyone wins.

Starfighter has signed a few marquee clients. If you have hiring authority for 10+ engineers in 2015, send an email with details about your company to — we may be able to slot your company in for the first batch of candidates.


The 21st century is going to belong to developers and the businesses which employ their talents successfully. Unfortunately, the technology industry is fundamentally unserious as to how it presently identifies and employs engineers.

This is one of the primary causes of the hiring crunch. It is a primary contributor to structural impediments to entering our industry. This negatively affects many candidates, including (but certainly not limited to) those from underrepresented backgrounds.

It is also a multi-billion dollar problem. Persistent market inefficiencies should be music to the ears of a capitalist, because they suggest free money. The technology industry has, through neglectfully embracing hiring policies which are so irrational as to shock the conscience, created a gigantic mountain of free money.

Starfighter claims that lonely mountain as its birthright. We are going to slay the dragons guarding it and then strip-mine it. This will continue until either dwarves sing about how wealthy we are or until every firm in the industry rationalizes its approach to hiring.


We have the technical chops to build CTFs, which are virtually impossible to keep in production without a strong technical team and ongoing focus.

We have built software companies and worked with the best teams in the industry. We understand how software firms work, inside and out. We know how frustrating hiring is because we did it for years, too, before we realized how CTFs are a cheat code for life.

The Starfighter founders can talk the geek talk. We have walked the geek walk. Of the three of us, I’m practically the non-technical co-founder, and I solo-shipped two SaaS products. Thomas and Erin spent most of the last decade looking at software systems made by the most talented engineers in the world and then breaking them in ways so horrible that describing some of them could bring down Western capitalism.

We’ve spent years helping engineers level up in their careers. I have a folder in Gmail saving messages from geeks who used my career advice or salary negotiation tips to their advantage. Those two essays are, by the numbers, apparently among my most useful career contributions to the software industry. Now I’ll have the excuse to do more like them every day.

It could be sensibly argued that desire to please clients will make us go against the interests of engineers. Don’t worry. We’re brokers in a seller-dominated market. Our economic incentive is to maintain our reputation as honest agents for the most valuable W-2 employees in the world. Also, again, we’re geeks. We come here not to serve technology recruiters, but instead to replace them with a small shell script.


It’s possible that some engineers might be confused about how we’re going to make money. No worries.

Companies pay “contingency recruiters” a commission, generally calculated as a percentage of an employee’s first year salary, to introduce them to candidates. This is paid “contingent” on the candidate accepting a job with the company.

Starfighter is a contingency recruiter with access to a better way to identify candidates than “Call up everyone on LinkedIn and beg them to take a job at Highly Regarded Tech Firm In Your Area.” We assess for skill first, passively as players play our games and then actively. Our founders — talented technologists — personally reconstruct candidates’ solutions and evaluate them.

We follow-up with players to ask if they have any interest in a no-obligation chat about career options. If they’re interested, we have an honest geek-to-geek conversation.

Then, if appropriate, we introduce the candidate as deep into the hiring funnel at our clients as our clients will allow. It’s not “Yay, as your special prize for winning we award you permission to send your resume into their /dev/null inbox”, it’s “The CTO’s got an hour free at 3 PM on Friday; would you like to meet him to talk about joining their DevOps team?”

After the introduction is made, the decision is up to the candidate and the employer, but we’ll be following up with both to make sure the process is running smoothly. Clients will give Starfighter-sourced candidates their full attention immediately and process them in an expeditious and dignified fashion, as befits skilled professionals.

Contingency fees are not paid by candidates and don’t come out of their salary, any more than the company’s rent or marketing budget comes out of employees’ salaries. They’re a cost of doing business. Companies are happy to pay them because companies understand how hiring engineers makes-or-breaks their businesses. (Potential clients interested in getting the best terms possible should get an engagement letter signed before I convince the other founders “Why are we only charging market?! We’re better than all our competitors! Charge more!”)


Thomas, Erin, and I are presently hard at work building Starfighter’s first game. It will assess a variety of programming skills, including general systems programming aptitude as well as a few more… esoteric fields. We’ll have challenges appropriate to your skill level, whether you’re new to these fields or a seasoned pro, and we’ll have study guides, skill trees, and friendly geeks who love helping other geeks level up.

We plan to launch the game publicly in the near future. If you’d like to hear when this happens, sign up here.

A quick note from Patrick (in my totally-not-the-CEO voice)

I’m super-pumped about Starfighter, which is my main gig as of now. I’ll talk later on what it means to be quitting the whole self-employment thing. This was a major decision for me.

What does this mean for my other projects?

Bingo Card Creator: Bingo Card Creator will be sold. I hope to close the sale before the end of March. Our broker is FEInternational. I’ve enjoyed working with them so far. If you’re interested in BCC, please talk to them.

Appointment Reminder: I have no announcement to make about my involvement with Appointment Reminder at this time. We will, naturally, continue keeping all commitments to our customers.

Kalzumeus Software: Kalzumeus Software is going to continuing operating and will continue to be home to my eclectic side projects.

I have one major upcoming commitment on this front, the A/B testing course that I’ve been working on for far too long now, and am hoping to get it out ASAP to get it off my plate and clear the way for Starfighter. My co-founders have graciously let me delay full-time involvement in Starfighter while I get this out. Expect news on this front soon-ish.

We haven’t done any consulting in a while. We will continue doing no consulting, to the best of our inability.

Blog/speaking/podcast/etc: Software seems to be my life’s work. Yay. I’m going to keep writing and speaking about it, in all the usual places and under the Starfighter banner as well. I look forward to applying old tactics in new ways (what happens when you give a hiring funnel to an engineer who sees conversion funnels in everything? We’re about to find out!) and figuring out some new tricks as well. As always, I’ll be happy to teach anything I learn.

Kalzumeus Podcast Episode 11: Bootstrapping vs. Raising Money

Keith and I are joined by special guest Jay Winder, CEO of MakeLeaps, in this 11th episode of the podcast.  We talk a bit about doing business in Japan, raising money vs. bootstrapping as a SaaS company, how AngelList is going to eat the world, and the usual eclectic mix of topics.

[Patrick notes: The transcript below has my commentary inserted like this, as usual.]

What you’ll learn in this podcast:

  • Why you should negotiate from a position of strength and abundance.
  • How to raise a round of funding through AngelList while not being in Silicon Valley.
  • Why AngelList Syndicates are the future of seed stage fundraising.
  • How to manage relations with investors when you have lots of them.
  • How running a bootstrapped SaaS company is different than one which has raised early investment rounds.
  • How the SaaS market is different in Japan.
  • A bit about Jason’s new project, Sales for Geeks.

A brief announcement: Keith and his co-founded Rachel launched a new product recently called Segmetrics.  It’s Baremetrics, for InfusionSoft — gives you actionable, one-look insight into which of your InfusionSoft segments (e.g. traffic sources) are producing results for your business.  If that sounds relevant, make with the clicky-clicky.

Podcast: Customer Onboarding

MP3 Download (~60 minutes, ~59.3 MB) : Right-click here and click Save As.

Podcast format: either subscribe to in your podcast reader of choice or you can search for Kalzumeus Podcast in the iTunes Store.


Transcript: Bootstrapping vs. Raising Money

Patrick McKenzie:  Hello, everybody. Welcome to the 11th episode of the Kalzumeus podcast. I’m Patrick McKenzie, here with my noted co‑host, Keith Perhac and our good friend, Jay Winder as CEO of MakeLeaps here in Tokyo.

Keith Perhac:  I’m Keith. Welcome to the 11th episode. I can’t believe that we got this out, literally one week after our last episode.

Patrick:  This is downright scary.

Keith:  This is scary.

Patrick:  It’s almost like we have an actual podcast.

Keith:  I don’t think so. All right. Cool. Welcome, Jay.

Jay Winder:  Thank you. Hello. I appreciate the welcome. I was looking at you guys doing a podcast behind a thick Plexiglas window and I think, “Geez, that looks really warm and cozy inside that little podcast igloo”, so thank you very much for inviting me in. It’s a pleasure to be here.

Patrick:  We’re happy to have you from outside in the cold.

Jay:  Well, we have an air‑conditioner right here.

Keith:  Hopefully you guys cannot hear, otherwise our editor is going to be very, very mad at us.

Patrick:  Very, very angry at us.

Keith:  In fact…

Jay:  Should we turn it off?

Patrick:  We were testing a little bit ago and it sounded OK.

Keith:  You couldn’t hear it.

Patrick:  Alright, so we’ll be talking about a few different things this time. Jay has a SaaS business called MakeLeaps. Why don’t you just give us a little bit of background on what that is for people to have some context, and then we’ll talk about recent MakeLeaps adventures.

Jay:  The best and shortest way to describe MakeLeaps would be a FreshBooks for Japan. It’s essentially an online platform that helps Japanese freelancers and businesses more easily create and send their invoices, whereas right now pretty much everybody in Japan uses Excel and they do it all manually, which is crazy, and we’re on a mission to fix that.

Patrick:  As of a couple months ago, you guys are funded out of a few Silicon Valley movers and shakers. You want to tell us a little bit about how that came to pass?

Jay:  Sure. Around one year ago, I had the good fortune to meet Naval from AngelList, who’s a good friend of my friend. The first time I met Naval, he asked me a series of questions about MakeLeaps because he’s interested in the Japanese startup ecosystem. I answered all of those questions and at the end of that conversation, he very generously offered to be an advisor, which was very nice.

We thanked him for that and then the next time he came to Tokyo, I got a chance to see him again. He said, “What’s happening with MakeLeaps? Where’s everything going?” I said, “Oh, it’s great. We’ve got this traction and we just hired this guy and we’ve got this partnership and this deal and blah‑blah‑blah.”

He looked at me and said, “Can I ask you a few more questions about MakeLeaps?”

I said, “Sure, of course.” For about 30 minutes, he asked me a series of about 20 rapid‑fire questions, which I found very fun. They were all on point and interesting, so I responded.

Then at the end of that conversation, he said, “Wow. That all sounds pretty interesting. If you would be open to it, I would really be interested to invest in MakeLeaps.”

Up until that point, taking funding and investment had been an amorphous idea, we’d read about it in TechCrunch, but actually having an offer from one of the top most well‑known people in Silicon valley, offered to invest in MakeLeaps, kind of like Michael Jordan saying, “Hey, would you like a game of basketball?” It’d be crazy to say no, even if you like basketball a tiny little bit.

That began a process where we started thinking deeply, myself and my co‑founder, Paul. What do we want to do with MakeLeaps? How do we want to manage it? Do we want to take on investors?

That was quite a complex discussion we had over quite a long time. The more that we thought about it, we realized, “Well, if we really want to build a big important meaningful business, it’s going to affect a lot of people in a meaningful way, funding is going to be critical” is what we ended up realising.

I realized that, the Bootstrapper method is absolutely legitimate, and we did that for four years, so, I am not detracting from that at all. That’s a great way to go, but we had a situation where we could get some well‑known people onboard our team at MakeLeaps.

We decided that, it would be a great idea. We went ahead and did the funding round of $750,000 that closed a few short months ago.

Patrick:  Some of the participants for that, were Naval, Dave McClure from 500 Startups, Hiten Shah, a few others. It’s funny, these days, there’s a mechanism called a “Syndicate” on AngelList, which might be new to some of you who are listening to this.

Typically, in the days of yore, three years ago, a funding round for seed stage investment like this would be done by some of the collection between a 5 and 10, or 5 and 20 angels. Typically the minimum for an angel investment is about $25,000, below which, it wasn’t really worth everyone’s time in putting the deal together. Between $25,000 and then, say $100,000 on the high‑end, you would put together $250,000 to $500,000 like that.

One of the emerging models on AngelList is that, various smaller angels who don’t want to do deal flow management for themselves, which means they don’t want to go out in the world finding people who are like Jay, convince them that they should be allowed to invest in the company.

They want to outsource the deal flow management to somebody else, outsource a lot of the vetting of the deal to somebody else that they trust, and be able to invest some money in the startups that person invests in.

They can follow them on AngelList, in a way that is not like following somebody on Twitter. They make an informal commitment to invest in startups that the syndicate lead invests in. Collectively, this is called a syndicate, and then, some magic happens. I am not sure what the magic is, but my understanding is that AngelList makes some sort of vehicle where the syndicate can each put money into the vehicle, or is it AngelList just brokers the arrangement and the angel invests directly in your company?

Jay:  The way that it works in practice is there’s a person that has a syndicate, like you say. There’s maybe anywhere between 2 to 100 people that are following a syndicate. Then the syndicate lead will say something like, “OK, guys. I’m going to make an investment into this company. Here’s what it looks like.” At which point, depending on Angel List settings, and I’m not sure about this, it’s either opt‑in or opt‑out.

If people want to opt into the deal, they can say, “Yep. We agree with this deal. It looks great. I’m in,” or if they want to opt out, they can say, “You know what? I’m not interested in this space” or something like that, they can opt out. With that in mind, it’s actually kind of interesting. You don’t actually know, if you’re leading a syndicate, the amount of investment money that you can get until you actually decide to lead a syndicate investment and see how many people join.

Any person that’s running a syndicate who’s fairly well known that says, “OK, we trust these guys and we want to invest into them,” that’s a very strong signal. As Patrick said, if you’ve got some spare cash sitting around from Google stock share sales or something like that, you can say, “I’ll throw in behind all these people.”

Then what actually happens is if you’re an entrepreneur on the other side, you perhaps might start to trend on Angel List. Then you start get a lot of attention and people start to follow you and people might start to say, “Hey. Can we hop on the phone for a call?” at which point you lose a tremendous amount of sleep if you’re living in the Tokyo time zone…


Jay:  …because they all want to call either very late at night or super‑early in the morning. You’re a bit of a zombie for a little while. Hopefully, you can close enough deals on the phone or you can get enough people interested in investing that you’re ready to go. You can pull together your funding round.

We got very lucky. We set out to raise $400,000 and in the end we ended up almost double oversubscribed at $750,000, which would not have been possible without AngelList, especially because we’re trying to do this remotely. There are already some difficulties, where somebody can’t drive from Sand Hill or wherever they happen to be living in San Francisco to come visit you guys in Japan.

That’s a little bit difficult, so there’s a little bit of extra, I would say, latitude that we have to spend a bit of extra time and effort in trying to assure people that we’re good people. Sure, we’re doing this in a foreign market, but it’s B2B SaaS. It all looks similar. The numbers are similar. The market is huge and exciting and all the rest of it. You close a syndicate deal and then what happens is there is a single line on the cap sheet in respect of that deal.

All the angels invest into a holding company and that holding company actually makes the investment into your company. You get a single wire and a single name on the cap table and that’s it. You’re done. You don’t have to chase people to sign agreements or do any of that kind of stuff. All of that is done and fully managed by AngelList, which makes having 60 investors a cakewalk.

It’s simple. All of a sudden, you get a big wire of cash and a single entry in your cap table and that’s it. You’re completely done. That was transformative for us. Moving forward it’s not going to make sense to raise money using something other than AngelList. It just makes it so easy and straightforward.

Keith:  That’s a glowing recommendation if I ever heard one.

Jay:  Yeah, it was great.

Patrick:  This is particularly true for folks who might be raising from smaller angels or angels who don’t have a strategic profile to them. For example, if you’re someone who previously has some successes as an angel or as an entrepreneur and is known to have the capability to open doors, then a startup like MakeLeaps or another startup would be crazy to not jump through any hoop you put in your way to getting a check.

Well, given that it’s a relatively reasonable process. If you require a custom document ‑‑ a custom negotiation of the terms of the agreement, as long as it’s something reasonable, there could be founder time invested into getting a $25,000 check from you.

If, on the other hand, you’re J. Random product manager from Google, you don’t particularly have any successes behind you. Your main capability of contributing to a business is the ability to contribute a check full of a meaningful amount of money, but not a gigantic amount of money, then startups, particularly startups in demand, don’t really have a lot of reasons to spend huge amounts of their time on the phone with you, when they could be spending huge amounts of the time on the phone with either a better‑known angel or with their customers or employees trying to move the business forward.

Moving the amount of pain, the transaction costs of doing business with you down opens up more deals to you, which is probably one of the reasons that AngelList is going to eat large segments of the angel fundraising market, particularly on the low or less‑established end.

Jay:  Absolutely. It’s either “click, click” and you’re done, or “click, click, phone call, send a document, get somebody to sign it. Did they sign it? Oh well, they went on a holiday for three days. Try to call them again, but they’re not around. You need that document to close your deal,” or “Click, click, you’re done.”

It’s very clear that “click, click and you’re done,” the way that AngelList has made this very possible, and simple, and easy, it’s great. I can’t recommend it enough.

Keith:  It’s also easier for the investor, as well, because you don’t have to jump through all the hoops, as well. You don’t have to vet it as well as you would if it was a one‑on‑one.

You have other people. You have that social proof working for that, as well. It’s a lot easier for people now to invest, as well as be invested in.

Patrick:  Right, and we’re not trying to convince anyone out there in podcasting land to become an angel investor because the mathematics of it are exceptionally unfavorable unless you already know what you’re doing and you have lots of money to burn. Be that as it may, even knowing that the underlying math was difficult, the actual mechanics of doing angel investing two to three years ago were a little painful.

I have two very small angel investments, and because there’s actual contractual language involved we have to run it by a lawyer. Let’s say that I spent a high portion of my very small check size on having a lawyer look over four pieces of paper and make sure that I wasn’t giving up the general store in those four pieces of paper.

That wasn’t really something that I wanted to do. It wasn’t something that the startup wanted to do.

It’s like, “OK, we’re both professionals. We both have different bases of IP, which we want to mutually know is not going to cause problems for anybody, so the lawyers will be involved.”

With AngelList, if everyone is using substantially the same paper, which has been vetted by AngelList’s presumably top‑tier, VC, yadda, yadda legal firms in San Francisco, then there’s less legal risk involved with that paperwork.

Jay:  Very true. What’s interesting about the whole process is you can choose the set of documents that you want to use.

If you’re raising, say, $400,000 on AngelList, people will see that as, “OK, they’re raising 400k, they’ve got over 50 percent committed, and they’re using, let’s say, Y Combinator SAFE documents. Oh, OK, that’s a very clear, very easy to understand structure. It all makes sense.”

There are all kinds of different SAFE documents, so you can pick the kind that you want, and say, “OK, here are the base default documents that we’re asking everybody to sign. That makes things easier, as well. When we did our round we had an investor or two say, “Listen, the terms are good, but we’d like this favorable term,” or something like that.

When you’re doing an AngelList syndicate and you’re already almost double overcommitted, it becomes very easy to say, “OK, we appreciate that you’d like to be involved. You want this favorable term, however, we’re already double overcommitted and everyone has signed documents that do not include this favorable term. If you’d really like to be involved we’d love to have you involved, but the documents are the documents.”

It becomes very easy and straightforward to say that. Negotiation becomes very simple because everyone signs the same documents, and away you go.

Patrick:  What Jay’s saying about favorable terms is important. Traditionally in angel investing there is a few axes that the deal can move along.

One is fairly simple, “What’s the price this deal is being done at?” is something, which is fairly uncomplicated, which has not always been true.

You can imagine, using very simplified math, if I’m willing to buy 10 percent of the company for $10,000 that puts the value of the company at $100,000, which is much lower than any company would actually be valued at, but simplified math.

Those two numbers, which sum up the price of deal, are one way to evaluate the deal. There’s other terms that might be involved with exactly how the math works out in the event of an acquisition, or a down round, or various other things in the company, like, say, whether you get liquidation preference.

A liquidation preference is typically in the interest of the investors, not really in the interests of the firm. Certain liquidation preferences are borderline abusive.

Which doesn’t mean that they were never signed.  A few years ago there was not the understanding in the entrepreneur community that a 3X liquidation preference is not a market term.

Also, supply and demand. People were saying, “I will only give you my money if you include a 3X liquidation preference.”

Like Jay said, if you’re oversubscribed and the funding round is happening with or without someone’s particular $25,000 check, you can say, “Look, the term that we’ve negotiated with everyone is,” for the sake of discussion purposes, “a 1X liquidation preference, ” or “no liquidation preference, and that’s kind of the deal. You can choose to do this deal or not do this deal, but we’re not going to negotiate consequential terms like that with you.”

Jay:  The way that we ended up saying it was, “Listen, for us it’s very important to keep good relationships with all of our investors. If they found out later that one investor got preferential terms over everybody else, then that’s kind of a big, serious issue.”

There was a point that I needed to make that was fairly important, and that was the way that we ended up responding to people who asked for preferential terms. “Listen, we’d love to have you involved in this, but we don’t want to make a situation where the other investors feel like they got a bad deal or any one particular person out of 20, 30, 40, 50 people didn’t get that same deal.

“In the interests of keeping good relations between MakeLeaps and all of our investors, we’d really love you to sign the standard documents. That’s very simple, and easy, and then you can be involved, and that’d be great. If that’s difficult for you, completely understand. No problem at all. Please let me know what you’d like to do,” is the way that we handled that.

That was very smooth, and successful, and an easy way to explain what we were doing and why without treading on anyone toes.

Patrick:  This is, incidentally, something which is useful, not just in negotiating investment, but in negotiating all sorts of contracts. It’s something that your vendors will occasionally do to you.

A, if you’re selling, say, SaaS where there is an actual, physical contract in play, and it isn’t the standard contract of adhesion ‑‑ presuming you’re selling on the several thousand dollars of services every year [inaudible 17:35] companies ‑‑ you should probably have a template agreement, which you give to all of your customers.

Your first negotiating position can always be, “Well, our standard offer is…” blah. If they say, “Well, we would really prefer….” some term in there, “…which is more favorable to us than what you have right now,” you can say, “Well, this is the standard thing we offer to all of the customers at the level of service which you’re currently willing to sign for.”

“If you want to upgrade to our super‑duper platinum enterprise thing, we could discuss individualized contractual language with you. But, at the $1,000‑a‑month level of service you’re at, the $2,000‑a‑month level of service, we really encourage the use of our standard terms.”

Maybe you win that deal, maybe you don’t. That’s a negotiating tactic that you can do, which is fairly low‑risk.

Jay:  Exactly. If you’re speaking from a position of strength where you have other customers signed up to that same deal, you don’t need that deal to make your rent payment, or something like that, then it’s very easy to do.

Say, “Listen, here’s the deal that’s available right now. If you can sign it, great, if not, no problem. Best of luck, and hope to run into you again in the future,” is a very strong negotiating position to be taking.

Patrick:  I had this once for Appointment Reminder, where I’m trying to get business associates agreements, a particular type of paperwork, signed between Appointment Reminder and all of our medical customers. Many of them had already signed it, but some of them were waiting on it.

I have gone out to the folks who were still on the not signed state and said, “Look, we have a standard BAA ready. I’ve prepared it for your company. Please sign it immediately.”

Some of them are saying, “Well, we have to run this by process A, process B, and process C.” Most of these are not large accounts.

My position has been, “You have neglected signing this contract for a while, which puts us both in technical violation of some regulations, so this really needs to get done this week, rather than being done after the lawyers get through with it. Our current documents work. We know they work. We’d highly encourage you to sign the correct document.”

Keith:  What I find a lot, especially in consulting, is what you said Jay. It’s talking from a position of confidence, and power, and “OK, I’m going to be able to make my rent this week, do I really need this contract if they’re asking for all this stuff?”

What I’ve really found is that the more concessions you make, the lower your status becomes, the more power the client has, and the more things that they’re going to demand of you. In many cases, not all of them.

I think always working from a position of power, and from a position of, “OK, this is standard. This is the way we do things,” and, like Patrick said, “If you want extra things, it’s going to cost this much for adding that on.”

What a lot of people don’t realize, negotiation is a two‑way street. It’s not someone telling you what you’re going to do. You need to work out what’s beneficial for both of you, so that you’re both on the equal footing.

Patrick:  The magic words for negotiation are “mutually beneficial agreement.”

Keith:  Exactly.

Patrick:  Like Keith was saying, sometimes people who are maybe a little closer to us in mindset hear the word “power” and they get a little bit scared about it. Maybe we could think of it less of it being a power relationship and more about you having a mentality where, “This is one deal out of a universe of many abundant deals that are going to happen over the course of your business career.”

Given that, you do not need this deal to close. You’re in a position to hold out for terms on the deal that make sense to your business and to say, “OK, if the terms of the deal that are being offered right now don’t make sense for the business.” Then we will shake hands, we’ll part as friends, and maybe we’ll do business in the future, but not under terms which don’t make sense for me in the present moment.

Jay:  Of course, the classic negotiating idiom is two people want an orange. One person wants the skin of the orange, and one person wants the inside of the orange.

[Patrick notes: There are many SaaS negotiations like this, where e.g. the buyer sincerely wants the software to be maintained and the SaaS company sincerely wants thousands of dollars, and neither realizes that the other would grant that request in a heartbeat rather than it being a key point of contention.]

Then somebody cuts it in half and says, “OK, you both get half,” where both people could get 100 percent of exactly what they want if they talk about it a bit more, and understand each other’s goals, and what they’re trying to do in trying to divide an orange.

“Just buy two oranges,” is what I think actually listening to that idiom again.


Jay:  From that position, I think it’s always good to understand your negotiating position against somebody else’s, but let’s not get too far into negotiating theory and all that kind of stuff, though it’s interesting.

Patrick:  One thing I want to ask is you’re a Japanese company. You’re completely founded in Japan.

You’ve been running in Japan. You’re towards the Japanese market. Why Silicon Valley for funding?

Jay:  Good question. I suppose the best answer is because Silicon Valley came calling. Naval from Silicon Valley came over, got to know us, met us, found out a lot of information about us, and offered to invest.

From that perspective, we could have gone out and aggressively looked for Japanese angels and done an angel round that way. However, the Japanese angel ecosystem is not one percent of what it is in Silicon Valley.

I recently had a trip to San Francisco and I checked into my Airbnb. I walked outside and literally ran into a MakeLeap investor, completely randomly on the street.


Jay:  I’d only actually met him via video chat. We had two video chats.

He walked past me, and I was like, “Oh, man, I’m pretty sure that’s Tom.” But I was like, “Do I go over and accost him, and say, ‘Hey, do you know who I am?!'”


Jay:  Of course, that’s what I did. I’m Australian. I can’t help it.

I went over, and I said, “Hey, do you know who I am?” and of course he responded as if he was about to be mugged. He took a step back, and I was like, “No, no, no. I’m Jay from MakeLeaps.”

He’s like, “Jay.” I’m like, “Yeah, Tom.” He was like, “Ahh.”

That is the sort of thing that you can experience in Silicon Valley. [Patrick notes: People have come up to me on the street in Silicon Valley and asked “Excuse me — are you patio11?!”  Craziness.] If you walk outside in Tokyo, you will have to throw a lot of rocks before you hit an investor, [laughs] or an angel investor. It’s not so common here.

As Dave McClure says, “Angel investors are the limiting factor to any startup ecosystem,” and I agree with that. The value that you get from an experienced angel investor to give you advice, and capital, and point you in the right direction is really super‑invaluable.

We found that, once we did the syndicate round through AngelList, a lot of people became interested in Japan and the Japanese market, as well they should. Japan is still 15 percent of the entire world’s GDP.

It’s still the third largest economy in the world, full of affluent businesses and consumers. It’s a really exciting space, so people see this opportunity, and it’s rare that a company, especially run by foreigners, is aggressively focusing on focusing on and targeting the Japanese market.

[Patrick notes: I am perennially annoyed when people — inside and outside of our industry — treat Japan like its an also-ran whose time has faded, or are unaccountably surprised when Japan proves to have a lot of money.  One common article in the business press about e.g. iPhone penetration rates could be titled World’s Third Largest Economy Discovered To Contain Money.]

I guess, because of that, we also got a little bit of interest from people who’ve always been interested in Japan and wanted to find a way to get into Japan a bit more. We became that opportunity for them.

Patrick:  The understanding of investing investors, VCs, angels, service providing firms, companies, entrepreneurs, et cetera, our ecosystem is really important because all these things are interconnected.

For example, not only does Japan have fairly few angels who have operating experience in technology companies, it has few enough…Technology companies in the sense that we mean the word technology companies.

There are many tech firms in Japan. Most of them are not SaaS firms. In fact, I would have difficulty naming five Japanese SaaS firms.

Jay:  It’s not a common model in Japan.

Patrick:  Not a common model yet, so there aren’t people who have successful exits at these firms, who then turn into angels and start giving money to the next generation of entrepreneurs. Even though that’s the probably the same generation of the actual people. There’s not the sort of established best practices here for people who can….

There’s understanding in the market in Silicon Valley that a SaaS firm that has a particular metrics ‑‑ “A churn rate of two percent is really, really good amongst most SaaS,” for example. That there are probably on the order of 20,000 people in San Francisco who could tell you that off the top of their head, where in Japan you could probably go to a lot of professional angel investors here and ask them to define churn rate and have them be unable to answer that question.

Jay:  I agree with that. Yes, that’s true.

Patrick:  The three of us all have high hopes for Japan over the next short period and in the long‑run on both having successful exits, having this information percolate through the various channels, both Japanese and Japan‑resident foreigners, and hopefully having the market mature a little bit more here.

Keith:  I’m the only one in the room who doesn’t live in Tokyo.

Jay:  We’re working on that.

Patrick:  We’re working on that.

Jay:  I got one of you guys to come to Tokyo.


Jay:  It’s just a matter of time, Keith.

Keith:  Yeah, I’m number two, right?


Patrick:  It’s true. I’m in Tokyo largely because Jason is here. He and I have been good friends for the last four years.

Keith:  Also, it’s Tokyo, so it does have a lot of benefits over Ogaki

Patrick:  Tokyo is not Tokyo for everybody, although Tokyo is Tokyo for me now, darn it.


Patrick:  Darn it, Jason, you were right.

Jay:  That’s deep. That’s deep, Patrick.

That’s true. I’m so glad you think that.

Keith:  I think you need another drink.


Keith:  I did want to ask, me being not in Tokyo, not as much in the scene, when I think of a Japanese startup, what I’m really thinking of, and what I see a lot of, are Japanese megacorps who have that SaaS division.  [Patrick notes: Many Japanese companies have an empire-building complex.  In the US, Salesforce has essentially one product.  Dropbox has essentially one product.  Basecamp has essentially one product.  Their Japanese analogues own domain registrars, web development agencies, and — in many cases — restaurants or hotels.  I kid you not.]

I’m thinking of a lot of companies that…like Recruit. Recruit has a ton of SaaS companies, divisions.

Jay:  “Intra‑preneurs.”

Keith:  Exactly, and they’re very different than a bootstrap or a SaaS that’s going to be invested in because they’re owned by a giant, multibillion dollar company, right?

Jay:  Right.

Keith:  It really changes the landscape, so there are fewer investors. Companies do not buy SaaS here like they do in the States.

Jay:  Yes, there’s definitely a lot less exits and acquisitions in Tokyo, much to the chagrin of all of the angel investors, especially foreign angel investors.

You will see a company like Recruit say, “OK, we’ve identified a need in this market. Let us build a solution for that market, rather than acquire the established current leader of that market that’s going really, really well.

“Then we’ll put $20 million behind their marketing campaign and, boom, now we’re number two,” or three, or one, depending on the market and the company, which is not great. Then again, you don’t necessarily want to look towards giant companies in Japan to really support the startup ecosystem.

Keith:  Not at all.

Jay:  It’s not a good strategy.

Keith:  I work with a lot of marketing companies, especially in [inaudible 28:35] area. For the last four years, I’ve been really pushing for A/B testing, and analytic testing, and stuff for marketing tools in Japan.

I was talking to, literally, the largest digital marketing firm in Japan. I was like, “Yeah, you know they have all these great tools, Visual Website Optimizer, Optimizely, all these things, Crazy Egg, that you can use to test.”

They’re like, “Yeah, we know. We’re really pushing hard to create our own platform to help our customers.’

I’m like, “Why don’t you just help your customers by…”

Jay:  “Introducing a tremendously successful thing that already works right now?”

Keith:  Yeah, it’s like, “Why do you want to build…?” I understand why they want to build the competition, but it’s like, “You could be helping them now and build that on the side.”

It’s like, “We’re not going to touch A/B testing, we’re not going to touch marketing, until we build this tool.”

It’s still not built. That’s four years ago.

Jay:  Sure, of course. Of course, yeah.

Keith:  That’s what happens, so now they’re late to market, and…

Jay:  Of course. People underestimate complexity in software endemically, especially in Japan. It’s like, “Oh, it’s software. Just somebody build it. Easy, done.”

Especially for invoicing. A lot of people will have their own solutions, or a lot of people will be considering, “OK, do we go with MakeLeaps or do we build our own solution?”

[Patrick notes: The build-versus-buy decision for anything at a SaaS company which isn’t something you actually sell should come down to “Can I do this before lunch?”  If yes, build.  If not, buy or adopt OSS.]

The way that I look at this is very similar to, let’s say, an infrastructure question where somebody says, “OK, well, Gmail looks pretty good with your 500 of the most qualified engineers on planet Earth 100 percent focused on this 24 hours a day, but I really want to be able to control my own infrastructure.”

It’s like, “OK, so what would you like to do?” It’s like, “Well, instead of using an established platform run by literally the smartest people on Earth, that are qualified to do this exact kind of thing, I want my own server.”

It’s like, “Great, so when there’s a problem at 2:00 AM, 500 of the smartest people on Earth are not focused on your problem.”


Jay:  “They’re eating free lunch because today’s Mexican day at the Googleplex. That’s great for them, but you’re screwed because your email server’s offline for four days and your business stops. It makes obvious sense to start…”

Keith:  Japan has a huge thing about “not built here.” The thing is, we have a ton of smart people, and we have a ton of smart people who love solving hard problems.

They love solving hard problems, and that’s not a bad thing at all. It’s a great thing, especially for new IT companies in Japan.

The problem is that a lot of people would rather be solving those problems than using a solution off the shelf that solves the issue, that solves the business need, right?

Jay:  Right.

Patrick:  I find, in dealing with larger Japanese companies, that when they’ve identified an intrapreneur and said that, “OK, this person has put in 20 years at the company, they’re a known quantity. We’re going to stake a few million dollars of the budget to build a competitor to Optimizely or Visual Website Optimizer.”

They don’t think of what Optimizely and Visual Website Optimizer were when they started, something put together by one person or a very small team, thrown together in six weeks, and then exposed to the market for feedback.

They think, “No, no. We’re going to try to escape to where they are today,” and with several tens of person‑years of engineering effort involved.

“OK, well, if it takes 50 person‑years of engineering effort to get to where this is today, that’s all right. We will hire 25 engineers, and we’re going to put them on a project for two years.

“In two years from now, we will be where Optimizely is in 2015.

Jay: “We will release our unmarketable product.”


Patrick:  Aspirationally in 2017, they’ll be almost where Optimizely is in 2015 as experienced by someone who doesn’t really understand the product because they never actually used it in anger.

Keith:  I think a lot of people are listening right now are like, “Oh, no. It’s not as bad as you say.” I have had literary three Japanese clients last year that this was exactly their problem. They would not MVP it. The contract was for an MVP. We worked out a thing.

It’s like, “Take this to your client. Start selling it and then we’ll start building the next one.”

They’re like, “No. No. We have to have all the features. It has to be complete. It has to have the bells and whistles, invoicing and all this stuff before we even show it to our potential customers.”

Jay:  Here’s an interesting theory on this that I heard recently which I kind of agreed with and I think it’s fascinating.  Typically, Japanese companies and people approach software the same way as they have successfully in the past approached hardware.

Keith:  We’re a hardware country.

Jay:  Exactly. You can’t show someone hardware that’s 20 percent complete because that’s zero percent complete. Hardware is binary. It works or it does not work for its intended purpose. People have tried to apply that same idea to software and it doesn’t work in 2015 now. I almost said ’14 but it’s ’15 now. It makes sense to roll out something that works to fulfill the purpose that it’s built for and then you iterate from there just like software.

Keith:  There are two comments I want to make. The first one is that there’s this great Dilbert cartoon where the boss is saying, “Measure twice, cut once.” Dilbert’s response, “Well, when thinking measured is infinite and the cost of cutting is zero, it makes more sense to measure once, cut once and then iterate quickly.” It doesn’t work with hardware.

I keep telling this to all my American friends or my western friends in general. They’re like, “Oh, Japanese IT, software must be so amazing.” I’m like, “No, it’s not.”

You think Japan, you think electronics. That’s true. Electronics are not software. Electronics are hardware. You look at all the hardware, all the electronics that come out of Japan that have been amazing and they’re all hardware based, the Walkman, the CD, the CD‑ROM…


Jay:  …PlayStation.

Keith:  PlayStation. Oh, my god. PlayStation.


Keith:  Word processors, the toilets. It’s all hardware.

Jay:  Magic toilet. Oh, god. I love my toilet.


Keith:  It’s all hardware.

Jay:  That’s very true.

Keith:  The software in Japan…You look even at a simple website, it’s horrible.

Patrick:  With exceptions for maybe embedded programming and video games.

Keith:  That’s about it. This is interesting. We built an OS back in, I think, ’85, I want to say, that is the kernel level OS for pretty much 90 percent of ATMs in the world, but it’s so low level. There’s no user interface. There’s no nothing. It’s built on top of…We built tools. We’ve built hardware. We built things.

Jay:  When you say “we'” you’re referring to Japan, which is interesting.

Keith:  I’ve been here for 12 years. Almost my entire business career has been in Japan. I worked at an internship, then I worked at a startup job during my college years in America, and then I moved out here.

[Patrick notes: Keith cofounded an RPG company.  His comment on that: “Want to know how to make a small fortune in RPGs?  Start with a large one!”  It’s a horrible, horrible business to be in.]

Jay:  Your formative years in Japan.

Keith:  I know. I wonder if it’s hurt me. People tell me I have a very different thinking about business than western…I like it. I think it’s a good way of thinking.

Jay:  We all bring our own unique experiences to our work in all of this in much the same way. I came to Japan when I was 19 to originally study martial arts. Now, I’m running a SaaS business. Japan has been an interesting country for us both to grow in because you’ve been here for 12…?

Keith:  12 years.

Jay:  How old were you when you first came to Japan originally?

Keith:  I was at 22.

Jay:  Interesting. How about you, Patrick? You’ve been in Japan also for a long time.

Patrick:  Yup. About 10 years and change now. I think I came out three months after university ended. I’ve been here, essentially, for the duration ever since. All of us have careers has been shaped by our time in Japanese organizations or in foreign organizations that were operating in Japan.

It’s a pretty fair statement to say that if you took a look at the a day in the life of one of our businesses, it would not exactly look like it would if we had grown up in Tulsa, Brisbane or yada, yada and have the business grow up with us there.

Jay:  That’s true.

Patrick:  Or San Francisco.

Jay:  One thing that kind of blew my mind was I had to return to Australia for a five‑month period. This was maybe coming back like seven or eight years. I had to run a business from Australia and I had to do some business in Australia. What struck me was how simple everything was. It was so straightforward.

Keith:  [laughs]

Jay:  I needed to do something. I make a phone call and I have the thing that I need. I needed a contract. It’s like boom. “Here’s what we want to do.” It’s like, “All right. We’ll sign here and…”


Keith:  No huge back and forth and all that.

Jay:  It’s like, “What the hell is this? I have like two things to get done today. It’s 10 AM and I’ve done three things now.” It kind of blew my mind.

Keith:  I had a client who would not discuss anything over the phone or email. It had to be in person.

Jay:  That sucks.

Keith:  We cannot come to an agreement on things except by meeting and talking. There’s no way to come to an agreement over email or a phone call.

Jay:  That the magic of SaaS business.

Keith:  [laughs]

Jay:  When every single of your customers is paying you $20 a month and somebody says something like that to you, you can…

Keith:  Delete the account.

Jay:  Exactly. You know what? That sounds great. I’d love to spend the next six months talking about your $20 a month account, but no. [chuckles] No. No. No. No.

Running a Low-touch SaaS Company In Japan

Patrick:  That’s an interesting segue. Like we said earlier, there’s very few SaaS companies in Japan operating at any sort of scale. Most of them that are US transplant like Salesforce does very, very good numbers here. Many US enterprise companies do good numbers by merging the traditional enterprise sales culture of the US with the stuff that works in Japanese market.

On the low touch end of things, there’s not that much. What have you done with MakeLeaps that’s been successful with getting thousands of paying customers on the lower touch end of things?

Jay:  Well, one thing that’s kind of interesting in Japan, I would say, is an incredibly high level of customer support. In Japan, it’s table stakes. That does not set you apart from any of the other companies in Japan that also have an incredibly high level of support.

Patrick:  Can I jump in with an anecdote there that happened to me today? I go to a hair salon. I’ve been there maybe twice since moving to Tokyo. The young lady who cut my hair both times is moving to a different branch of the same hair salon in Tokyo.

She sent me a two‑page, honest to God, handwritten letter thanking me for coming in, visiting her twice and getting my hair cut. Giving instructions that I can give the next person that cuts my hair and directions to the new hair salon where I can find her if I want to travel 15 minutes out of the way to get my haircut.

I will be getting on that train to get my haircut, obviously.

You can imagine this is somebody whose per-visit value is what, 50/ 60 dollars for a salon haircut here. That’s a level of care that most SaaS companies that have account values the $5,000 a year range do not send handwritten letters to their customers saying, “Hey, we’re just dropping you a line because we like you.”

Keith:  If you do want to send them, I recommend MailLift.

Patrick:  MailLift?

Keith:  MailLift is a handwritten letter by API.

Jay:  Does it work in Japanese?

Keith:  It does not work in Japanese, but a great SaaS idea for anyone who wants to start a handwritten API.

Jay:  That’s a good point. There’s actually a bit of a problem in Japan right now, I think, where older workers are not able to assimilate into a lot of the newer roles that are being created as certain sections of industry are phased out.

Something like that would actually be interesting idea to look after the rapidly growing section of Japan, which are the older seniors. As we all very likely know, recently, adult diapers finally began to outsell baby diapers in Japan, which is terrifying.


Keith:  It’s only going to get worse.

Jay:  That’s very true. That’s only the start of the trend. There are a lot of potential business opportunities for older people in Japan for sure.

Keith:  I think it’s interesting though. I’ve wondered about doing a MailLift version in Japan. The thing that convinced me against it was that why would a company not get their OLs or their, I guess, window watcher is the best English term for madogiwa. Why would they not get them to do it?

Patrick:  Well, there’s actually companies…They don’t have the API piece. API piece is what scares them because you would have to convince companies on integrating an API to get business, which is not something many Japanese companies are very keen on.

Jay:  Considering that they don’t understand the word API. [chuckles]

Keith:  You could say integrates with Salesforce.

Patrick:  There are even at least five of these in Ogaki where the company is typically a printing shop or something where they have the traditional mass-scalable printing equipment there.

They also have, essentially, little ladies who will handwrite documents that you take to them with the idea being that certain classes of documents in Japan can’t really be printed and still have the kind of heft to them, personal letters, certain forms of certificates and whatnot. These require a bit of skill with Japanese calligraphy, which the little old ladies have. If you don’t, if you are the poor, semi‑illiterate graduate of the modern Japanese educational system [Patrick notes: sarcasm tags] who can only type, then you’d go and pay a little lady $20 a page to handwrite your customer facing documents.

Jay:  Very true. That’s a good point, but the other thing that I find a little bit concerning and perhaps another reason to not start this one particular business is sometimes, in Japan, the act of doing something because it is time consuming, ridiculous…


Keith:  Don’t even get me started on that.

Jay:  …and all the rest of it. The act of doing that is what’s valuable. If you were to outsource that to somebody else for $20 a page, that act, essentially, becomes meaningless. It’s a concern that I will have.

Keith:  We talked a little about this in the last podcast where we were talking about getting the busy work done feels good. It’s an extension of that where taking the time, putting the effort even though it’s not what is the best for you or the company, it feels good and it feels right.

Patrick:  Also, seen from the perspective of the customer, I think Jay is right. That sometimes the conspicuous expenditure of resources as a way to signal commitment, that’s something you see in all societies. There are rituals for it everywhere. It something that Japan embraces a lot.

Jay:  Very much so.

Patrick:  For example, in Japanese politics, if the ruling parties is having difficulties, they send out the equivalent of US congressmen to stand at stations in Tokyo outside of the gate. They get on a soapbox and say, “This is the Liberal Democratic Party. Please support us. We want to work together for a bright vision of Japan’s future. This is the Liberal Democratic Party. Please support us.” The person is basically on loop for three hours.

Keith:  I do work with political candidates as well for marketing and stuff. They actually have people whose job is to repeat a speech on a megaphone as they drive around the city for eight hours a day.

Jay:  This is one of the areas where I take issue with Japan. I love everything about Japan. I love the people, the food. Everything about it is great. Noise pollution laws, where are you on this one Japan?

Keith:  [laughs]

Jay:  What the hell is going on? I say this without doing any research, the only civilized country that has zero noise pollution laws.

Keith:  We do have noise pollution laws.

Jay:  Really?

Keith:  Oh, yeah.

Jay:  When you say “we do,” you mean Japan.

Keith:  Japan has noise pollution laws. I looked this up because I have a noisy neighbor. I think it’s 80 decibels or something like that. It’s ignored for many, many things.

Jay:  I see. Keith, as difficult as I’m sure your situation is with your noisy neighbor, I’m a little more concerned about the people who are driving around with megaphones on Sunday morning!

Keith:  No. It’s horrible.

Jay:  For me as well. I’m a foreigner so therefore I cannot vote in Japan. However, if there was a candidate that said, “You know what? I’m against noise pollution. I’m going to make noise pollution laws in Japan.”

I would totally support them even though that support would be meaningless. The problem is that person could never be elected because he could never announce his platform to all the people to put him to be potentially elected.

Keith:  It’s going to change because this was the first year. This last election was the first year. I don’t want to get too much in the politics so let’s kind of cut it.

Jay:  We’re leaving out sex and religion. Let’s go into politics. Go for it.

Keith:  This is the first year they could do commercials. If you went on YouTube during elections, there were tons of political commercials. For the first year they’re actually allowed to do social media.  They were allowed to do blogs before but they had to actually write them themselves. You could not hire a marketing firm to do it.

Jay:  For $20 a page. [chuckles]

Keith:  You could have a marketing firm tell you what to do and then you do it but you had to actually physically do it. Those laws are changing. I helped a political candidate. I’ll be helping another one with their social media platform this coming election in…When is it April or whenever.

Patrick:  That’s probably something to nail down prior to taking politicians on as clients.

Keith:  There are a lot of business opportunities in Japan. In Ogaki, there’s very little. It’s pro bono. This is totally a, “Hey, you’re a friend of my wife. We hang out. I’d love to help you out. Let’s do some social marketing for you kind of thing.”

Patrick:  That makes sense.

Keith:  I haven’t done Abe’s — the Prime Minister’s — marketing campaign.

Patrick:  You would probably have to know when the election is if you’d be doing that.

Keith:  There’s snap elections. You don’t know.

Patrick:  That’s right!  We could schedule elections like a week from now.

Keith:  They did do that.

The Difference In Bootstrapping And The Venture Track

Keith:  We are kind of getting long on time. I do want to be conscious of everyone’s listening time because we have had complaints that three hours is a long time for a podcast. had always been bootstraped and it was a big decision for you to take funding. How has taking funding change the way you’re doing business from being bootstrapped?

Keep in mind people who are listening. This is not like, “Oh, I got $5 million of funding.” It was a sizeable funding amount but it’s not like you’re going off and buying Lamborghinis tomorrow.

Jay:  If I could find a Lamborghini that I could buy a number of without causing problems for my bootstrap, then I’d consider that. It’s $750,000 of funding that we have to use in a really good way to either, I suppose, build in the features set that is very compelling and that enables us to get to the next level of the business.

We have to use that funding to, essentially, get us to a point where we’re totally happy and ready to go out and do a Series A funding round, which we’re on track to do within three to six months from now depending on how it all goes.

Your question to how did the tenor of the business or how did the atmosphere change before funding and after funding is a really important one and a good one. It’s tremendously important to have good mentors because I have a lot of very dumb questions that I needed answered. “Well, if I sign this, does that mean that I don’t run the company anymore?” Kind of level of questions like that.

Of course, I’ve done a lot of reading. [Patrick notes: Jay recommends Venture Hacks and pg’s blog on this topic.]  I’ve done a lot of learning and I’ve gotten a lot of advice from people. When you do funding, it comes down to two things, economics and control. The extent to which you understand both of those is very critical when it comes to negotiating those kinds of deals.

For me, I was more concerned actually about the staff and how MakeLeaps staff would feel about…Suddenly, we have a lot of investors because that’s kind of confusing. They would ask all the questions that I needed to ask to understand really what was going on and how it was going to affect things.

I made sure to talk to everybody and say, “Listen, we’ve done very well up until this point. We’ve managed to get many, many users, many, many customers. It’s all very exciting. We’ve come to the point where people are interested to invest money into us.

At this point, you have to know that I’m not getting to let some person who could be destructive or cause problems for MakeLeaps into an area where they could potentially cause problems for us. We’ve been successful up until this point by doing what we’ve done. It’s not in anybody’s interest for us to radically change things like completely different in a crazy way when we’ve achieved really great growth up until this point.

For me, it was critical to, number one, understand the impact of investors coming into MakeLeaps. What would they expect? How they could offer value and how they could help us get into the next level? It’s important for the MakeLeaps staff to understand that it’s not going to change the tenor of the business.

In fact, if it has changed things in a very serious way, that’s my fault as CEO. I haven’t done my job well enough.

Number one, I want to find the right people. Number two, I want to explain the process and how we’re going to do it. Of course, we have the MakeLeaps vision — where we want to go and how we want to get there. That needs to be clearly communicated to both staff and investors.

One of the things that I’ve learned is…Well, there’s actually a great film. I think it’s called “The Watchmen.” There’s a particular character in that film. His name is Rorschach. He’s like this crazy guy. He gets caught and sent to jail.

This sounds like a sidetrack, but it gets really relevant in a moment.

Keith:  [laughs]

Jay:  Essentially, he ends up having to go to jail. In the jail, there are many of the criminals that he himself put into the jail. He’s standing there and they can’t wait to get their hands on him, beat him to death and all that kind of stuff. He looked at all the people that are standing in the jail and he says “You know what? I’m not stuck in here with you. You’re stuck in here with me.”

That’s what I realized about investors. It’s like I will talk about MakeLeaps for literally 24 hours with anybody who wants to talk about it. I’m very, very happy to discuss and talk. When people say, “You know what, I’ve been thinking for MakeLeaps. How about we do something like this? What do you think of this kind of idea?” I’m very happy to discuss anything with anybody about that kind of stuff. It’s my passion.

I sort of realize, “Well, hang on a minute. We’re getting with AngelList syndicate 60 people that are now financially interested in MakeLeaps and they’re intelligent because they’re investing in MakeLeaps.

Keith:  [laughs]

Jay:  They’re clearly cut above the standard person.

Keith:  They know what they’re doing.

Jay:  They know what they’re doing. They’ve had plenty of experience. For me, it was actually all positives. We never had any issues or problems because we had really great mentors. We had great lawyers that put together the deal well. We communicated what we’re going to do and how we’re going to do it.

Typically, when it comes to relationship breakdowns, it’s just a lack of communication about what everybody is thinking [Patrick notes: In business and in life!], so we made it a priority to communicate as much as we possibly could. We send out very regular investor updates on what we’re doing and how and current progress and all that kind of stuff.

I would say that we’ve been able to expand a lot and be able to do many different things with more resources. The core that’s got us to this point that’s been successful remains unchanged and that’s a good thing.

[Patrick notes: Seen from the outside, I’d identify the core of what makes MakeLeaps tick as a willingness to walk the line between being a natively Japanese company and a tech startup, Jay being the most force-of-nature CEO I’ve had the opportunity to meet, and a great willingness to just grind things the heck out.  Anybody can say “Try going to where your users are.”  Most people don’t sell $20 a month SaaS software by knocking on the doors of substantially every accounting firm in downtown Tokyo.]

The Benefits Of Raising Money

Keith:  I want to ask something a little more specific and you’re free to not answer this if you don’t want to. Where did you find that you had the most success with that funding? Is it building out your staff? Is it being able to do more marketing? Is it doing more events?

Jay:  I’m going to tell you guys something that you might not be happy to hear. It’s the same way for all bootstrappers. We bootstrapped for four years proudly. We’re happy we’ve gotten into this point. We’ve done very well.

We’ve received, I would say, slightly less recognition because we weren’t funded, and we weren’t in the media as much with things like funding announcements. As soon as we got funded, about a week afterwards, this one person I’ve known for a long time was like, “Oh, you got funded. Great. We’d love to do an interview with you.”

It’s like literally nothing has changed between now and when the money in our bank one week ago. Why are you interested to interview me now?

Keith:  It’s the social proof.

Jay:  Exactly. There’s social proof in that. There are certain things that have gotten easier and better as a result of getting funding, especially from well‑known people, but, as a bootstrapper, it’s always frustrated me. It’s like, come on, we are doing as well as these guys. In fact, better in many ways, but they are getting more press because they are funded.

Keith:  I do see that a lot with the bootstrapper community, especially some of the communities I am in. I don’t want to say, incestuous, but it is a closed circle. The people we know who are famous, they are famous within our circle, but if I was to talk to someone like at a newspaper, or someone in the larger startup community, they’d be like, “I have no idea who that is.”

It’s really interesting, because as soon as you get that funding, apparently, it’s this open door to, “Hey, we are a real company. We are a real boy now.” It’s frustrating, like you said. Nothing has changed.

Keith:  There’s an extra digit in our bank account now, but other than that, at that point, you haven’t even used that money yet.

Jay:  It’s a little bit frustrating, if you are operating a business, and people are suddenly interested in you, now that you’ve gotten funding, but that’s part of the game. At the end of the day, you have to figure out, how to make it work with your particular environment, the way that you have set things up.

If you can be successful and grow your business, and get plenty of media attention without getting funding, more power to you, that’s great. In Japan, people tend to respect social proof very much so…

Keith:  Did I ever tell you about the optical fiber guy, who came to my door, and try to sell me optical fiber?

Jay:  I heard this story, but it’s a good one.

Keith:  It’s a good story. I like this one. I had actually had optical fiber at this time, not through that company. He comes to my door, and he says, “You know, you are the last person in your neighborhood who has not had optical fiber installed.”

I thought about that, I am surrounded by grandmothers. I am the youngest person in my neighborhood. The three people on the side of me, I know for a fact, do not even own a computer.  They have no idea what a computer is, most likely.

He is trying to tell me that I am the last person with optical fiber, which I already have. This is interesting, because I know this works in the US as well. It is a very time tested proven strategy. It’s so effective in Japan. It’s not even crazy. I told this to my wife, and she’s like, “Oh, we should get optical fiber.” We have optical fiber!


Keith:  No one in the neighborhood has optical fiber but us.

Jay:  Keeping up with the Joneses.

Keith:  Exactly. It’s huge.

Patrick:  I am just realizing now, I bought optical fiber after hearing that pitch.

[Patrick notes: Seriously, I did.  I thought they were going to drop connections to the ASDL lines in the neighborhood or something.  What can I say, I’m a software guy, not a network guy.]


Keith:  It works.


Patrick:  Crying about it…


Keith:  Get optical fiber. There’s no…

Jay:  Not have it.

Keith:  Exactly.

Jay:  Absolutely, get it right…

Patrick:  Great reason for all you geeks to come out to Japan, you can come to Ogaki, where we have slow, slow one gigabit Internet…

Jay:  Two.

Patrick:  Two gigabit Internet, yeah, I am sorry. We upgraded in Ogaki. We’re where in Tokyo was in like 1997. [chuckles]

Keith:  What’s your speed right now?

Jay:  I’m not going to share how fast my Internet connection with you guys. [chuckles]

Keith:  No. I want to hear. How fast is your Internet connection?

Jay:  Oh, geez. I’ve been meaning to upgrade it one gig, which would be simple, painless and straightforward, but I think I’m still like 300 megabits.

Patrick:  Oh, man.

Keith:  Oh, god. That’s horrible. You’re almost American.

Jay:  I know and I’m Australian. What the hell.

Keith:  I was talking to a friend who was interning at Gawker. He’s like, “Oh, man. I’m so happy to be at Gawker because we have a 25 megabit connection.” I was like, “Since I moved to Japan, I’ve never had a connection that low.”


Keith:  12 years ago, when I was on a ADSL, it was faster than 25 megabits.

Jay:  Exactly. 10 years ago when I had like a wireless PCMCIA card, originally it was slotted into the laptop.

Keith:  It was still going at 350…


Jay:  …Of course. [laughs]

Patrick:  Anyhow, do you think we should be wrapping this up?

Keith:  I think we’re wrapping this one up.

Patrick:  Jay, do you have anything else you want to tell us?

Jay:  I suppose. Aside from the confusion where my name is Jason, but now pretty much everybody calls me Jay. I’m right in the awkward spot of transition my name from Jason to Jay. There’s still a bit of Jay, a bit of Jay all over the place but I answer to either.

Keith:  Should I go for Jay?

Sales For Geeks

Jay:  You can go for whatever you want. Honestly, if you make a noise in my direction, I will answer. However, even if you say Jay or Jay that’s fine. Speaking of which one thing that I’m pretty excited about that I should mention that Patrick has been helping me with a bit is I’m working on a new course called “Sales for Geeks.”

As a geek myself…I mean, people describe me as technical, but I can’t code very well. However, I’ve built and grown two IT businesses, one on the infrastructure side and one on the software SaaS side, so I do know a little bit about sales, communication and social skills to a degree.

Keith:  I want to mention that Jay is a force of nature when it comes to sales, networking or any sort of talking to people.

Patrick:  I’ve said for the last couple of years that Jay could probably get a meeting with the Japanese Prime Minister simply by showing up at his residence and refusing to be told no by any of the people in there. Four years ago, I said that like it was a joke. As I’ve become more friends with Jason, I think, it’s probably literally accurate.

Jay:  At this point, I should probably just do it to prove Patrick true.

Patrick:  [laughs]

Jay:  The Japanese, sometimes, if you’re being polite and friendly and you’re saying, “I need five minutes of the Prime Minister’s time.” It might be potentially possible.

At the same time, I also have a sales course to get out. Priorities I suppose. It’s very nice of you guys to compliment me in that way. As an Australian, I do struggle with compliments and accepting them in general.

Patrick:  What’s the name of that course?

Jay:  The name of the course, Patrick, is Sales for Geeks. You can access more information about this course at

Keith:  It’s such a deal!


Jay:  Order now and get a free set of steak knives. There’s no steak knife. Sorry. Order now, though.

Keith:  You’re doing it as a text course, an audio course, a video course, or…?

Jay:  I’m thinking video might be a good way forward, because in a lot of sales stuff a lot of it is quite visual. There’s a lot of body language. That factors into sales meetings in general. A video course would be a good way to do this.

Patrick:  We’re looking forward to seeing what you come up with. You can go to the website right now and start to get Jay’s advice delivered over email about this as he gets the course put together, and then you hear about it when it comes out.

Keith:  No commitment required.

Jay:  No credit card required. Sign up right now.


Jay: if you’re interested at all in learning how to sell better. It would be great to have you onboard. I’ve got a bunch of stories, sales anecdotes, and interesting things that I’ve learned in a career of 12 years. I started my first company when I was 20. I’ve got a lot of stuff to share. If that’s useful or interesting to anybody, that would be great.

Keith:  I hate to talk Jay up this much. Actually, what am I saying? I love to talk Jay up this much.


Keith:  But, really, you’re up there with the three best salesmen that I know personally. I consider you, Ryan Delk, and Steli Efti definitely hands down.  [Patrick notes: Agreed.] If the three of you got into a room, either it would cause a singularity, and it would explode, or you would take over the world. It’s one or the other.

Jay:  Interesting. That’s very, very nice of you to say. All I can do is do my best to toil in the efforts of becoming the person that you both seem to think that I am.


Jay:  I appreciate both of your faith in me. I thank you.

Keith:  Jay, thanks very much.


Patrick:  We appreciate you guys being here with us for the long, long, long haul.

Jay:  It wasn’t that bad. It was about an hour and 10 minutes?


Keith:  …Yeah.

Patrick:  I was thinking more like the three years, which it took us to…


Keith:  Four.

Patrick:  Four years?

Keith:  Four years to get up to episode 11.

Patrick:  We ship babies and products faster than we ship podcast episodes, but it’s changing. We actually got up two in a month. Oh God, this is a regular thing to happen.

Keith:  This will be great.

Patrick: Drop either Keith or I an email about this stuff anytime, if you have ideas for what we could cover on the podcast.

Keith:  Ping us on Twitter.

Patrick:  Or you can ping us on Twitter.  Keith is harisenbon79, I’m patio11, and Jay is @JasonWinder.

Keith:  Suddenly, I feel like we’re on NPR. I don’t know why.

Keith:  “Thank you for listening to this edition of ‘This American Life.’ [laughs] This your host, Ira Glass.”


Keith:  Great show, by the way.

Patrick:  Great show, by the way.

Keith:  Thanks very much, guys.

Patrick:  Thanks very much.

Jay:  Thank you. Cheers. Bye‑bye.

Patrick:  Bye‑bye.

Design and Implementation of CSV/Excel Upload for SaaS

I usually write more about marketing/sales than I do about actually making software products, but I have recently been working on the product side a little more intensively for Appointment Reminder.  One of the features we implemented was CSV upload.  This is a very, very common task for virtually every B2B SaaS product, so I thought I’d share how we did it, as I’m pretty happy with how it is working out. Hopefully it will be useful to some of you.

The Problem With Upload Interfaces

Substantially every B2B SaaS product benefits from interoperability with other recordkeeping systems your customers use, including “formal” software (your competitors or products you interoperate with) and “informal” software like e.g. spreadsheets, Trello lists, and email-inboxes-used-as-a-database.

This is particularly true early in your customer’s lifecycle with your company: most data which will be new to your system is not actually new.  It presently exists somewhere in the customer’s organization.  You presumably want to make it as easy as possible for them to put it into your system and make your system the “source of truth” about that data.

Frequently, savvy SaaS entrepreneurs do this with “concierge onboarding” — basically, using high-touch human handholding to substitute for features which do arbitrary data source to your DB schema importing.  Why?  Partially because the human touch earns a lot of customer loyalty.  Partially because you can offer concierge onboarding as soon as you have one smart person who has an inbox and free time, without necessarily having to build a whole lot of software support for them.

Why I Punted On CSV Import for 4 Years

My launch list of features for Appointment Reminder included CSV import for client data (names/phone numbers/emails) and for appointment data (client data plus date/times of appointments).  Unfortunately, I assessed this feature as probably costing $100,000 in engineering time to implement well, so I punted and implemented a quick “concierge upload feature.”

Concierge Onboarding Upload

This was backed by me literally SCPing the files to the server, then opening the Rails console, and typing commands to parse out the file format in real time.  It would typically look something like:

lines = File.readlines("/home/patrick/new-upload.csv")

u = User.find_by_email ""

a = u.account

records = {|line| line = line.split; record = {}; record[:name] = line[3]; record[:email] = line[7]; record[:home_phone] = record[:mobile_phone] = line[12]; record}; records.size

records.last #Check to make sure that command actually worked.

clients = {|record| c =; = record[:name]; c.home_phone = "blah blah blah"; c}; clients.size

clients = clients[1..(clients.size - 1)] #Skip the header line {|c|}; "Clients saved!"

errors = {|c| c.errors.present?}; errors.size

#While there are still records with errors

c = errors.pop

puts c.inspect is "bob@gmail", needs a .com += ".com"


c = errors.pop

#Blah blah blah.

For a well-behaved CSV file, this took about 5 to 15 minutes of work. For clients who had very unclean CSV files, I often ended up doing an hour of data entry into IRB. That certainly makes sense for clients with predicted LTVs of $5,000+, but ideally I wouldn’t be doing this sort of work when I could be doing other stuff to drive the business forward. Additionally, the latency in sending me an email and actually having one’s account ready was 24~48 hours in the best of times, and that often caused clients to seek alternatives.

So why didn’t I just have a generic CSV importer ready? Because it is hellaciously difficult to do CSV import well in the general case.

Why is this?

  • Column-to-column mapping: Clients’ existing understanding of their data very rarely matches with your understanding of how the same data is organized, so you have to map their columns to your columns. This is often not a one-to-one mapping. For example, Appointment Reminder gives each client a single freeform name field, but many customers have systems which differentiate between first and family names (presumably because they think those things exist), so you have to have a way to stitch together those columns.
  • Pervasively unclean data: Informal software often includes data which is not exactly machine readable. Email addresses like bob@aol. Phone numbers like [(555) 555-5555 or -5556 (his mother)]. Names like [” Catherine] which make sense if you’re a human seeing it under [Smith James] but make no sense to a CSV file reader (and, incidentally, will frequently choke it).
  • File formats: You would think the CSV file format is fairly well-standardized. Hah. Hah. Hah. cries

As a result, the typical web upload workflow is very inadequate for CSV file upload. You’d like to just give them an upload control, grab the file, pass it to a background process, then update the UI with the result, but often the result is going to be “Lines 37, 45, and 392 had problems. Also, although you wouldn’t have expected it, we left off all the email addresses because you picked the wrong column. Whoopsie! Edit the file then re-upload.”

This is enormously frustrating for the user.

Enter SheetJS and Handsontable

I can’t remember how I stumbled upon SheetJS, but as soon as I saw their tech demo, I knew AR was finally going to get file uploads.

SheetJS is an OSS project which parses a variety of common spreadsheet formats, including (through libraries) Excel, OpenDoc, and CSV. Because it is Javascript, you can actually do this directly in the browser, which allows me to completely eliminate the “upload” stage of the “Upload your CSV/etc, we parse it, then we display feedback” workflow.

I can’t express how magical this is in mere words. You have to see it in action. Either use that tech demo or watch the following ~50 second video.

I’ve described this to my friends as “It’s like embedding Google Sheets into your application, for less than a day of work.”

Carefully Considered Glue Code

I had “minimal” import capabilities available in about 3 hours of work with SheetJS, but getting a decent editing workflow with Handsontable (the grid component which provides a lot of the “magic”) took a solid three days of work.


The above example shows a well-behaved Excel file. We heuristically guess what columns in the Excel file map to which columns in our data model. Files which are a) parsed and mapped 100% successfully and b) contain no errors at all… are not the most common case with CSV uploads.

I had to build a way for users to both a) quickly understand that the column mapping was not correct (ideally, without having them have to understand the phrase “heuristics used to parse your document”, since most are office managers) and b) correct it, without requiring a heck of a lot of explanation.

UX-wise, I figured that, as long as we were using the typical right-click context menu that people would be familiar with from Excel, we’d extend that with the ability to mark columns appropriately. Additionally, we’d add a bit of external-to-the-grid feedback to the user to make it obvious what their file was missing.

Then there’s the question of “What do we do about errors?”

I figured that, for AR’s particular use case, errors in a given line shouldn’t block processing of the other lines, since customer records typically don’t “bleed” into each other. Accordingly, we’d save all records which had no errors (similar to my IRB session above), then ask the user to bulk update records with errors and try again.

This is handy, since customers often have very consistent forms of errors in their documents, and the remedy for them (e.g. deleting an entire column of bad data) is often fairly easy to do in a full-featured spreadsheet interface. Putting that in the browser rather than back in Excel makes it minimally difficult for them to actually succeed in doing this.

Take a look at this 65 second video for a user who uploads 98 users successfully while also having two records with errors. (Don’t worry about violating anyone’s privacy: all of the data is faked using, a really handy service for cranking out CSVs/Excel files/etc which exercise various features in upload features.)

I rush through the process pretty quickly for the purpose of the demonstration, but in real life, it is close to this easy, particularly for a user who has done this before (like, e.g., my support reps or myself — see below).

What was tough about the glue code? Mostly, that it involves a lot of jQuery callback hell. Javascript development is, in general, not exactly my strong suit. 80%+ of development time for this feature was making sure that right clicking on the mobile column to mark it as mobile actually worked as expected. You won’t believe how many reloads I did during this process.

I give an A+ to Handsontable for documentation quality and a well-designed JS API. This project would have been enormously frustrating without that. SheetJS is a little newer of a project with a substantially broader brief, so it involved a little more source code spelunking to get working (particularly when integrating new file formats into the provided dropsheet.js magic which imports the dropped data into Handsontable), but I’d rate it as production-quality. Both sets of devs are quite responsive and substantially every B2B SaaS product should adopt them (hopefully adding a bit more polish on the UX than I did).

What Does The Backend Look Like?

Customers routinely upload thousands of records at once (which, n.b., neither of these OSS projects have any problem with). Given that my Rails app treats each row in isolation rather than using a batch insert statement, mostly to run validations, this means that doing the upload parsing in the request/response cycle is probably not optimal. You never want a request waiting several seconds unless you’re intentionally doing long polling.

I instead immediately stuff the uploaded data into a semi-ephemeral data store (Redis), then acknowledge to the AJAX request “OK, got it. ID number was $FOO.” The client then begins polling an endpoint for status updates about $FOO.

(Worth mentioning: why Redis as opposed to e.g. just persisting the files to disk? One, our Redis database is encrypted and our standard file storage is not, so not putting the files on disk saves us from having to worry about whether they include HIPAA-privileged data at all. Two, while we could theoretically clear out uploads on a regular basis, Redis has the expiry logic already built into it, so the data has built-in ephemerality. Three, it’s easy for my app to assert “We’ll always have a Redis instance available!” but not quite so easy to assert “We’ll always have a local filesystem shared by all processes relevant to servicing a particular user’s account” — if we eventually move to a multi-machine architecture then the file system suddenly becomes a really bad place to be storing uploads. Four, uploaded files are inherently a security risk if a misconfiguration lets someone execute upload.csv as e.g. a PHP file, and I’m decently certain there is no URL which will ever route to an arbitrary key in Redis and cause it to be evaluated as anything other than a string.)

Our queue worker processes then process upload $FOO, updating the database directly for working records and saving errored records as a new job (also in Redis). We then have the client poll result return both instructions to the user and new records to repopulate the table with. While our upload infrastructure at the model level is reasonably well architected with separations of concerns and everything, the bit which synchronizes the jobs and the UI is incredibly tightly coupled between the UI and the controller layer. That decision will eventually make maintenance of this more painful than it would be if they were decoupled. I shipped it anyhow, because shipping beats not shipping.

To give you a rough idea of complexity:

upload_processor.rb contains the logic orchestrating jobs, persisting to/from Redis, and turning JSON blobs which were POSTed to the server into client records. It is 335 lines long, and required approximately 20 lines of additions to our Client class to support. Unit tests run another 500 or so lines.

uploads_controller.rb turns AJAX requests into upload processor method calls. It is 135 lines, of which 35 are the incredibly coupled method for answering poll requests. I’ll avoid showing a screenshot for fear of being blocked as obscenity in the offices of good engineering teams everywhere.

The Javascript glue code is 450 lines long. No unit tests because, frankly, I have no clue how one would test this in an automated fashion. I’d rate it as C+ in terms of code quality — jQuery callback hell, what can I say.

Rolling Out To Customers

I don’t like exposing new features directly to customers, particularly features which I suspect are probably fiddly. For example, while I’ve tested this feature with documents in a variety of encodings and file formats, I have no clue what will happen if someone uses an outdated version of MS Excel on a Windows 98 machine to upload a file written in a Hebrew code page, and I’m honestly a little scared of finding out.

Accordingly, we put this behind a feature flag. Feature flags are structurally similar to A/B tests:

#In a view.  @account is, by convention, the currently logged in account.
#Account#allows?("feature") is our feature flag method.

<% if @account.allows? "uploads" %>
  Click here to <%= link_to "upload", {...} %> your client data.
<% end %>

Naturally, we also control access at the controller level (to prevent anyone from playing guess-the-URL), but this demonstrates the basic idea. We can assign users access to this feature individually or in groups, without having to roll it out to the entire userbase.

At present, client data uploads are available in production for our internal users only. Our administrator accounts can upload data into any account, but users can’t access the corresponding upload feature for their own accounts unless I hand-grant their account that permission.

This forces clients to continue emailing us their CSV files to get them uploaded, which lets me have the catastrophic, terrible UX, blow-up-straight-in-my-face errors that still exist in this feature happen to a patient and incredibly invested product owner (me) rather than an impatient user on their first day. For example, it wasn’t obvious to me, but if JSON interpreted someone’s phone number as an integer (5555555555) rather than a string (555 555-5555), our upload job would die with an uncaught exception and the polling method would continue polling forever. I fixed that and the user never even knows it happened.

This also lets us verify that the parsing/heuristics/etc work for someone’s particular “informal software” used at their business. Typically, they have one or a handful of Excel files, often maintained on a single version of Excel on a small set of machines. We can handle the first upload ourselves, verify that it works as expected, and then extend them the ability to do uploads. It is unlikely that they’ll add row-level data which comprehensively borks the upload feature assuming it works on their existing files at least once.

What’s Next In Our App

Now that we have the ability to do this for client data uploads, which are (by far) the easier of the two upload types for us, we’re going to deal with appointment data uploads next. These are a) less forgiving of error than client data, b) conceptually harder to deal with (parsing date/times… ick), and c) vastly more numerous than client data, since client data is typically essentially append-only with minimal editing after upload but appointment data changes on a multiple-times-a-day basis.

Luckily, we’ll be able to reuse a bit of the infrastructure which we built and also will, hopefully, have shaken out a lot of the UX/error handling/monitoring/etc challenges prior to playing the upload game on hard mode.

Presently, we have a single set of heuristics/parsers/etc which are used for all clients. Eventually, I’d like this to be plug-and-play on a per-customer basis, so that we could write ~50 lines of Ruby if required to slurp in a godawful file format required to support a particular enterprise client. c.f. the Strategy pattern in the GoF book, except less painful, because metaprogramming makes this much less painful than it would otherwise be.

A Brief Meditation on OSS

I estimated this feature as costing $100k in engineering time if I were scratch building it. We got it done in +/- 3.5 days of work, which is easily a 90%+ savings, as a result of SheetJS and Handsontable being available. I simply didn’t feel right getting that amount of value for free from two projects which are run by very small teams, so I approached both and convinced them to sell me an enterprise license to their project. It is equivalent to the usual OSS license, except it comes with an invoice. (I don’t think it would be appropriate to name numbers, as that might constrain their ability to price enterprise licenses going forward. Let’s say that my initial outreach emails — titled “Can I pay you to work on $PROJECT?” — probably sounded like a less-wealthy-than-usual Nigerian prince who happened to live in Tokyo and have a really odd interest in CSV files.)

If you have an OSS project which is as useful for for-profit businesses as these two projects, I would strongly, strongly advise taking down any mention of “donations” and offer commercial licensing for the project. This doesn’t have to change anything about your project. (What is the difference between a commercial license that is completely discretionary and a donation? I can donate money, and like most middle class people, my actual behavior with regards to donations is “occasionally donates tens of dollars to poor people and other deserving causes.” My company is literally not allowed by the tax code to donate money, but it can buy any software it feels like, it does not require “You must be poor” to write a check to you, and it assumes that software costs hundreds/thousands of dollars. Ask for license revenue, not for donations.)

If you’re willing to let commercial viability influence your choice of licenses, the dual licensing model also works pretty well, which my buddies at Binpress explain in more detail here. (Disclaimer: I’m a small investor in Binpress.) For example, Appointment Reminder would be totally unwilling to put GPLed code anywhere in our codebase (viral infection of the rest of the code is a non-starter for me), but if you (the copyright holder) said “We’ll let you use our code on a basis equivalent to an MIT license, if you pay us $X,000″, then (assuming the code solved a $X,000 problem for me) I’d write a check immediately.

More broadly, I think that SaaS businesses and other heavy consumers of OSS owe it to the community to provide the funding for projects which represent significant advances, as we are — frankly — much better than the typical OSS dev at actually monetizing software. I’m less worried about the likes of Ubuntu or Chrome, which have massive corporate backing behind them, and even much smaller projects like Rails do pretty well with a few larger sponsors (Basecamp, NewRelic, Heroku, etc) which full-time employ the largest contributors. I think it is right and proper for for-profit businesses to assist the labors-of-love OSS projects at the lower end of the scale though in going full-time on those projects if that meets their goals. So, where possible, I try to pay professional wages for professional work. There exist a variety of ways to contribute to OSS projects, but nobody’s landlord accepts pull requests as currency, so I prefer contributing with money.

Try it sometime — it’s fun and easy. I wrote two emails explaining that I wanted to buy a commercial license and that my only requirement from them was an invoice which said “commercial license for $SOFTWARE” and a figure on it. After collecting the invoices, I had my bank send checks/wire transfers as appropriate. Payments between parties in the global wealthy class (i.e. most software companies and developers) is a solved problem — don’t let whole minutes of hassle scare you away from trying it.

Kalzumeus Podcast Episode 10: Putting the “Family” in Family Business

Keith and I are back with the 10th episode of the podcast.  This time we’re talking about our wives and kids, how much they mean to us (lots!), and how we try to fit being good husbands/fathers around our mutual desire to keep growing the businesses.

[Patrick notes: The transcript below has my commentary inserted like this, as usual.]

What you’ll learn in this podcast:

  • What Keith has been up to with Summit Evergreen and what Patrick has been up to with Appointment Reminder.
  • How having children changed how we run our businesses.
  • How delegating tasks is key to making sure we can spend appropriate amounts of time/brainsweat on being good husbands and fathers, as opposed to optimizing Nginx config files.
  • How Japan’s poor systematic answers to the question of work/life balance decreases the birth rate here.  (Who said this podcast wasn’t educational?)

Podcast: Putting the “Family” in Family Business

MP3 Download (~53 minutes, ~50 MB) : Right-click here and click Save As.

Podcast format: either subscribe to in your podcast reader of choice or you can search for Kalzumeus Podcast in the iTunes Store.


Transcript: Putting the “Family” in Family Business

Patrick McKenzie:  Hi, everybody. Welcome to ‑‑ what is this? ‑‑ the 10th episode of the Kalzumeus Podcast. I’m Patrick McKenzie, better known as patio11 on the Internet. I’m here with my buddy, Keith.

Keith Perhac:  Hi, this is Keith. We are on the 10th episode, three and a half years in the making. Probably the slowest podcast ever. I know every time we say we’re going to make these a little bit faster and do this a little more regularly. Hopefully, in this new year, 2015, we’ll actually get that done. Here’s knocking on wood.

Patrick:  Knocking on wood. I think we ship products and children about as quickly as we ship podcasts.

Keith:  [laughs]

Patrick:  In fact, I think that’s almost literally true.


Patrick:  This segues nicely the topic for today. We’re going to be talking about what it’s like to run a business as two guys who are very committed to being family men. Not just to grinding away and burning the midnight oil and the work stuff, as we might have done in our younger and stupider years.

Keith:  [laughs] I don’t know. I still do that on occasion, but having a family has definitely changed it.

Patrick:  Yeah, so we are going to talk a little bit about family stuff in a few minutes, but we want to steal a [inaudible 01:06] from Rob Walling and Mike Taber at the “Startups for the Rest of Us” podcast, which is one of my personal favorites. They start off every episode with just a little update on what’s new and exciting in their businesses. I thought, “Hey that’s kind of interesting to pattern after.” We’ll try it and see if it looks it. Keith, we haven’t heard much about Summit Evergreen recently. Why don’t you start us off with that?

How’s Summit Evergreen Going?

Keith:  Summit Evergreen has been going pretty well. May was our official launch. We’re out of beta now and we have, I don’t remember how many customers we have. We have a fair number of customers doing a lot of sales. I am really happy about that.

Patrick:  For the folks who don’t remember what Summit Evergreen is, because it has probably been two years for them, it’s Summit Evergreen in 30 seconds.

Keith:  Summit Evergreen is a courseware platform. It helps people create and sell online courses on the Internet. Think of it like Udemy or kind of like the courses that Patrick does, like the one on lifecycle emails.

The difference is that compared to Udemy or Skillshare or whatever, it’s completely you-branded. You are not just another guy on Udemy. It’s all about you. It’s on your domain, your URL and it’s all about your product and your branding. That’s what we do and we just actually released our New Year’s campaign, which is our annual campaign.

One of the biggest things that we find issues with is that people do not commit to building courses. Everyone always says, “Oh, I want to build a course. Oh, I want to build a product.” Number one thing that has people fail is they’re not committed to it. There is a big psychological impetus, a big psychological effect when you put your money where your mouth is, when you commit something of yourself to your own success.

We launched the Annual Plan, which we started January 5th of this year, so that was yesterday. It’s essentially you get 17 percent discount, two months off, if you sign up for a year. We hope that not only are people going to enjoy the Annual Plan but they’re also going to use that as stopping creating excuses for themselves. It’s not going to be, “Oh, I need to get this course out someday. I’ll do it when I have time.” It’s, “OK, I’ve put my money where my mouth is. It’s time for me to get this done, and I’m going to launch this year.”

The people who do that, we see they’ve launched courses in five days, in one day, in hours, in weeks. People who are committed, people who are committed, who put that line in the sand, those are the people who succeed and successfully sell their course to customers.

Patrick:  Summit Evergreen has been, for folks who haven’t been following the story, it’s like a natural outgrowth of the consulting work that you and your co‑founder, Rachel, were doing over the last couple of years.

You were working with some of the larger publishers in the Internet space who have these courses online and sell them for, in many cases, large amounts of money, both on a per‑course basis and on an absolute basis.

You’re bringing some of the technology that you custom‑built for these publishers to the scales, where somebody like either the two of us could actually implement it without having to free‑write the courseware in Ruby on Rails like I did.

Keith:  Exactly like you did. A lot of the problems that people have is that when they start their own course, they’re like, “Oh, if I want courseware, I either have to have something crappy that’s running on WordPress or I have to hire a dev and pay him $80,000, $100,000 to build it.”  [Patrick notes: Mine probably was a +/- $40,000 job if you bought it at market rates in Ruby on Rails programmer time.]

We took the happy medium. We took all the knowledge, all the things that we’ve learned, built a system that works for actual product creators instead of people trying to sell software.

Patrick:  Awesome. You’ve just launched annual pricing for it. You’re starting to get a little bit of customer uptake and your early‑adapter customers are getting to the point in the lifecycle where they’re actually on‑boarding their customers, so they’re seeing success with it. What’s the next three‑month plan for Summit?

Keith:  We have a bunch of joint ventures, and I don’t want to call them affiliates but people who have publishing platforms already. Not software but publishing houses. They have lots of content creators. They want to come in and they want to work on Summit Evergreen and get their content creators onto Summit Evergreen as well. That’s one thing I think is very big for the next year.

As far as software and features for our customers go, we’re looking at better integration with lifecycle email service providers, better integration for that customer retention.  If you’ve taken Patrick’s course, you know that your existing customers are the number one way you’re going to grow your business. Your existing customers are generally 70 percent more likely to buy than the new customer.

Focusing on existing customers to build out product orbits, to build out retention strategies and things like that, that’s the way you’re going to grow your business. First quarter, second quarter 2015, that’s really what we’re looking to focus on, is increasing that customer retention and increasing peoples’ abilities to build product orbits.

Patrick:  That’s a great way to demonstrate additional value to your customers too, because many of them don’t have the know‑how of, say, a Brennan Dunn or a Nathan Barry, where those guys have, through a lot of hard work, made a bunch of products which naturally feed into each other.

They’ve got, basically, a self‑supporting ecosystem where they can step people through, “Make your business a little more successful by buying our book. After you’ve got the business a little bit more successful, that opens up new challenges for you, and I have a course which happens to slot directly into these new challenges,” to both keep increasing the value to the customer and then keep increasing the value to the business or content creator over time.

Keith:  Exactly, but one thing I do want to mention is that people look at these “product orbits” that they’re called, like Brennan Dunn, Nathan Barry, Amy Hoy has and they think, “Oh, I can never get 12 products out” or “I can never get three products out.” You only need one or two products, or two or three products, and they’re not hard to make.

If you look at Nathan Barry’s “24‑Hour Product Challenge,” which he did again this year ‑‑ really, really amazing. He and Amy Hoy both did it. Amy Hoy put out, “Just F‑ing Ship,” which she put it out in 24 hours. It’s a saleable product, she made some good sales on it and it doesn’t have to be this amazing course.

There’s a lot of content you can make at that beginner, beginner level. Those kinds of gateway products are really more effective as product orbit than larger products.

Patrick:  That makes sense. You want to hear my update on Appointment Reminder?

Keith:  I was just about to ask. What’s been up with Appointment Reminder?

How’s Appointment Reminder Doing?

Patrick:  I’ve kind of lit a fire under myself for the first time with Appointment Reminder due to my daughter being born.  I’ve been running Appointment Reminder for four years now. It’s been like the redheaded step‑child of my business for those four years.

I wasn’t really passionate about the problem space. I always treated it as an afterthought, even though every year I said, “OK, my goal for this year is to finally do some major work on Appointment Reminder.”

Right around when my daughter was born in October, I started to get kind of serious about it and, with the thought that, “OK, I’m going to execute on this seriously for 12 to 18 months, get it to a happy point and then do a check‑in on whether I want to continue with that business or spin it off to somebody, and sell the business and start doing something that I enjoy a little bit more.”

Since committing seriously to Appointment Reminder, it’s actually been almost fun. I spent two months last year working in a very “new dad,” fits and spurts fashion on doing infrastructure for on‑boarding my first couple of employees into Appointment Reminder. They’re actually consultants, not employees, but finally getting some help on the sales and support front, building the CRM integration that would let the sales rep do her work, yadda, yadda, yadda.

In the process of managing that sales process, I’m actually starting to do a little more of the day‑to‑day grind on it, which is helpful because if I don’t respond to inquiries from people then they don’t buy software, so I’ve been responding to inquiries.

We’ve lined up two opportunities for major integrations with platforms that trades businesses use. I’m working on those this week and hoping to ship them by the end of the month.  [Patrick notes: Looks unlikely at the moment.  The below-described customers backed out of their soft-commits.  Yay, enterprise sales!]

Both of them have a sponsoring customer, where we’ve got, basically, a soft commit. I sent them a one‑page letter of a text that they agreed to where, if we ship this integration by the end of the month, then they commit to buying Appointment Reminder at whatever the price is. The price is somewhere above where the publicly available plans are right now, but not hundreds of thousands of dollars.

Speaking of publicly available plans, I’m finally taking my own advice and charging more. As of February 1st, pricing is moving from $29, $79, $199 to the entry point is going to be $99 for a modestly higher quota than we’ve done before.

That’s actually scaring me a little bit. I was talking it over with somebody. I wanted the new entry point to be $49, and he said, as Keith has said on occasion, “Have I listened to myself for the last couple years?” The most successful clients that we have are the ones where the businesses are executing at a certain amount of scale. They literally have full‑time people who are just slaving away on the phones everyday. Appointment Reminder can replace that effort for much less than the cost of a full‑time person.

In contrast, we’ve got a lot of customers who have, say, five appointments a day. 5 times 20 workdays in a month is 100 appointments. They get value out of Appointment Reminder and they pay us $30 a month, but they’re not the heart of the business.

Honestly, it’s been brutally difficult to build up a business to a reasonable scale on $30‑a‑month chunks, so I’m going to be refocusing on the types of businesses where it’s worth at least $100 a month to them to have this problem solved, which is largely the trades businesses, medical, et cetera. Ooh, medical.

Keith:  [laughs]

Patrick:  We’ve had medical customers for Appointment Reminder for about two years now, but it’s been kind of on the DL, hush‑hush kind of thing, for HIPAA compliance reasons. We were kind of skirting the edges of HIPAA compliance, so we had promised HIPAA compliance to people on a very limited basis. They required us doing custom legal work with each customer that had gotten on‑board with it.

We weren’t ready to scale then. As of some engineering and process work that I’ve put in in the last two weeks, we’re finally ready to scale HIPAA‑compliant accounts for Appointment Reminder, which is going to require me going out to the 50 people who have medical businesses that are using us but are not on a HIPAA‑compliant account at the moment and getting them to sign a business associate’s agreement, which is the last bit of paperwork that we need for them.

Then, I’ve already flipped a switch on the back‑end to start treating their accounts in a HIPAA‑compliant fashion, which means…I won’t bore you with the details, because it could take the whole podcast, but we have to encrypt their information on a disk, which we’re doing for everybody now, and we have to enforce some procedural safeguards about access to their accounts, like enforcing a password rotation strategy, which we don’t do for normal accounts.

Keith:  I’m curious. Are you going to be upgrading those plans to a higher tier for that HIPAA compliance, or no?

Patrick:  As of February 1st, we’re going to have HIPAA‑compliant accounts available on the pricing and plans page. They’re just going to be straight‑up 2X what it would be for the same account tier at a non‑medical provider. Medicine is a business, right? You charge 2X as much for literally the same thing, but we promise you formally that we’re doing all the right things with regards to security, which we only promise informally if you’re an accounting firm, for example.

For our early adopters, for these first 50 doctors’ offices that are using us, I’m going to get in touch with them this month and say, “Look. Formally, you’re using $500 worth of services a month and you’re paying us $50 a month, but since you got in early and you’ve been with us for the last few years, I’m going to grandfather you in at that $50 a month or whatever it was pricing, contingent on you making sure to get this document signed for me this week. Because I need you to sign this document so that if, knock on wood ‑‑ this never happens ‑‑ but if the Department of Health and Human Services audits us, I need to have these business associate’s agreements in place with all of our medical customers.”

Similarly, if our medical customers get audited, they need a BA with us or they’ll fail the audit automatically. Many of the folks in the medical industry, especially on the lower end of the scale, not the major hospital chains but independent doctor’s offices, have been kind of dragging their heels on compliance with HIPAA, as they drag their heels on a lot of things.

Keith:  I can imagine. I’ll be very interested to see how the $99 entry-level plan works out for you. I think you’re right. It’s going to get rid of a lot of the low‑tier, high‑support customers. You’re only going to have people who are really serious about business. As we’ve stated before on the podcast, $99 to someone who’s serious is really nothing.

Patrick:  It’s literally like less than one‑third of the cost of publishing this episode of the podcast.

Keith:  [laughs]

Patrick:  That’s not even the time costs. We have plus or minus $250 of hard costs associated with publishing a marginal podcast episode.  [Patrick notes:  Transcript, $90.  Audio editor, $150.  Bandwidth, ~$100.  Finally getting a podcast out the door?  Priceless.]

Keith:  You figure, like I just bought a $20 recording software. You just bought a $20 stabilizer. It adds up. You look at some of our customers for Summit Evergreen, the people who are successful, the people who have big businesses who are getting a million dollars of revenue through Summit, they are people who have support staff. They have Zendesk or Freshdesk, they have a CRM, all of which are more expensive than Summit Evergreen, even though our lowest price point is that $99, right?

You think of a CRM like InfusionSoft? It starts at what, $150, $300. EntraPort, I know, is $350 a month. $99 is small potatoes to real businesses.

Patrick:  By the way, if you don’t follow my blog and didn’t read the end of the year update, starting to be public Appointment Reminder numbers. It’s currently at about $6.5K a month in monthly recurring revenue.

Keith:  Very nice.

Patrick:  Plus an undisclosed amount on Enterprise plans. My goal for mid‑2015 is to get that to $15K a month in monthly recurring revenue, which after you subtract out the costs of good sold for the business, so basically my massive Twilio spend and also after you subtract out the kind of on‑target compensation for my consultants, then that leaves me with about plus or minus $10K a month of profit for the business.

I think if it hits the magic $10K a month number, it will be in a good place for either me continuing it or for spinning it out into a variety of possible acquirers. We’ll think a little bit more about that. Why I want to spin it out in 6 months, as opposed to 18 months, is a story for another day. We’re not public about that information yet.

Welcome Lillian!

Keith:  Good. We want to talk about family today.

Patrick:  Yes, we want to talk about family. Can I give the news about the new entry to my family?

Keith:  I’m going to say no, but then I’m going to say yes. Yes. [laughs]

Patrick:  Ruriko, my wife, and I were pleased to welcome Lillian, our daughter, into the family as of middle of October. I know the date, but I don’t want the Internet knowing the date, because for some reason that is treated as secret information. It allows you to open up credit card accounts in the name of a two‑and‑a‑half‑month‑old baby. Who knew? That brings us up to a total of three in the family. Keith and company, you guys are up to four, right?

Keith:  We’re up to four, yeah. I have a four‑year‑old and a two‑year‑old now.

Patrick:  Both of us previously did time in the salt mines at Japanese organizations, so we are no strangers to overwork. Depending on the day, I think both of us kind of occasionally get a little too wrapped up in this. I think that’s fair assessment for me and maybe for Keith as well.

Keith:  [laughs] That’s a good explanation, I guess.

Patrick:  Yep. I’m doing my deep thoughts and where I want my career and life to move and what’s really important to me. Spending 12 hours a day doing integrations for software is probably not it.

Keith:  Let’s talk a little bit about our life before this entrepreneurial stuff. We’ve talked about when we were at the Japanese mega‑corps and how it was soul‑crushing, and we worked, God, 16‑, 18‑hour days, et cetera. When we left that…

You left before me. I kind of carried over that same work/time ethic, and I was working around 16 hours a day, I believe, at that point. 16 to 18, I guess. How about you? When you left your company and got over that initial shock of, “Holy crap. Now, I’m free,” how much were you generally working?

Patrick:  It went all over the place. I had a good six months there, and you might remember this, of just total burn‑out, where I did virtually nothing and just slept for most of every day. Probably a bit of undiagnosed depression going on there too.

Then, after I stabilized in the business and started to spin up on consulting, it went all over the place. The most consistent thing about my business for the 2010 to 2012 timeframe was inconsistency. [joking] Bah-dum-bump.

There were many days where I did absolutely nothing. There were many days where I just answered email for 20 minutes to an hour and then called it a day. Then, there were some days where ‑‑ at the time I was courting Ruriko. On a day where she was working, there was basically nothing else for me to do in Ogaki other than either play League of Legends or work on my business. There were some days where I got up in the morning at 11:00 or so, dragged myself out to a cafe, had some breakfast, and then just coded straight for eight hours and then went home.

Keith:  There were some days when you did the same thing, except instead of coding, it was League of Legends.

Patrick:  Yeah.


Patrick:  Or somebody once did a time graph of my Hacker News comments, and it is impossible to identify core sleep hours for me, which is a little disconcerting. There are some days when I was hacking on work or work‑related things at 4:00 AM in the morning and heck a lot more where I slipped into like 2:00 PM.  Lots of inconsistency.

One of the things that, since getting married and particularly since having a kid, I’m trying to get on a “more human time schedule.” My schedule today was pretty representative. I woke up at 8:00, played around with Lillian until about 9:00, and then left for the cafe at 10:00.

I typically take one hour a day to go to a cafe, have breakfast, listen to podcasts or something, kind of plan out my day. Then, I got into the office at 11:00 and I’m going to be at the office here from 11:00 to 4:00 working on a combination of, A, publishing this podcast and, B, my three goals for the day on what I want to get done for Appointment Reminder.

Then, at 4:00, going home, family stuff for the early evening. Then, I might do maybe an hour or two of work later in the 10 o’clock‑ish timeframe, which is peak hours for me.

Keith:  It’s interesting to me that you mentioned waking up, you said at 8:00 or 9:00, and playing with Lillian and then you went to the cafe, because when I quit my job, I already had my first daughter. There was still within me that I can work whenever kind of timeframe.

I would sleep in. The kid wakes up at 5:00 or 6:00 or whenever she woke up, because she was a baby. My wife, gracious that she is, would take care of her in the morning. I might sleep in if I had been up ’til 4:00 coding. I might wake up early and start coding. But I had that free‑form schedule, because the baby was just a baby lying around at the house.

I would go into office, but it was so free‑form. The number one thing that, now I have to have an actual time schedule. I have an actual time schedule each day. The reason for that is because my girls are in school now. They’re in preschool and they have to be at preschool at a certain time.

I have meetings starting at a certain time, because now I know that I can’t just have a meeting whenever because I have to time it with taking the kids to school, getting them ready in the morning, making sure everyone’s fed, making sure I’m fed. Same at night, kids come home 4:30. They practice their piano, do whatever.

Dinner’s at 5:30, because if dinner’s not at 5:30, they’re not getting in the bath. If they don’t get in the bath, they’re not getting into bed. They’re not reading their stories. They’re not going to bed. Suddenly, it’s 9:00 and they haven’t gone to bed yet.

It’s interesting, once the kids reach a certain age where they have a schedule, your schedule then 100 percent changes because you have to apply what you’re doing to them.

Patrick:  This is applying magic of consulting pipeline management to the day‑to‑day management of a household.

Keith:  To be perfectly honest, it has helped my business so much to have this rigid structure. We’ll talk about this more in a second. Having the structure is just really important, both from a work‑life balance perspective and then also from a productivity perspective.

Patrick:  I think the word “forcing function” might be relevant to that. Either of us could probably have pushed for a rigid, defined structure earlier in life, but having children concentrates the mind and gives you both a rationale for figuring out what the changes you need to make in your business/day‑to‑day productivity/life are to accommodate these sudden new demands on your time.

In a way that, since failure is not an option, given that we’re fathers, fatherhood succeeds where a bunch of New Year’s resolutions in the previous years did not.

Keith:  That one interesting thing. A lot of start‑ups and even Japanese companies, they talk about, “Oh, if you have a family, well, you’re not going to work hard for us. You’re going to be focused on your family.” I find myself not only working harder, but also being more productive because I have that sense of failure.

If it was just me and I lost my job, meh, so what, I’ll go find another job. If I lost my job having to feed a family of four, it’s a lot more stressful. It motivates me to succeed and do better, because I know I have so much more to lose. These people, my daughters depend on me.  [Patrick notes: Keith has a slightly different take on motivation than I do.]

They can’t go out and get a job. They depend on me to feed them, to clothe them, to put them in school and also to be a good father. I have to improve what I’m doing and improve the work that I do in order to be more successful for them. It’s no longer just my enjoyment or my life on the line.

Patrick:  Yeah, totally understood. I think if we get into an extended discourse on manhood or adulthood in the modern age, I definitely did not feel at, say, 29 [Patrick notes: I am 32] that I was a bonafide adult yet, despite running a business that was theoretically making some other folks lots of money.

Then, got married and didn’t quite feel like an adult yet. But now that I have a little infant who is easy to break and will literally die if I do not treat her correctly, I suddenly feel like a certified adult. Yeah, I’ve been kind of like kicking things into gear on that.

Let’s talk a little bit more about that Silicon Valley mindset, though. I orbit Silicon Valley at a certain level of distance, partly through Hacker News participation and partly because I had a number of consulting clients or less formal business connections out there.

I used to go there maybe twice a year or so to catch up with people. A very common thought in the start‑up ecosystem is that you’ve got to make hay while the sun shines. Your 20s are the time to work like an absolute dog, do 70 or 90 hours a week, get an exit. Then, after you have the exit, you can get married and have kids, if that’s your thing.

A lot of the folks in Silicon Valley look a little askance at that being your thing. It’s like, “Oh, he wants to have kids. Nothing wrong with that.

Keith:  [laughs]

Patrick:  Be that as it may, it’s one of those curious youth‑focused myopias that the industry has. There’s many, many jobs, which are objectively speaking more intense on a timescale or less forgiving of juggling multiple obligations than, say, working at a Silicon Valley start‑up or even founding a Silicon Valley start‑up is.

If you’re a partner at a law firm, you can’t just roll into the office at 2:00 PM and say, “Well, sorry everybody. Late night partying,” which most start‑ups will tolerate pretty decently, if you only do it occasionally.

Keith:  It’s interesting, because my father and my grandfather are both entrepreneurs. My grandfather, I think he started his main company at 35. My dad was, I think, 40 or 42 when he started his company. By current Silicon Valley standards, they were ancient. Who’s going to be an entrepreneur at 42? But they built huge, successful companies.

Patrick:  Can I tell you a priceless anecdote on that?

Keith:  I would love that.

Patrick:  Someone who read to meas being about like 23, asked me when I was 30, on a trip to Silicon Valley, “Aren’t you supposed to be a VC now? I mean, your career is pretty much over, right? You’re 30.”

Keith:  [laughs]

Patrick:  It’s like, now that is a forehead‑slapping inducing moment for me because, oh man, you’re so young. You understand nothing yet. I think both of us plan on doing this essentially forever. Probably 98 percent or so of the value that we’re going to create in our careers is in the forward mirror as opposed to the rearview mirror.

Keith:  Definitely.

Patrick:  It’s so crazy. This is one of the reasons that I can never commit to doing the Silicon Valley lifestyle, just because the social construction of that lifestyle seems to be, frankly, bonkers.

Keith:  Not all of it. You can’t generalize because there are some amazing things going on. You and I both went up there and were talking to a lot of people. It felt like college plus two.

Patrick:  College plus two. There’s so many things about that. [Patrick notes: I have a theory that several Silicon Valley ecosystems pretty much explicitly pitch working at a startup or founding one as a surrogate class that you do to earn the respect of your surrogate teachers.  This is very effective for a certain psychograph of high-achieving Stanford grads who have spent their entire lives doing anything required to please teacher and get an A on the exam.]  We might do that in a different episode. Let’s talk more about our beautiful daughters because they’re much more fun.

Keith:  [laughs] I actually want to talk about something interesting that we briefly mentioned on, which was how we have these time constraints and it’s forced focus. I remember a little while ago there was a talk about comedy on Twitter and how comedy on Twitter and how discourse on Twitter was changing the way that comedy worked and not improving, but creating a whole different genre of comedy because it was limited to those 140 characters.

It was talking about how limitations to art forms create better art forms in certain situations. It’s the whole limitations create creativity. I really think it’s the same with work. When you have forever to do something and you have no constraints and you have no set budget, let’s say. You have no set budget either for money or time or what needs to get done, things take a long time.

You decide, “Oh, I’m just going to do it myself.” You don’t have that focus because you don’t have any external constraints. We were talking about, especially when the kids go to school and, even now with you, you come home at a certain time. I have a hard stop. 5:30, lights go off in my office. I’m at home.

I can work after that. After the kids go to bed, I can go back to work, but at 5:30, I have to stop no matter what. Now, I have limited time and I have these hard stops that I must obey. A lot of people think that’s a bad thing and it’s not. It’s a good thing because this is the basis of business.

Delegating Responsibilities To Save Our Sanity

Keith: Because whenever you’re running a business, whenever you’re doing a business, there is so much more to do than you have time or the ability to do. You have to learn to delegate. You have to learn to prioritize. Having these external forces, these external walls making you, these limitations, it forces you to be smarter with your time.

It’s no longer viable for me to spend 20 hours deciding if we’re going to use Apache or nginx and tweaking the config files and everything, because there’s 100 other things that I need to be doing with my business besides setting up this one server. What do I do? I delegate it to someone. Because it takes five minutes of my time. It might take them 20 hours. That’s fine. That’s what I pay them for.

Patrick:  Do you find that you do more delegation now that you’re a little more constrained on the amount of time you can put into the business?

Keith:  Delegation has always been my hard point. I always want to do things myself because I love solving the problems, but it’s gotten to the point where I have to delegate. To answer your question, yes. I delegate much, much more.

I had done that talk at MakeLeaps up in Tokyo and you had re‑tweeted that. We were talking about meeting notes. The biggest thing I’ve done is delegating meeting notes, so that I record the calls. They go to my note‑taker, and they pull out the to‑do items and everything. I’m not sitting there rewriting all my to‑dos and putting them in Asana or JIRA, making all my calendar invites and everything like that.

Anything that is not moving the business forward, I think, needs to get delegated to someone on my team.

Patrick:  This is historically one of the big differences between your business and my business, because while we do roughly similar things ‑‑ we were both consultants for a while, we both have product businesses now with different levels of consulting still remaining in the business ‑‑ I’d always been kind of like a solo shop until recently.

You have had, for the last couple of years, a team of contractors who assisted you with the provision of consulting services and now help you out with that day‑to‑day business administration. It’s been a major thing for me that I was a solo bootstrapper, accent on the “solo,” for the first eight years or so of running my business. That changed recently.

I think it probably wouldn’t have changed but for the birth of my daughter being a forcing function. It must have been the TMBA guys, “Tropical MBA,” another great podcast, who said that there’s three levers that you get to adjust productivity in a business. You have your time, your level of savviness and money that you can throw at problems.

If you want to increase the number of sales that your business is doing, you either have to throw your time at making the sales, throw savvy at producing systems or being better at sales than the average bear, or throw money at the problem, either lead acquisition or in paying someone to do your sales work for you.

Like we said a little bit ago about constraints driving the business, back when I was salaryman, I had no time and I had no money. 100 percent of why Bingo Card Creator worked was savvy, savvy and more savvy on the media marketing front. That probably actually helped develop my savvy muscle, because I was exercising it so much.

Once I went on to doing my own stuff full‑time, I didn’t have as hard a constraint on time any more. While I probably increased on absolute levels of savviness, the percentage of my maximum capability of savviness that I was using on a day‑to‑day business and the percent I was growing in terms of savvy probably decreased, because there were a lot of problems where I could have solved them with additional thought but I just threw hours at it because I suddenly had a lot of hours to throw at things.

Keith:  Right. It’s interesting, because not only do you have a lot of hours to throw at things but menial tasks are easy to do, right?

Patrick:  Right, and they certainly feel like you’re winning when you’re doing them, which is the most toxic thing ever.

Keith:  I just took all my addresses from Evernote and put them into Excel so I could print out Christmas cards. Like, “I was very productive today,” except for the fact that that took me eight hours. That’s a full billable day that went away. Or I could have hired a VA to do it for $10, $15 an hour. What’s the bigger win there?

It feels like I was so productive, but when you look at the benefits to the company or just the benefits to my life, that’s eight hours I’m never going to get back. I could have done so much in those eight hours. But it felt good while I was doing it.

Patrick:  I think some of the work like that has that seductive quality of feeling like work, even though it doesn’t meaningfully drive the business forward. I’ve been doing a lot of architecture/underpinnings work to get Appointment Reminder in a better situation to move more accounts in the next six months.

Yesterday, for example, I spun up a new server to decouple the marketing site from the infrastructure for the main application.  I’m glad it happened. It has needed to happen for a few years now, but rationally speaking I should probably have found a sysadmin available for this and just thrown a couple of hundred bucks at them and had them do it, rather than losing that day or two to make a 90 percent solution.

I’m trying to get better at that. I’m finally working with a salesperson to do some of the sales activity. I have a, knock on wood, repeatable sales process in place for her, so that I copy and paste it out what I’ve said and done before that actually results in us closing deals. Then, we’ll have her turning the crank at it everyday, rather than me turning the crank on it.

Identifying As A “Solo” Entrepreneur

Keith:  Exactly. I think it’s interesting, that you had that pride of being a solo entrepreneur, a solo founder, a solo product guy with your software. It’s interesting because, when I started doing the consulting the products, I already had one child, right? I never had that time freedom. I think it gets really interesting that, now that Lillian has been born and you have those time constraints now, you’re like, “OK, now I can’t do this solo thing anymore. Because if I do the solo thing, I’m going to be spending all my doing this. I’m never going to see my kid.”

Patrick:  Yeah. There’s ways I could reconfigure the business to make the solo thing still work with both achieving business objectives and not crunching my quality of life at the same time. But it’s like, “Well, you get a certain number of decisions that you’re allowed to make, to move to levers.”

At the end of the day, I like this identity of myself as solo entrepreneur but I’m not willing to compromise on my family, because that’s a terminal value for me. That’s not on the table. Then, it’s like, “OK, do I compromise more on what my desired identity is or do I compromise more on what the desired trajectory for the business is?” I was like, “Well, the solo entrepreneur chapter was a great chapter in my life. But starting a new chapter, I feel like I’m kind of ready for that.”

I might cry a tear or two about my internal conception of what my business is like, but that’s the only change that’s going to happen to it. On the positive side of the ledger, it’s going to grow much faster and help other people out for supporting their families too, give my customers a better experience and let me do more fun work on a day‑to‑day basis. Hmm, tough decision here.

Keith:  Exactly, exactly. For me, that self‑identity I think is important but you also think, “OK, growing the business isn’t just for growing the business,” although with personality types like us, it’s kind of like a game, right? You want to grow the business because we like seeing the numbers go up.

Patrick:  It is totally WoW gold for me.  [Patrick notes: I care quite a bit about my metrics for each year, almost entirely for ego reasons.  Crushing my last year’s numbers makes me feel like I’m winning the game.  In terms of actual money?  Not nearly so interesting.]

Keith:  It is, it really is. But at the end of the day, growing the business and making the business perform better gives you two major benefits for your family. One is, the more automated your business is, the more time you get to spend with your family. Two is, the more successful your business is, the more money you have in order to have that financial freedom with your family.

I went to the States for three weeks a couple of months ago. I was talking with one of my dad’s friends. He’s retired now. He was talking about when he was in his 30s, he had built up a number of brick and mortar stores. He had managers and people were managing them. He was sitting at the pool with his co‑founder on a Wednesday afternoon, just sipping margaritas.

He was like, “Isn’t this amazing that we have this huge multimillion dollar business with 10 stores throughout the area? We’re sitting here on a Wednesday afternoon, sipping margaritas at the pool.”

Patrick:  Man, that is the life. Aside from the margarita. I’d be doing iced cocoa.

Keith:  [laughs] I’d get bored with it. I would get bored with it, but I’d like the freedom to do that.

Patrick:  Definitely.

Keith:  For me, the business automation, the freedom gives me two things. One, it gives me the freedom to spend the time I want with my family. It gives me the freedom to focus on the parts of the business that I want to focus on. I don’t have to worry about putting out the payroll checks and making sure that all the checks get out there, and pressing submit on all the forms, because someone’s doing that.

I can go in and say, “OK, we need to re‑look at our automation funnels.” Or, “Hey, this marketing page is getting kind of stale. Let’s re‑do it.” Or, “Hey, why don’t we call Jeff and set up this awesome new joint venture?” It gives me the freedom to be able to do that when you have a successful business. It gives you freedom when you have an automated business. It gives you freedom not only in your business life, but also in your personal life.

Patrick:  Yeah. One of the things…I don’t know, I have a weird relationship with money. I think that’s true of many people. We both got paid at the Japanese scale when we were working in Japanese organizations, which for somebody right around our age, it’s like plus or minus $30,000 or $40,000 a year. It’s not exactly a secret ‑‑ both of our businesses are doing a little bit better than that these days.  [Patrick notes:  n.b. Keith’s is a whole number multiple of my business and that whole number is not 1.]

Keith:  [laughs] My wife’s very happy, because she can now buy butter. That’s her major thing about me starting my business, is now we can buy butter instead of margarine.

Patrick:  The biggest concrete change it’s made to my family’s quality of life is, for semi‑related to Lillian being born reasons, we decided to move from Ogaki to Tokyo. The rents here are…

Keith:  Astronomical.

Patrick:  Pretty outstanding.

Keith:  [laughs]

Patrick:  My rent is literally more than my last salary was in Japan. Obviously, this would not be a viable option, at least not living in the apartment I currently live in, had we stayed in that trajectory, but it is…I won’t lie, when I see the rent get debited from my bank account every month, there’s still a little bit of, “Eek, that’s a whole lot of money,” But the business allows my family the opportunity to live in a place that my wife really loves and I’m really starting to like, and that I think will be a bit better for our daughter.

Keith:  Actually, it’s interesting that you mentioned that, because that’s something that we talk about constantly is, because of the business and the way I do my business, we have absolute freedom to be wherever we want. The problem is, when the kids…the kids are still in preschool. We don’t have this problem yet, but when they go into elementary and junior high, we’re suddenly stuck at a place.

We can’t go off to the US for three months because we want to, so it’s really making us make the decision. OK, what do we want to do? Do we want to raise them in Ogaki, which is not a bad place but it’s not cosmopolitan? There’s old ways of thinking. Do we want to live in Tokyo? Do we want to live in Osaka? Do we want to go to the States? My wife wants to go to southern Italy. I’m not learning Italian. [laughs]

Patrick:  [laughs]

Keith:  But it brings up a lot of lot of questions about what do you want to do for the family and what do you want to do with your life. If If I was a salaryman, there would be no way to make this decision. It wouldn’t be a decision. I could not make this decision. This is where my job is. This is where I have to live.

Patrick:  Or the decision might be made for you without consulting anyone.

Keith:  Oh god, yeah. The “Hey, now you’re working in Tottori for no reason.”

Patrick:  Japanese companies, for those of you that haven’t worked for them, have this wonderful cultural thing called tanshin funin (単身赴任) which means that the bosses can come up to on Monday morning and say, “Hey, guess what? From Tuesday, you’re going to be working out of our New York office,” or a place much less desirable to live than New York. “BTW, it’s just you. Your family won’t be going with you. We’ll start you off there for three years, but we could call you back at any time, or move you anywhere else at any time.”

Keith:  Yeah, and that’s not only abroad either, because abroad, maybe you’d move your family over there, although most people don’t. They have them inside Japan as well. You’re a three hour bullet train ride away from your family, everyday except Saturday and Sunday.

Patrick:  I know an engineer who was close to us in age range and life circumstances. He just got told that, “Oh, I hope you’ve had a great time living in Nagoya, where you’ve lived your entire life. We will now name one of the most rural prefectures of Japan where we have a factory. You are going to be supervising it, starting tomorrow. Have fun.” Japanese companies, oh boy.

Keith:  [laughs]

Patrick:  That’s another discussion.

Keith:  But it fits in with our discussion of family.

My wife actually works with me now. She does our sales and marketing on the Japanese side. She’s really become an amazing marketer. She has her teaching degree, and she was going to be a teacher. One of the things that teachers have in Japan is, the first three years, you don’t get to choose where you go. In fact, you don’t get to choose most of the time, but the first three years especially, they send you to some god‑forsaken place for no reason whatsoever.

Gifu, where we live, is a fairly large prefecture compared to other prefectures. Other prefectures, it maybe takes an hour to drive from one end to the other. Ours is about…what four hours, three hours? It’s a huge prefecture.

We’re in the absolute south, and they just love to send all the new teachers from here to the north. She’d live five hours away by car. At that point, it’s like, “I have a family. I have a husband, I have a kid. Am I going to live five hours away for three years, just to become a teacher? Then, maybe I’ll get to come back?” It really puts some big questions, and she decided to not become a teacher because of that.

She had the highest ranks in her school. She was number one ranked for all her teaching certificates and everything. She didn’t become a teacher because they would have forced her to move five hours away, and I couldn’t go.

Patrick:  I think a lot of people will make the other decision too, which is given the needs of their career they will sacrifice the dreams of having a family on that altar ‑‑ one of the reasons why the Japanese population growth rate is hitting the lowest of low levels.

Keith:  It’s interesting. Everyone always talks about, “Why aren’t people having kids in Japan?” There are two very big reasons. First of all, we’re worked like dogs because if you have no time and you’re too tired when you get home, there’s no way you’re going to have kids. The second one is, there’s no societal way to raise kids here. All of the preschools are completely full. I had to wait outside for two days to get my kid into preschool.

There’s no babysitters. There’s no after‑school services or anything for little kids. It’s getting slightly better, but not good enough. The reason is, Japan didn’t have nuclear families until recently. It used to be you lived with grandma and grandpa, and they helped take care of the kids. Now, no one wants to do that. Even the grandmas and grandpas, they’re like, “I don’t want to live with my kids. I want to have my own life.”

But society is not catching up to that. This idea that we have in the US of play dates, where you send your kids over to someone else’s house and they all play together ‑‑ then, one day they all come and play at your house et cetera, and the other parents get to take a day off. They don’t have that here.

Patrick:  Or the institution of babysitting. If you explain babysitting to an average, middle class Japanese person, you get looks of unrestrained terror on their face.

Keith:  In fact, I’ve actually been told, “Why would you trust your kid to another person? How could you?” Especially a 16‑year‑old or an 18‑year‑old. “I don’t know, that’s how I was raised. I [laughs] never had any problem, I’m still alive.”

Patrick:  This is one of those things where I think sometimes cultural differences are oversold, but this is definitely an American thing, where it’s like, “Yeah, sure. I’d like to entrust my four‑month‑old infant and my house and all of my possessions to a 12‑year‑old girl from the neighborhood. My only reason for trusting her is that she is from the same neighborhood, and that one person said two sentences of recommendation on her behalf.” It sounds totally reasonable.

Keith:  [laughs] When you put it like that, I don’t know how my parents ever decided to do that. One of my babysitters was actually named Candy, believe it or not, when I was younger. I don’t think she lasted long. [laughs]

Patrick:  Anyhow…

Keith:  [laughs]

Patrick:  Funny we should mention that, but given that it takes a village to raise a child, burden tends to fall in family in Japan, rather than falling on the rest of the village. One of the things that I’m hoping to getout of growing the business is we’re hoping to be able to support Ruriko’s mother moving to Tokyo. It’s been something on her to‑do list for a while, but not something that she can afford on a pensioner’s income.

If we were able to help underwrite that, that would both achieve a goal for her and make life a bit easier for us in having close family close by, helping to raise Lillian.

Keith:  I think that’s amazing. That’s the first I’d actually heard of that. I think that’s amazing. I think it’s good to have those business goals that are not business goals, right?

Patrick:  Yeah, like there’s a purpose to all this grinding that we do everyday.

Keith:  Exactly, exactly. I have a goal for this year that I’m not going to say out loud, because I don’t want to jinx it. But I was talking with some of my friends. One of my friends, in particular, he says to his accountant, “Give me one number. This is the number that I need every month in order to live the life that I want to live, so I don’t have to worry about money. It takes into account all my general expenses. It gives me a $500 or $1,000 buffer every month that I can do fun stuff with. Give me that number.”

That’s the number that his SaaS has to reach every month. That’s the number that he shoots for. That’s what he focuses all his attention on, is raising that MRR number to that point. It’s the same for me. I have a goal that I want to do this year, hopefully in the summer. In order to do that, I have to have a certain amount of money coming in from the business. That means I have to automate it. I have to make sure that the business is growing in the right direction, because even if I make the money and the business goes down, we can’t do it.

It has to be far enough that we have that safety net and that number, and that’s our goal is to be able to reach that and to have this fun thing that I’d like to set up.

Patrick:  I would suggest just as a micro‑tactical thing, put that goal on your dashboard. I had my revenue goal put for Appointment Reminder on my dashboard at the bottom of the screen, which is the wrong place for that.

Keith:  [laughs]

Patrick:  Because as the business got more successful, the goal got pushed down such that I would only ever see it if I Control+F’d and searched for it. Stick it to the top of the screen instead, so that everyday or every Monday, you check in and say, “OK, where are we with regards to plan?” Give yourself a little bit of a kick in the pants to do the work this week, to get you a fraction closer to it.

Keith:  Actually, I think we’re going to need to start winding down this episode but I did want to mention one thing off of the having that number in front of you. In another life, I did the inter‑office dashboards. It’s essentially giant TVs with the KPIs, the numbers that matter for the business or matter for that department.

There’s this great psychological effect that, when you have that number in front of you constantly, you’re subconsciously always thinking about that number. You’re always thinking, “OK, how can we increase that number? How can we reduce that number, if it needs to be reduced? What can we do to move that number?” It’s no longer this thing that I’m thinking about once a week in the shower, “Oh, yeah. We have to increase our opt‑in rates,” let’s say, “or decrease our churn rate.”

It’s something that is always in front of you. Having those numbers ‑‑ not a ton of numbers, like maybe five to six that are important to you and show you the core of your business, psychologically, it’s a huge motivator for getting to accomplish those goals.

Patrick:  It totally tracks with my experience. It’s easy, even our really important numbers like yearly revenue, if you don’t have it automatically updated, you might not know where that is. That’s sort of a surprising statement, right? But until getting my bookkeeping systems improved recently ‑‑ which, by the way, a shout to Bench, they’ve been instrumental in that ‑‑ I did not know my yearly revenue until I did taxes every year. I had a rough guesstimate like, “Oh, it’s certainly above 100, uh…”

Keith:  [laughs]

Patrick:  There were a bunch of times over the years where I had laser‑like degrees of precision with regards to my conversion rate, or I could tell you how many customers I had down to like three significant digits. If you asked me how much money the business made last year, it would be like “Um, I don’t know.” Yeah, graph it somewhere and make it automatic, but if you have company events, make that one of these things that at the weekly standard meetings, “And remember, our KPIs are X, Y and Z currently. The goal is this. Do your best on moving them in the right direction over the next period.”

Keith:  It’s very important, like you say. You said, “X, Y and Z.” It’s important not to have a ton. Everyone starts thinking, “Oh, I’ve got to monitor all these numbers.” These numbers are all‑important, but when you have too many numbers, you’re not looking at any one.

Patrick:  Right. You can spend an unlimited amount of time in Google Analytics, on optimizing the conversion rate to email sign‑ups of people who are entering through this particular blog post…but that’s not ultimately where the core growth of the business is going to come from. It’s not where the major changes to your life or your employees’ lives are going to come from.

Keith:  It goes back to those what we were talking about earlier, with the hard stops ‑‑ the limited time, limited focus. Pick three, maybe five at the most. These are the things you need to focus on. Just like in my to‑do’s every day, I know I have a limited amount of time. I pick three goals that must be done and two stretch goals. That’s my to‑do for the day.

Patrick:  Makes sense. All right. Well, I think we’re in a pretty good place for this episode of the podcast. Thanks everybody for your patience. Keith and I are, knock on wood, going to be trying to get these out a little more frequently, although it sounds like it feels some deja vu.

Keith:  I think we’ve said this for the last two years now. Although I have to say, this podcast was only about 40 minutes, 30 or 40 minutes. Very easy to knock out. Hopefully, we can get these out a bit more often.

Patrick:  Yeah, I’m looking forward to it. As always, we’d appreciate your thoughts on the podcast, whether the new format works for you and what you’d like to hear about. Drop either of us an email. My website is at, which…well, you’ve presumably figured that out, if you’re listening to this.

Keith’s is at Summit Evergreen, where you can sign up for some email about his service, if you’re interested in that. Our email addresses are readily accessible.

Keith:  All right. Thanks very much, Patrick. Thanks everyone for listening.

Patrick:  Thanks a bunch, Keith. Thanks everybody for your time, and we’ll see you again in a few weeks.

Keith:  Cheers.