Quality vs. Shipping

One of the most frustrating tradeoffs during these years that I’ve been working on Sifter has been the degree to which I’ve cut some corners with user experience. It wasn’t a decision that I took lightly, but it was a very deliberate decision. Now that I feel like we’re finally beginning to move towards the level of quality that I would like, I’m comfortable sharing this.

For almost four years now, I’ve been using a tool that I love but that drives me crazy. A rough edge here, a sharp corner there, and a lack of general cohesiveness throughout. It’s been driving me nuts. Every day, I saw things and knew about things I wanted to fix, but every day I forced myself to look the other way and focus on the bigger picture.

You see, up until recently, the only real goal has been shipping. I strive to take great care of our existing customers first and then to get improvements out to them second. Like a cloud looming over me, I felt like we were constantly failing to quickly get key features into customer hands. If it worked reliably but maybe felt a big clunky in areas, I was ok with that in order to get it to our customers. In some cases it was a great strategy because we could then use feedback from customers to really get it right.

When there’s really only one person doing design, front-end development, back-end development, support, marketing, and a variety of other tasks, something has to give. Now, things are far from perfect, but now that I feel like we’re regularly making meaningful progress, I’m indulging myself and fixing up some of those annoying little bits. There’s still an absurd amount of work left to do, but if you’re a Sifter user, hopefully you notice extra attention the little things are receiving these days.

Exhausted and Anxious

A few weeks ago, we released a significant update to Sifter. (Rails 3, Ruby 1.9, and a bevy of associated gems and other components in case you’re curious about such things.) Since then, there have only been a few fleeting moments of peace and quiet. My Pavlovian response to the email alerts has gotten a bit out of hand.

The first couple of weeks after the release I felt physically ill due to the extended hours and the pressure I was placing on myself. You see, it’s simply not possible for anyone to be harder on me than I am. That’s both good and bad. Maybe more bad than good. Anyhow, it was a little bumpy. From obscure encoding bugs to even more obscure performance bugs, (you know, the kind that only show up in production) it’s been a wild ride.

More often than not, going to bed only crossed my mind when I recognized that being at the keyboard would likely do more harm than good. Of course, most nights, going to bed didn’t equate to getting sleep. There were just enough emails to prevent any deep restful sleep. There were rarely any that required immediate attention, but I wasn’t taking chances.

I’ve never worked so hard or been more physically exhausted by work in my life, but do you know what the crazy part is? Despite that exhaustion, I’ve never been more excited or anxious to get to work. The boring part is done. Now it’s just about delighting our customers with long overdue improvements. I know I need to catch up on sleep, but now I don’t care. I don’t want a break. I just want to ship things and make people happy. Nonetheless, I’m going to take a break tomorrow. Or maybe the next day. We’ll see.

Ready

We spent the last 6 months doing hard work that isn’t fun or directly visible to customers. It just had to be done. It sucked. Building this foundation has been the hardest, most involved work with which I’ve ever been involved, and nothing has ever pushed me so far outside of my comfort zone. Conveniently enough, my daughter is 6 months old as well. Put the two together, and well, you can probably guess what kind of a ride it has been. Thankfully, it looks like the most challenging days are behind us, and we’re ready get back to making a product rather than managing a business.

Team We have awesome people on retainer to help with necessary but distracting things like bookkeeping, accounting, legal, system administration, and more. We also have enough profit to bring in some additional help from time to time so we can work with great people on fun stuff.

Technology We have the technical infrastructure in place to serve more requests than ever with our fastest response times ever, and we’ve just barely dipped our toes into performance tuning. We can also quickly and easily scale that infrastructure as we grow. Our other internal processes are running more smoothly than ever. We’ve refactored and improved significant amounts of code so that we’re running the latest and greatest with the most flexibility to adapt going forward.

Knowledge We have three years of interacting with real people using Sifter and offering great feedback and insight to how they use it. Those conversations have helped us create a crystal clear vision for where to take Sifter from here. We’ve also been able to observe how people really use Sifter. We have a clear understanding of which features see the most use and which features we could probably live without. I can’t put into words how excited I am to do something with all of this accumulated knowledge.

With Sifter, all I ever wanted was to build something that made people happy and have fun doing it. In some ways we’ve succeeded, but it’s been significantly more challenging than I ever anticipated. In four years, all we’ve really managed to do is build a business that can afford to let me turn Sifter into the product I always envisioned. This is just my way of drawing a line in the sand to say this is the week that we turned the corner. Check back in with me at the end of the year to see if we pulled it off.

The Early Days of Founding Sifter

Keith Jacobs and I had known each other and worked together fairly closely for about 5 years when he wrote a check for $16,000 so I could quit my job and start Sifter. What’s more interesting is that after writing the check, he didn’t look at the results of his investment until Sifter launched. Imagine writing a check for $16,000 and not looking at the results for 11 months. That kind of trust is incredibly important. The way Keith looks at it, he wasn’t investing in Sifter so much as he was investing in me.

