FreshBooks’ Mike McDerment says “building your own competitor” is effective way to solve business problems

Amira Zubairi, writing for BetaKit:

At the latest FinTechTO, Mike McDerment, CEO and co-founder of FreshBooks, discussed the challenges teams face when re-platforming within a software company. He also offered tips on how entrepreneurs can successfully execute a redesign.

McDerment kicked off his presentation by giving an overview of how he co-founded FreshBooks, a cloud-based accounting platform that allows users to send invoices, track time, manage receipts, expenses, and accept credit cards.

McDerment said after raising a $30 million funding round back in July 2014, he began to think about how the company would keep up with technological changes over next decade.

“What we actually decided instead was that we needed to re-platform the company, like the whole product, go build a whole new thing.”

“In the back of my mind, I was like, are we really set up for the next 10 years?” said McDerment. “Since we started the company, all the technology had changed…it’s a very different world than, say, 2013, from a technology standpoint.”

At this point, McDerment said he was thinking of ways to transform or improve FreshBooks so that it’d be “set up to win in five or 10 years.” While he could have gone the route of “keep doing what you’re doing,” McDerment decided to take a different path.

“What we actually decided instead was that we needed to re-platform the company, like the whole product, go build a whole new thing,” said McDerment, adding that this was “a stupid move” for a couple of reasons.

“Reasons why you don’t want to re-platform include competition…may catch up while you’re doing it,” said McDerment. “I promise you, it’s going to take longer than you think…you could go through all the trouble and you don’t necessarily end up with a better product in the end.”

Along with these reasons, McDerment stressed that re-platforming means that companies often run the risk of undermining their customers’ trust, which in turn, makes it harder for engineering teams to take the risk of entirely re-building a product.

Speaking about his own experience, McDerment said when FreshBooks’ team decided to redesign, he had to find a way to do this and “not lose out competitively, [and] get the team to a place where they could take some of these really big risks.”

In the end, FreshBooks created a new company with a new name, URL, and product, and have it compete with FreshBooks’ existing products. McDerment said competing with themselves via a separate company allowed FreshBooks to not only keep their customers’ trust, but also test out a new platform, collect data, and determine whether they had created something better or not.

For entrepreneurs who may be struggling to build their companies, McDerment ended his presentation with a few words of advice.

“Building your own competitor is a novel way to solve a hard business problem,” said McDerment. “I’d just encourage you to believe that there is a way you can do this. It may not be obvious, it may not be logical, but there is a path.”

I’ve always respected Mike and what they are doing at freshbooks, we’ve used them for all our book keeping here for years.

You can watch the full presentation below:


Introducing outgoing webhooks

Today we’re announcing outgoing webhooks – a long awaited feature that will notify your websites and apps whenever data changes occur.

This opens up a new range of possible integrations

Adding outgoing webhooks means you can get notified directly in slack or elsewhere when new records are added, when records are updated or deleted.

To create an outgoing webhook, just click webhooks in the dropdown:

Then edit the form:

Hit Save and when you save a new record with our API, we will send notifications to your webhook instantly.

We’ve got some options for how we send the data, you can have it sent using a standard form post, send as a json string using payload as the containing variable, or just send as a JSON request.

If you are sending to Slack, we automatically detect the slack url and format it accordingly so it shows up nice looking.

All outgoing webhook notifications also include two extra fields, one for event to say what happened (new record, updated record, deleted record) and a url to the record in your dashboard.

You can delete the webhook at anytime from your webhooks management page.

Jason Fried on One Door at a Time

Entrepreneurs are told to go big or go home. Stop obsessing over scale, and perfect the basics instead.


But now, entrepreneurship seems like a sport. And the score depends on scale. How big can you get? How fast can you get big? How much power can you amass in the shortest possible time?

We’ve prided ourselves on staying mostly small, it lets us focus on things that might fall through the cracks other wise.


Build a “Serverless” Live Blog System with Flybase, Twilio and StdLib

Flybase and Twilio work great together, we’ve posted several posts before about using these two services in one place, but what about if you want to go serverless? is excellent for that. In their own words, StdLib is essentially a package manager for APIs that’s built upon new “serverless” architecture, meaning you never have to worry about managing servers or allocating resources for scale.

