5 years of Gruntwork
5 lessons learned bootstrapping a company to $4.5M in ARR

5 lessons learned bootstrapping a company to $4.5M in ARR
It all started with an email. Back in 2015, I was working as a consultant at my one-man company, Atomic Squirrel, and I was looking to hire a DevOps Engineer to work with me on a few projects. One September morning, I woke up to find the following message in my inbox:
I saw that you’re looking for a DevOps consultant, which is pretty much what I do.
It was from someone named Josh Padnick, who had found me through some blog posts I had published years ago about some open source web frameworks. After digging into Josh’s background, I found out he had his own one-man consulting company, called Phoenix DevOps, and that there was a lot of overlap in what we did. I decided it was worth having a chat and emailed Josh back with a description of what I wanted to do in the future:
First, a very quick intro to Atomic Squirrel. My goal with the company is to do for the entire tech stack what Amazon & other cloud providers did for data centers. That is, almost no startup these days runs its own data center or racks its own servers — they just use AWS or similar. I think there is a similar opportunity for the rest of the tech stack. There is no need for startups to spend months gluing together Rails + MySQL + GitHub + Travis + Ansible + Docker + AWS + New Relic + loggly … (50 more items)… I think it’s possible to create pre-packaged, end-to-end, battle-tested tech stacks that dramatically reduce both the time it takes to launch something and the amount of tech debt you end up with after launch.
Josh and I ended up talking, then working together by consulting for each other’s companies, and finally, by joining forces in a single company called Gruntwork. This month, Gruntwork turns 5 years old, so I took the time to pause, dig up Josh’s old email, and reflect on how far we’ve come since then:
- We created the “pre-packaged, end-to-end, battle-tested tech stacks” I described in my email: see the Infrastructure as Code Library and Reference Architecture.
- We have hundreds of companies and thousands of developers using these products in production.
- We built an incredible team of ~20 people.
- We’ve grown the business to ~$4.5M in annual recurring revenue (ARR).
- We did this all without raising any money or taking on any debt.
In this blog post, I’ll share 5 lessons that helped us get here:
- Serendipity, timing, and luck
- Talent is evenly distributed, opportunity is not
- It’s a marathon, not a sprint
- Life first, then work
- It’s always day 1
Serendipity, timing, and luck
The media loves to tell stories of the hero entrepreneur who worked tirelessly, defied all odds, and succeeded entirely due to their brilliant decision making, sacrifices, and grit. But that is not our story. And to be honest, that’s not really anyone’s story.
Building a company is a bit like cooking: you need the right ingredients, in the right proportions, at the right time. Good decision making, sacrifices, and hard work are 3 of the necessary ingredients, and Josh and I put in ample portions of each, but you’ll find that in every recipe for a good company, there is another ingredient that is absolutely essential, but often goes unmentioned: a pinch of luck.

Here’s a simple thought experiment that shows the role of luck: take your favorite, most talented, most worshiped entrepreneur, and change something major about their life—for example, send them back in time 100 years, or move them to a different country, with a totally different culture or economy—and ask if they could have still built their successful companies. For example, could Bill Gates have built Microsoft a century ago? Or could he have built it in the Soviet Union?
You’ll often find that the answer is no. Now here’s the key point: these are factors that the entrepreneur had no control over. When it comes to these factors, they were simply lucky enough to be in the right place, at the right time. Bill Gates was lucky enough to grow up in a part of the world that was relatively safe, stable, wealthy, and supported entrepreneurship; lucky enough to have access to excellent education, including extensive access to a computer (which was unusual in the 1960s); lucky enough to have benefited from a number of strategic missteps by IBM; and lucky enough to have grown up right at the cusp of the digital revolution (as he’s said so himself). Take away any one of those ingredients, and perhaps none of us would’ve ever heard of Bill Gates.
Now, let me be extra clear on this point: luck alone is not enough. Bill Gates didn’t succeed only because he was lucky. But just as luck alone isn’t enough, neither is hard work or good decision making. And while everyone glamorizes the latter items, the former ones don’t get enough attention. So even though Josh and I are nowhere near the level of success of a Bill Gates, we still feel extremely lucky to be where we are, and we want to explicitly acknowledge just a few of the amazing pieces of luck that allowed us to get here:
- Email and blogging. Josh’s email was pure luck. We didn’t know each other, and it was pure luck that he happened to be using the Play Framework, and happened to stumble across some blog posts about it that I had published years ago. It was also pure luck that I was looking to build the team at Atomic Squirrel and that Josh happened to have some availability at that time. Any tiny change in circumstances, and perhaps Josh never sends that email, and Gruntwork never exists.
- Cloud, DevOps, IaC. The problem we’re solving at Gruntwork is something that has been plaguing us for years. But before the cloud, before the DevOps movement, and before Infrastructure as Code (IaC) tools showed up, we could not have possibly built an off-the-shelf infrastructure library. So much of business success comes down to timing: e.g., the classic case of the computer mouse being invented before the GUI.
- Family. Josh and I are lucky enough to have wonderful, supporting families that have backed us up every step of the way.
- Team. Josh and I didn’t build Gruntwork by ourselves. We got here thanks to the hard work, inspiration, and sacrifice of a team of more than 20 people that we were lucky to find in this world.
Talent is evenly distributed, opportunity is not
Speaking of our amazing team, here’s a fun fact about the 20+ Grunts that have worked at Gruntwork: they represent more than 10 different countries by where they were born (including the US, Brazil, Bulgaria, Latvia, Ukraine, Nigeria, Australia, Serbia, Japan, and Finland) and a somewhat different set of 8 countries by where they were living (including the US, UK, Germany, Canada, Nigeria, Ireland, Finland, and Australia). Within Gruntwork, many Grunts choose to share their Personal User Guides—a bit like a README or instruction manual for how to best work with you—and I’ve found it amazing to see all the different ways people think, work, live, and interact.