Keith isn’t just an investor in Sifter. He also handled and continues to handle most of our legal, accounting, and non-technical operational business matters. Keith’s investment combined with his experience and willingness to handle the logistical stuff was key in freeing me from worrying about some of the facets of building a business that are necessary but less than exciting. All I had to do was worry about the product.

Ultimately, we only spent about $10,000 of that initial amount prior to launch. It paid for our incorporation, business insurance, identity design, and initial infrastructure costs like hosting and SSL. Fortunately, Sifter was profitable from day one, so we never had to dip into the other $6,000. However, it ended up being important after launch as it provided us the cushion that we needed to do some early advertising and help get Sifter’s name out there.

There’s no one way to launch a company. I’m pretty sure that I could have launched Sifter on my own without Keith’s investment or help, but it would have been painful. Maybe too painful. There’s no perfect formula for a co-founder or investment amount. It all depends on what works for you. In my experience, all you need are a solid respect and trust for each other combined with a situation where everyone has enough skin in the game. In our case, Keith put up his cash, and I quit my job. Admittedly, Keith probably had a little more risk, but I was certainly doing more than dipping my toes in the water.

Probably the only other relevant tidbit from founding Sifter was that we knew from the beginning that I’d retain the controlling interest and be responsible for curating the product. Fortunately for us, we both recognized the importance of this decision. At some point, somebody has to always have the definitive answer. In our case, while I discuss everything with Keith, I’m ultimately responsible for the decisions.

It’s not the perfect founding story, and there hasn’t been any drama to make it interesting, but it’s worked great for us. It may not be particularly fascinating, but hopefully it helps provide some context to others looking to start their company.

I finally managed to finish updating the Sifter marketing site. An overhaul for the API documentation, a new blog and changelog (both powered by Harmony), and a handful of other updates to bring the site up to date with the application.

Of course, it’s responsive as well if you’re into that sort of thing.

My Biggest Mistake

When I set out to build Sifter, I had a singular vision. Make a bug and issue tracker that non-technical team members would actively use. However, once it was out in the wild, things weren’t so clear. I failed to stay focused. I let myself get distracted by finances, logistics, uptime and support.

I got bogged down watching our bottom-line even though we’ve always been comfortably profitable. I worried about preventing fraud even though the only instance we ever encountered only cost us $200. I constantly worried that Sifter could go down at any moment even though we’ve had 99.96% uptime since launch. (That’s about 9 hours in almost 3 years.) Don’t get me wrong, we’re working to do better, but at 99.96% there’s more important work for us to do. I also let myself become too focused on support. I desperately wanted people to like Sifter. If they didn’t like it, I wanted them to understand, and ideally, appreciate the vision. All of these little things were distracting me from the work that really mattered.

Once Sifter was live, I went from creating an application to running a business, and it didn’t take long before that business was running me. Between fear, worrying, and the feeling that I had to justify our every move to our customers, I stopped having the guts to try and do anything special with Sifter. I was so obsessed with ensuring that we didn’t fail, I forgot to spend time making sure that we succeed.

It took the biggest deadline of my life for me to see what I’ve been doing wrong. In about 4 weeks, if all goes well, my wife and I will have our first child. I’m not even close to finishing the amount of work that I had hoped to by then, and until recently, it was killing me. However, it has helped provide a renewed focus, and the next 4 weeks will see some of the deepest improvements to Sifter since we launched because they set us up to minimize the distractions of running Sifter.

By the time our daughter arrives and I hopefully get a little bit of time off to spend with family, Sifter will be in a new hosting environment with improved performance, higher availability, more modularity, and even better backups. That means fewer logistical distractions and more time to focus on improving the application itself. We’ll be able to grow faster and with less effort. On top of that, we’ll add one of our top three feature requests with the other two to follow not long after.

I’ve always known better, but I simply couldn’t see it. Building a business is scary. Starting a family while building a business is even scarier. However, letting fear and worry drive decision making is no way to accomplish anything meaningful. I just wish I had recognized it sooner.

Betting on Design

I’ve designed and created software and web sites for a lot of different companies over the years. All of those companies have been focused on features or just getting something out the door. They were more concerned about next week’s trade show than next year’s vision. They would rather have one paying customer today than one passionate customer tomorrow. I always understood their reasoning, but I never shared it.

After investing 100’s of hours in designing the future vision for Sifter, I’ve finally had the opportunity to put my money where my mouth is. Instead of chasing the all-powerful feature checklist, we’ve made a pretty big bet that improving the overall experience of using Sifter is a better decision than adding as many features as we can. That’s not to say that it’s right for every piece of software—only that we feel it’s right for us.

