In my last post, I explained how I started Barbershop Labs. In this post, I’m going to cover what I’ve learned in the past year while running a small software development shop.
There’s no halfway.
Over the years, I’d tested the waters of contracting full time by pinging my network to see if anyone had any projects. I mistook the lack of responses as a lack of opportunity.
What I’ve learned since doing this for real is that your network is much more likely to approach you if you’re doing it for real. Nobody wants to take a risk on someone who is “considering” starting a company. If they’re going to send business your way, whether it be directly or as a referral, they want the confidence that you’re all in.
It’s not that hard.
Hard is a relative term, but in my experience, keeping Barbershop Labs running hasn’t been nearly as hard as I’d expected. I’ve had a steady stream of business from day one, and have had very few surprises. I work long days, but I’ve always worked long days. I’ve had uncertainty at times, but I’ve always had to deal with uncertainty.
The most difficult thing for me has been planning for the future, while taking care of the now. A single hour spent on fostering the pipeline means an hour away from current projects. Yet, ignoring either will quickly get you into trouble. The only real solution is to hire away that problem, which brings me to my next learning…
Growth is frightening.
Early on, I found myself with more work than I could handle by myself. That’s a good problem to have, right? Time to grow the company!
I started the company with the full intention of growing it, but as soon as I was faced with the opportunity, I froze. Running a business gets exponentially harder with two people.
First, there’s the financial risk. I knew that if I ever hit a dry spell, my family would be OK. I could go home and tell my wife that we’d need to dip into savings for a few weeks. However, I couldn’t say that to someone else’s family. Hiring someone is making a commitment to their entire family.
Then there’s the matter of setting up payroll, finding suitable office space, and distributing work. It’s amazing how quickly things becoming complicated when you’re forced to make sure everyone has a full plate. You may hire someone because you just won a six month contract, then two months into the project, there’s a need to hit the pause button. It doesn’t happen frequently, but it happens.
Maybe more sophisticated shops handle this situation via a contractual clause, but in my case, the pauses have been short enough, and the clients good enough, that I was willing to work around their issue. However that forced me to reallocate resources quickly. Maybe that means that you start another project sooner than expected, maybe it means putting in 40-hours/week for another three month project, when initially you’d planned to do 20-hours/week on that for six months. Every change has a domino effect, and keeping everything in order takes a lot of time and energy.
Finally, there’s management. I spent my entire career managing people in one capacity or another, but I started Barbershop Labs because I wanted to focus all of my attention on building good software. I was tired of office politics, unproductive meetings, and all of the other minutiae that often gets in the way of building good products. I’ve always preferred to hire great people, rather than worry about being a great manager, but no matter how great the people, growing a company requires some management energy. There’s no way around it, and the more your skirt your duties, the more your company will suffer.
I avoided growth until it was absolutely necessary, and even now struggle with the decision to bring on more people; especially non-billable folks like biz dev. This is an issue that I expect to persist for at least another year.
It’s not for everyone
I’m having an absolute blast with Barbershop Labs. I’ve met so many great people, worked on some cool projects, have been exposed to tons of new technology, and have made good money along the way.
I love switching gears between projects. I enjoy building products from scratch as much as the challenge of rescuing a project. And I enjoy collaborating with customers and in-house development teams.
Not everyone likes, or is good at, all of that. Some people prefer putting all of their passion and energy into a single product. I get that. Some hate dealing with clients. I get that too. The point here is: when hiring, make sure you find not only a good developer, but one that will flourish in the world of client-services as well.
You gain perspective
When I was running technology departments in-house, for tiny startups and established companies, I’d often push for more resources, or to better compensate the people we had. Even when I had full knowledge of the company’s financials, and I knew money was tight, I’d push for those things as an “investment.” If we bring in one more developer, we’ll be better positioned to keep up with the market, support our customers, bring in new customers, etc.
I still believe in strategic investments, but managing the finances of my own company has brought a new perspective. The purpose of a business is to make money. If you have $100, and you spend $100 to make $101, you’re heading in the right direction (although, you may want to reconsider your business model!). If you spend $100 to make $99, you’re heading in the wrong direction. It’s really that simple. Every dollar I spend, needs to make me more money, and I can’t spend money that I don’t have.
There are many successful companies that were in the red for years before they turned a profit. A software development shop should not be one of those companies. Every hour that you spend while working, whether billable or not, should have a direct path to increasing your revenue.
I suspect that if I ever go back to an in-house position, I’ll carry this mentality forward.
Note: This post could go on forever. I’ve decided to stop it here and write separate blog posts throughout the year with more learnings.