Gruntwork has been a 100% globally distributed team since day 1, so we’ve been lucky enough to experience first-hand the idea (often attributed to Leila Janah) that talent is evenly distributed around the world, but opportunity is not. With COVID-19 forcing so many other companies to become distributed too, I think the rest of the world is going to become more and more aware of this fact.
Of course, being a distributed company by choice is not the same as being forced to be distributed due to a global pandemic and quarantine. Despite that, once you have a taste of remote-first work—of what happens when your hiring is not limited to a 10 mile radius of some arbitrary office location, of being able to work with great people no matter where they are, of working from where you want, when you want, and without spending hours commuting—it’s hard to go back. There are many drawbacks to distributed work, especially if you were forced into it, rather than having designed the company around it, so undoubtedly, many businesses will revert back to the way they were before COVID-19. But I think for many, the trade-offs of remote work will be a net win, so a large number of companies will stay distributed, and far more importantly, I suspect that with millions of people having had a taste of distributed work, the majority of new businesses started in the future will be distributed from day one.
We should be prepared for a far more distributed, global workforce over the next decade. We should be prepared for true globalization: not outsourcing,** where a few large companies have a central office doing the primary work and offshore teams doing peripheral work, but fully distributed, remote-first companies, where there is no central office, and all the work is done by teams across the globe. For the most part, I think that’s going to be a very good thing for the world, as opportunity will finally spread beyond the borders of a few privileged countries.
That said, having done the distributed company thing for the last 5 years, the truth is that most governments are not ready for this brave new world. The laws and regulations of most countries—especially labor laws and tax laws—have not kept up with the pace needed to support this new model. Many of these laws are based on assumptions that now feel dated, even quaint, in the modern world, such as the idea that every company must have a physical office, or that products are a physical item, built and sold in a single location.
As a result, hiring internationally—and sometimes, even hiring within a single country, such as across multiple US states—is confusing, complicated, time consuming, and expensive, especially for small startups. All the options are crappy:
- Contractors: You can hire people as contractors, which is cheap and easy, but in most countries, having a contractor doing full-time work for one company is illegal.
- Full-time employment: You can hire people full-time directly, but in most countries, labor and tax laws require you to have a physical office in that country. This involves a massive amount of overhead with establishing subsidiaries, filing paperwork, filing taxes in multiple countries, staying compliant with local labor laws, and so on. For small, bootstrapped startups, this route tends to be unworkable.
- Co-employment: Yet another option is to use a co-employment scheme, where the employee is technically hired by a Professional Employer Organization (PEO), which is a large company that has physical offices in every country, but you sign contracts so that all the IP from their work belongs to your company. The PEO handles all the local labor laws, payroll, taxes, and so on. In exchange, you typically pay the PEO a markup on each employee’s salary: e.g., if the employee makes $100K per year, you might pay the PEO a 20% markup, or about $20K per year, so the total cost to hire the person is $120K per year. This means each hire is more expensive, but because it avoids the considerable up-front and on-going overhead of establishing subsidiaries all over the world, it’s typically the best option for small, bootstrapped startups. This is the route we’ve followed at Gruntwork, using JustWorks as our PEO in the US and Remote.com and Capital GES as our PEOs outside of the US.
These are all imperfect, painful options. But where there’s pain, there’s opportunity. There probably won’t be a “next Silicon Valley”—the idea that all talent has to pool in a single location will feel antiquated in the future—but whatever country can modernize its laws to make remote work sane and affordable will have a huge leg up in the future economy.
It’s a marathon, not a sprint
Before starting Gruntwork, I came across two eye-opening stats:
- Most startups fail. While the exact percentage varies depending on how you define “startup” and “fail,” the typical failure rate is around 75%.
- Of the few startups that succeed, it takes a decade. If you’re lucky enough to succeed as a startup, it will take you, on average, five to eight years to reach a successful exit, such as an acquisition or IPO, and the average is trending upwards. Moreover, as a founder, you rarely leave immediately after the exit, but instead stick around for at least 2–3 more years, bringing the total to around 10 years.
Most people have heard of item (1), but relatively few are aware of item (2). Again, the media distorts things here, loving to tell the story of the “overnight success.” But again, that’s not our story, and that’s not really anyone’s story.