Spending such an incredible amount of time on design isn’t easy when the occasional customer cancels and tells you that they’re doing so because of your lack of features. However, staying true to this vision feels like the most important decision that I make every day. It’s frustrating at times because this is a massive exercise in delayed gratification. I just have to remember that we’re thinking about 5 years from now not 5 months from now.

Naturally, we’ve got a long journey ahead of us, and there won’t be a single moment where we unleash a 2.0. Instead, we’re going to finish laying out the vision and then steadily evolve towards it. To some degree we’ve already started the evolution. We’ll still be adding features as we go, but we’ll always put design and user experience first. We’re not going to add a feature simply to have it on our checklist. When we add something, there’s going to be a good reason for it, and we’ll be designing it carefully. That is, we spend about 3-5 times as much time thinking and designing than we do building. We don’t want to placate customers today—we want to give them a reason to love Sifter tomorrow.

I got a chance to chat with Dan about the ups and downs of Sifter, the journey to get this far, and where we’re going from here.

Decisions

We’ve been contacted a couple of times with an opportunity to participate in promotions where we give away a few free Sifter accounts. We’ve always been curious and considered participating, but ultimately never pulled the trigger. Similarly, we’ve never even come close to considering a freemium model. Both are probably great at generating attention and new customers for apps like ours, but we have one simple concern.

In giving away free accounts to Sifter, there’s a chance that we’ll end up with customers who use Sifter not because they like it, but because it’s free. We want people to use Sifter because it’s right for them and because they like it.

Decisions like this are difficult to make. In and of themselves, they might seem almost trivial, but over time, they add up and come to define a company. I want us to be as confident as possible that our customers use Sifter because they choose to not because they have to. This is just one more small way to do that. It may not be the fastest path to growth, but we believe it’s the right path for us.

Worrying

The most challenging thing about running Sifter has been balancing the countless tasks that fall on the shoulders of a solo founder. (Yes, we have other people, but all of the day-to-day tasks are mine.) Over Thanksgiving, I took some time to sit down and re-prioritize all of the responsibilities that I was juggling, and it’s made a dramatic improvement.

I quickly recognized that the common thread on a lot of my time was unnecessary worrying. Worrying about financials. Worrying about performance. Worrying about support request turnaround. Worrying about feature deadlines. Worrying about making customers happy. Worrying about whether we’re growing or shrinking. I looked at everything that actually was worth worrying about, and made some significant changes.

Support. As necessary as it is, answering support emails is interrupt driven. When we receive one, I drop everything and give it my full attention. There’s little that I can do about this, so while I try to be a little more cautious about dropping what I’m working on, this is something that I just learned to embrace. Worrying about taking good care of our customers is worth it. Now, I don’t worry about it so much as I get excited about it. It’s an opportunity to learn something, improve Sifter, or simply talk to our customers.

Financials and numbers. I’m very knowledgeable about our financials. I didn’t need to be. This was the first thing that I cut. Instead of updating daily, I’m only doing this once per week, and only on the weekend. It’s added up to an extra half hour per day of free time. More importantly, it’s one less distraction.

Performance. I regularly login and make sure that everything is running smoothly and performing with reasonable ranges. Instead of keeping up with it, I just decreased the tolerance for alert notifications. Now, if things start to get outside of acceptable ranges, I’ll know right away. So, now I’m no longer giving performance a second thought unless I have a specific reason to think about it.

Growth. We’ve never wanted explosive growth. We really just want to reach a point where we have a couple of people having fun building software that people like. I’ve never been particularly worried about how long it takes us to get there, but whenever it looks like we’re taking more steps backwards than forwards, it would lead to a depressing couple of days. Ultimately, we’ve always recovered from any lost accounts and continued to grow, but I would always let it stress me out. Now I’m taking a much more long-term view. We’re profitable. As long as we can afford to keep making the software better, everything is fine.

Time. Traditionally, I’ve tried to squeeze in every productive minute that I could so that I was on top of things. This led to a very fragmented free time, and it meant that instead of relaxing and having fun, I was always mindful of finding a way to work on Sifter. This time was moderately useful at best. When you’re building software, in order to do anything meaningful, you need hours of time, not minutes. I’ve stopped focusing on being productive every second and started focusing on letting my head stop thinking about it when I’m not working. It’s not easy, but when it works, it’s great. The upside is that I’m that much more energized when I do sit down to work.

These are all little things, but they were distractions that were always rattling around in my head. To make matters worse, they were unnecessary distractions, and they ultimately cut into my productivity. I was keeping myself busy managing the company instead of building a business. I was letting all of these little things control me. By putting them in context, I was finally able to really focus on the one thing that matters and get back to truly improving Sifter.

Starting is easier than sustaining.