All you have to do is write a function or two (or three), deploy, and you’re done, and this is perfect for quickly building services with Flybase.

We’ve covered building a Live Blogging tool before, so I wanted to use that tool here and show how to make it work inside StdLib.


To start, you need an account with our three services:

  • Twilio to handle receiving text messages.
  • Flybase to store our data and output it to viewers in real-time.
  • Stdlib to handle the backend processing between Twilio and Flybase.

First install StdLib:

npm install lib.cli -g

Now, create a folder called stdlib and login:

$ mkdir stdlib
$ cd stdlib
$ lib init

Ok, time to create the liveblog service:

$ lib create liveblog
$ cd <username>/liveblog
$ lib function:create sms -n
$ mkdir pages
$ npm install --save async ejs flybase twilio

Where <username> is the username you are logged into StdLib with.

You will now have the following structure:

  • functions/__main__.js
  • functions/sms/__main__.js
  • pages/

Let’s give this structure some code and make it work for us.

Open the file called env.json in the root of the project, it was created automatically for you, and copy the following:

Populate these variables with your Twilio and Flybase information.

Now, open functions/__main__.js and copy the following code:

This will set up our index, which will output your live blog posts.

Next, open functions/sms/__main__.js and copy the following:

This is our webhook to receive text messages. It will take the text message and any photos from Twilio and store it in your Flybase app, it will then send a reply to your phone to tell you the message was received.

Finally, we need to create our pages/index.ejs file:

This template file will be read by our index and used to display any useful information.

Get online

To put this app online, all we have to do is type:

lib up dev

This will upload your app and make it available at the following url:


Where <username> is your StdLib username and <service> is the service you’ve created, in this case that would be liveblog.

Once you’re done developing, you can also use

lib up -r

To publish your app in release (prod) mode. The URLs would then be:


Let’s stick to just dev mode for now.

Once this has been published, you can go to the https://<username><service>@dev/ URL and see your live blog, there won’t be any content right now, so let’s create some using Twilio.

Go to your Twilio account and create a phone number, then in the settings for that number, add your /sms/ URL:


Remember to update <username> with your username and <service> with the name of the service.

And now you are ready to send SMS messages to your live blog and see them on the screen.

Finishing Up

You can see the full code here at the repo, download it, extend it, play with it, do whatever you wish.

This is a pretty basic example of using StdLib, Flybase and Twilio together, but it shows some of what you can do.

You can also just drop the index file into any webpage and have it output your live blog posts, since Flybase works great that way, so it’s really up to you on how you want to use it.

On Deck for This Fall

We’ve been extremely busy getting a few new features ready to roll out and I wanted to mention them here:

1. Config

This is something that was mostly internal until now, but we’re about to push our configuration manager out to all users, this will give you a new API that you can use for setting variables and retrieving them. With a simple API call, you can retrieve settings for your apps based on environment.