.

The reality is that if you want to build a successful company, you have to be willing to invest at least a decade of your life. If you’re in your 20s now, you’ll be working on it until you’re in your 30s; if you’re already in your 30s, you’ll be working on your company until you’re in your 40s; and that’s if you’re lucky enough to be one of the few to succeed!
It takes a long time to build a company. I can tell you that after having spent 5 years working on Gruntwork, it still feels like we are just getting started, and that there is so much more to do (more on that later). It turns out this sort of timeline isn’t unique to startups: good software takes at least 10 years and big new ideas may take far longer.
What this all means is that you need to think of a startup as a marathon, not a sprint:
- Think long term. When trying to pick a startup idea, avoid chasing fads, fashions, and get-rich-quick schemes. Think of it as a 10 year investment, and only pick an idea if you can genuinely see yourself spending most of your waking hours for next decade of your life working on it.
- Pace yourself. Don’t try to do 80 or 100 hour weeks. Ignore the hustle porn. There’s just no way to keep that kind of pace up for a decade. And the good news is that you don’t have to: I can tell you that you can build a healthy, growing business working normal hours and taking plenty of time off.
Life first, then work
Speaking of time off, one of the core principles we try to follow at Gruntwork is:
Life first, then work
In other words, we plan work around our lives, and not our lives around work. Work is important, and we are passionate about our mission of making it 10x easier to build software, but we have other passions too. We love to spend time with family and friends; to travel; to play sports; to read; to hike; and so on.
Work is essentially infinite; or, as per Parkinson’s Law, work will expand to fill the time you allot it. To prevent work from taking over every aspect of your life, you have to plan life first, and only then fill the rest of the time with work.
For example, if you want to take time off at Gruntwork, there’s no approval process; instead, you add it to your calendar in advance, announce it in our #ooo
(out of office) Slack channel, and then we plan the work around it. In fact, at Gruntwork, we have a minimum vacation policy, where we require all employees to take at least 4 weeks off per year (not including holidays, plus our 2-week winter break shut down). To keep everyone on track, we even built an internal tool that reads vacation time from everyone’s calendar and shows whether you’ve met the minimum:

It’s also important to create separation between your life and work, not just during vacations, but on a day to day basis. As a startup co-founder, I can tell you that it’s entirely possible to think about your startup 24 hours per day. There’s always more work to do, always more problems to solve, always new things to worry about. If you let it, a startup can completely take over your life, filling every waking moment, and quite a few of the sleeping moments too. That’s not a good thing. Succeeding at a startup at the cost of everything else in your life is not a trade-off I want to make—and for that matter, I’m not sure that a 24/7 obsession with your startup makes you any more likely to succeed.
One thing that helps is creating physical separation between where you work and where you live. We provide all Gruntwork employees with a wellness budget that can be used to improve productivity and wellness, including paying for a co-working space, so you can do your work in a totally separate place from where you live, and paying for a gym membership, so you can stay healthy.

During COVID-19, most people have to stay at home due to lock-downs, making separation a lot tougher. If you’re lucky enough to have a separate room in your home that you can use as an office (there’s that luck thing again!), that can be a huge help, as you can “leave” work at the end of the day, shut the door behind you, and more easily focus on other things. Of course, not everyone has that privilege, and with kids at home due to COVID-19, separating work from life gets even harder. Therefore, in 2020, we doubled the personal budget, and flushed out more use cases: e.g., you can use it to pay for nannies, babysitters, child care, Peloton memberships, home gyms, home office equipment, and so on.
Unfortunately, COVID-19 wasn’t the only issue in 2020. It was a tough year for everyone. At times like these, reminding everyone of life before work is more important than ever:

It’s always day 1
At Amazon, Jeff Bezos famously says, “it’s always day 1.” No matter how big the company gets, no matter how many employees they have, no matter how long they have been around, they always want to act like it’s day 1 at a startup—to stay innovative, resourceful, and agile.
We are nowhere near Amazon’s scale, and we’re still a tiny startup, and yet, “it’s always day 1” is meaningful to us too. In some ways, it feels like it has been a long time since Josh sent that email 5 years ago. But in other ways, it feels like we are just getting started—like we’ve barely scratched the surface of what’s possible. There’s so much more that we are going to build:
- More IaC modules: monitoring tools, serverless tools, data stores, etc.
- More compliance standards: e.g., HIPAA, PCI DSS, NIST 800–53, etc.
- More clouds: e.g., GCP, Azure.
- Automatic updates for all infrastructure dependencies.
- A web UI to manage all your infrastructure.
- And much more.
There’s a lot to do—and that’s a very good thing. We are excited to get to work on these items. We’re excited to make it 10x easier to build software for everyone. And we are excited that even after 5 years of work, it’s still day 1.
Your entire infrastructure. Define as code. In 1 day. Gruntwork.io.