I spent about a year planning and building Sifter. We launched, and I’ve now spent about two years running and supporting it. In my personal opinion, launching was easy. Things didn’t become truly challenging until Sifter was live. That’s not to say that launching is easy, but in my experience, sustaining the effort after launch is significantly more challenging. Fortunately, though, it’s more rewarding as well.

Starting is the fun part. Starting is about working entirely on creating something out of passion and love. There aren’t customers to support. Downtime and bugs in live code don’t have true consequences. It’s a time of unlimited hope and enthusiasm. It’s a blank slate without existing burdens or code debt. There are road bumps in the beginning, but that’s all they are. Bumps. There’s very little that can truly go wrong until it’s in the wild. That’s when fortitude is necessary.

Sustaining requires fortitude. Sustaining is about much more than creating. Sustaining means supporting customers, managing financials, improving performance, and minimizing downtime. Of course, all of that has to happen while continuing to create and improve and grow. Sustaining involves waking up in the middle of the night and simply not sleeping at all other nights. Sustaining means receiving un-filtered criticism from real people and still believing. Sustaining means never really being on vacation.

Despite all of this, managing Sifter has at the same time been the single most stressful, rewarding, time-consuming, exciting, anxious, overwhelming, and thrilling project with which I’ve ever been involved. The scariest part is that I think we’re only getting started.

Support

For me, support requests have been simultaneously one of the most rewarding and most challenging aspects of running Sifter. What I’ve found is that by making myself acutely aware of the value of those emails, it feels less like an interruption and more like an opportunity.

Currently, we get about 5-10 support requests per week that I spend anywhere from 15-45 minutes responding to and resolving. Sometimes it’s a matter of fixing a bug while others it’s just a matter of discussing feature ideas or explaining some of our design decisions. Over the last couple of years, there are a few techniques I’ve adopted to make support more useful.

Care. This comes naturally for me since I’m responsible for all aspects of Sifter, but caring deeply about every single support request makes a big difference. They aren’t tasks to be completed. They are opportunities to interact directly with people who use Sifter. After spending years consulting where we didn’t always have direct access to real users, it’s exciting to be able to do this, and it’s almost impossible not to be anxious about each and every email.

Turn it into a conversation. It would be a lot faster for me to just say, “Thanks! We’ll keep that in mind.” However, if I did that, I’d never really understand how people are using Sifter. By asking some additional questions or sharing some of our unpolished ideas, I’m able to get a clearer picture of how we can best help the most customers. These conversations have also served as kindling for ideas. I can’t imagine handling it any other way.

Respond quickly. I firmly believe in responding as quickly as possible without sacrificing the quality of the response. While this isn’t always easy, and was a huge source of frustration at first, I’ve been able to adapt. In my experience the speed of our replies has been the one thing that people regularly thank us for and truly appreciate.

Set boundaries. As obsessive as I’ve been about speedy replies, it was important to also set boundaries. The expectation of a speedy response is entirely my own. I put more pressure on myself than our customers ever could. In order to address this, I explicitly added “office hours” to our support page not for our customers but for me. I still regularly respond off hours if I can or if it’s urgent, but having the hours posted has helped me relax and not be so hard on myself about always turning emails around quickly.

Give everyone the benefit of the doubt. Sometimes, I get support requests that on the surface either don’t make any sense or seem like the person put zero thought into something before firing off an email to us. Sometimes, that’s the case. However, most of the time, it’s a simple misunderstanding. Email is a challenging medium for communication. By recognizing that and assuming that if someone has taken the time to email us, they have a good reason for it, I’m able to do a much better job helping them.

Don’t take it personally. In my case, Sifter is a huge part of my life. I didn’t build it just to make a living. I built it so that I could be excited about work every day. There’s not a day that goes by where I’m not spending a significant amount of time thinking about Sifter. Weekends. Vacations. It’s always on my mind. As a result, it’s incredibly difficult not to take everything personally. Sifter is a lot less like a job or career and more like having a child. So, while not always easy, I’ve found that it really helps to remind myself that it is never personal despite how much I care about it.

Make it personal. We’ve been trained to expect negative experiences anytime we have to request support from a company. People expect that the most likely scenario is that the person on the other end doesn’t care. I added a very brief personal message on our support page, and almost overnight, the general tone of support requests changed. People didn’t have to worry about whether they were going to get a cold response. They would immediately know that they have a direct line to some who cares and has the power to enact change.

Be ready for criticism. It’s going to happen. Take it with a grain of salt. The important thing to remember about criticism is that he alternative to criticism is’t praise, it’s silence. People don’t criticize something that they don’t care about. They only criticize things that are close to meeting their needs. You don’t need to worry when people criticize you, you need to worry when they stop.

There’s been many other lessons that I’ve learned, but these have helped me the most as I learn to balance support and development. I’m sure it will be a challenge if or when we reach a point that it makes sense for someone else to handle support, but for the time being, I wouldn’t change a thing.