FlybaseRef.config_get("prod").then(function(config) {
  var welcomeMessage = config.get("welcomeMessage");
}, function(error) {

This will work on all libraries, as well as via our REST API, and all configuration settings are stored under encryption, giving you a nice secure place to store configuration variables that you don’t want to store in your code.

2. Uploads

In addition to storing data, users that have apps on paid accounts will soon be able to upload files directly to their Flybase apps and download or retrieve them at any time.

This can be used for storing images, js files, css files, html files, text files, you name it. You can even use it for hosting static websites. We’re excited about this one, and have worked hard to make it ready to fit all your needs.

3. GraphQL API

Our GraphQL Api is finally ready for public consumption after making sure all was nice and beautiful so that will be out over the next couple weeks and will give you a whole new way to handle your data.

4. Scheduled Backups to S3

We’re also going to be adding the ability to set scheduled backups of your data yourself to your own S3 buckets.

We’re big on backups, we backup everything all day using our own custom system but since we know you want to watch your data yourself, we’re going to be adding this feature so you can enter your S3 info and schedule when you want backups to happen, or even just push a button and do it yourself.

5. New Dashboard

Yes, it’s that time again, we’ve got a new dashboard ready to go, and are just finishing up a few tweaks. This will integrate nicely with all the features coming the four mentioned above, as well as a few others we’re keeping as a surprise.

At Flybase, we’re always dedicated to providing a good experience, both in terms of what we build, and also in terms of support so if you have any questions at all in regards to what’s above, feel free to reach out to us.

Building the Best Relationships We Can

Alison Groves:

Maslow had it wrong. To get it right, we have to move social needs to the bottom of his pyramid.

-Matthew Lieberman (Professor of Social Cognitive Neuroscience at UCLA and author of the book Social)

Babies would die without their caregivers at birth. Study after study show the pain and ill we go through when we are isolated from others like us. As humans, we are wired to connect to one another.

However, instead of connecting, we seem to be heading the opposite direction. On the streets and in restaurants people are looking at their phones instead of the person right next to them.

Businesses strive to make everything quicker, faster, and automated. Sending automated welcome emails with generic information to everyone who signs up. Introducing artificial intelligence to weed through support inquiries instead of having someone read and respond to your query.

I read this two days ago, and saved it to drafts to share and comment on.

Here at Flybase, we don’t automate support, and we don’t use artificial intelligence for support (we do for other things, just not for support) either. Everyone here does their time answering support questions and responding to emails.

Relationships are something we’ve always strived to build here at Flybase, we help our users with any questions they have, and even jump in and lend assistance on building their apps when they’re stuck.

In fact, a good chunk of our business comes from dev work with clients, as they have an idea for an MVP using Flybase and come to us to build it, or to train their own dev team on utilizing Flybase to the best approach.


AngelList launches Intros for Canada to give startups access to angels

AngelList has launched Intros for Canada to give more startups access to seed-stage funding through the network.

Intros will work like the first AngelList product launched in 2010, where companies could apply to be introduced to a curated list of angels.

“The Canadian market feels like the Valley 15 years ago. It is on the cusp of creating world-beating companies in AI, blockchain, and other technology fields,” said Naval Rakivant, co-founder of AngelList.

“Angel investing is one of the best ways for me to recycle knowledge and give back to the ecosystem.”

Interested companies must submit an application by August 30. After a 10-day application review, selected companies will be invited to a video interview with AngelList. If they pass the interview, they’ll be introduced to participating angels for a discussion on terms and investment.

AngelList first entered Canada with the initial launch of AngelList Syndicates in October 2016. Since then, startups like Drop, Inkbox, and have raised over $2 million on the platform.




The underpinning tenet of chasing exponential growth is that anything less than “all of it” is never enough. If there’s more possible, more out there, then it’s your gawd damn duty to hunt it down and make it yours.

Such a pursuit is undoubtedly exciting in its Napoleonic grandeur. Why stop at making a dent in the universe, if you can bend it whole? Glory awaits only those who stand atop all others.

Or at least so goes the virtue of conquerors. Dominators. WINNERS! It’s what we’re being sold over and over again as The Way. The path to relevance and impact. And who doesn’t want to bathe in those.

But it’s not the only paradigm available for rent. Once you realize that the prevailing narrative of entrepreneurship is a paradigm, and not an immutable natural law, you open your eyes to alternatives. One of which is that of enough.

And here’s the part that really sticks with you:

The longest lived businesses in the world aren’t the ones that were biggest in their day. Many of them are family firms, or small to mid-sized enterprises content with steady evolvement of their niche. Content with enough

Read the rest of the article too.


How to fix errors in production with GitHub and Sentry

Sometimes bugs slip through even the most diligent of code reviews. Putting out fires can disrupt your flow, forcing you to comb through logs and user-submitted screenshots. In the meantime, your users are left with an enigmatic 500 page. To help your team get from error to fix as efficiently as possible, try Sentryan open source project under the BSD license. Sentry alerts you to the problematic line of code, pinpoints the commit and author likely responsible, and lets you resolve the error by including fixes ISSUE_ID in your commit message.

It starts with an overlooked edge case during an otherwise routine deploy. When a new deploy introduces an error, your team gets alerted and kicks off the familiar workflow of triaging, assigning, reproducing, and, finally, fixing the error. Sentry integrates neatly into your GitHub development flow, providing you with timely information and the rest of your team with visibility into every step.

We make extensive use of both Sentry and GitHub here at Flybase so when I came across this blog post on the GitHub blog, I wanted to share it.