Ryo's Professional Blog

Code, marketing, business.

Competitor Analysis Framework for SaaS Companies

Doing competitive analysis is a skill that I’ve picked up on an ad-hoc basis over the past couple years. I never received any formal training, but I wish I did, and this is why I’m writing this post.

One note: If you’re reading this, you probably have an idea and want to find out if someone’s already done it. Well, I hate to break it to you, but there are almost certainly people who have already done it. And if it’s a good idea, there are multiple companies already in the space with a solid product or service. Despite the popular mythology that companies sprout from novel, previously untested ideas, the majority of new ones enter a space that has already been colonized by someone else. After all, Facebook was the n-th incarnation of a social network (see Classmates.com, Friendster, MySpace).

So before you go ahead and use some of these techniques to shatter your dreams that you had a globally unique idea, please remember that successful competitors are actually a good sign. The question for you is how do you create a better team, pick a more profitable niche, find a new distribution method, or a myriad of other ways to unlock a new business opportunity that doesn’t involve “eureka”.

Now that we’ve gotten that out of the way, let’s get started!

Here is my framework to understand a market and the companies within it:

Preliminary Research

I usually start by putting myself in the shoes of the customer and Googling what I feel is appropriate. This will usually turn up at least one or two companies that are in my target space. The main objective is to figure out what most people call the target product or service. All of the other research depends on getting this part right, so don’t skimp here.

You’ll be surprised when you find out that everyone else in the world calls your product something different than you imagined. Especially if you’re a marketer. I’ve noticed over the years that marketers tend to love of coming up with new exciting jargon that doesn’t match what customers say.

Once you find a handful of initial competitors, delve deeper. Here are a couple of important places to focus:

  • Homepage Titles and Descriptions - The titles and descriptions of the homepage for a competitor were likely carefully crafted to match the most popular terms used to describe their type of product. If you see multiple competitors using the same words to describe their product in their title, there’s a high likelihood that that’s the keyword that most people search for.
  • Page Content - How do people talk about the type of product they are looking for? Not just on the pages of other companies, but also in forums and news articles related to the product?
  • AdWords Results - When you’re doing your searches, what terms cause AdWords ads to show up? Businesses optimize their ad spending to target the terms that result in the most business, so this is another useful signal to figure out whether a term is jargon or genuine.

Competitor Research

So now you know what people call your product. Congratulations, you’re already one step ahead of the majority of people who are creating a startup!

The next step is to build a list of companies in the space. You might think that this is the majority of the process. However, this part usually requires less thought than figuring out the language of the market and then analyzing the list. Luckily, there are many public (and paid) databases we can use to quickly pull up companies in a space.

Competitor Searches

Competitor Searches

As part of the preliminary research, you likely put together an initial list of companies. Start searching “[insert company name] competitor” and more than likely you will see listicles of tools, software review sites, and AdWords ads that will all show you more companies to add to your list. Unfortunately, you’ll need to do some evaluation before you put companies on your list. I’ve found that software review sites and blog posts often times contain defunct or unrelated companies, something you’ll need to manually check.

Marketing Technology Landscape 2019

Market Technology Landscapes

If you search for “[insert broad market] technology landscape”, you may find that others have already done the hard work of putting together a comprehensive market landscape for you. For example, searching for “marketing technology landscape” or “sales technology landscape” will literally give you an up-to-date map of the market.

Ahrefs competing domains screenshot

SEO Tools

On the off chance that you have a subscription to an SEO tool such as Moz, SpyFu, or Ahrefs, these can be great to dig up competitors. For example, on Ahrefs you can go to the “Site Explorer” and enter the domain of a company, and then go to “competing domains”, which will show the domains that compete for the same keywords. Most of these tools have similar capabilities and can uncover new competitors that the other methods haven’t uncovered.

Competitor Analysis

I usually start by putting all of the competitors that were found in the preliminary research in a spreadsheet and adding a couple columns for segmentation. What you choose for the segmentation columns depends on your goal with the research.

For me, my goal is to have a high-level understanding of the current state of the market, and then identify 1-2 competitors that can serve as inspiration for what I’m trying to build. Basically, companies that are small enough to learn from, but are growing fast enough to show success. So, what I segment by are:

  • Company size - The number of people working at a company can be a rough proxy for the amount of revenue they are making (although it can obviously be skewed for highly unprofitable businesses). Search the name of the business with the keyword “linkedin” to pull up the LinkedIn company page to find the number of employees.
  • Funding - The amount of funding a business has is a direct outcome of how much investors believe in the company. This number can be found by searching Crunchbase.
  • Year Founded - When the company was founded can show you market-level trends in market age. The oldest companies are usually the stalwarts that most enterprises use, and identifying and studying these can be useful when conducting product development interviews so you can go deeper into what is missing from these tools. This can also be found by searching Crunchbase.
  • Domain authority - Domain authority is a signal of how established a company is on search, which is a product of its investments in SEO combined with its age and reputation. If you already pay for an SEO tool like Ahrefs or Moz, then you can use that to find this number. Or use a free too like this domain authority checker

All of these signals are highly correlated but can signal unique strategies companies take to achieve their growth objectives. Sorting by one column and looking at the outliers in the others is a valuable technique.

For example, let’s take a look at a spreadsheet that I put together for the idea I’m working on now, an SEO experimentation platform:

SaaS Competitor Research

From this spreadsheet, a couple of categories of competitors emerge:

  • The Old Guard - (Conductor, Brightedge, SearchMetrics) - These are the platforms that are currently dominating the market. Most of the people you talk to in the market will be at least familiar with them, so it’s useful to study them so you can talk coherently about them when doing product interviews.
  • The New Guard - (Botify) - These companies are newer versions of the Old Guard and are fighting to replace them. How the New Guard attempts to differentiate themselves from the Old Guard can teach you what the trends in the market are.
  • Larger Upstarts - (Ryte, MarketMuse) - These are smaller companies that have been able to hit product market fit and are able to sustain themselves as a sustainable business.
  • Smaller Upstarts - (ContentKing, Clearscope, RankScience, ClickFlow) - These are companies who haven’t quite reached product-market fit but are exploring new ideas in the space.
  • Dead Companies - (not listed) - For any market, there will be many dead companies/projects that are non-players in the space. These can be identified by taking a look at their blog/social accounts and seeing if they’ve gone silent. These companies should be excluded from analysis as they do not add any insight and there are too many of them.

Getting Even More Company Details

Now that you have a shortlist of companies that you want to learn more about, what can you learn about them?


Is a The Internet Archive a great place to see how a company has evolved over time. Looking at older versions of a competitor’s homepage reveals how the market has evolved and different approaches they’ve tried in positioning their product. It can also indicate stagnation if they haven’t changed their pitch in a long time and others in the space are moving toward a new trend.

Organization Data

These are large amounts of organization data available beyond what was mentioned earlier, and here are some of the sources I check if I want to learn something more specific about a competitor:

  • Crunchbase - General purpose organization database that keeps track of funding events
  • LinkedIn - The best place for an up-to-date employee count
  • Angel.co - Most tech companies post their jobs on AngelList, so it can be a good place to check for how much a company is growing
  • Owler - Similar to Crunchbase, but with a great focus on competitive intelligence
  • DataFox - An Oracle enterprise sales tool that sits on top of a high-quality database of companies
  • Mattermark - Similar to DataFox but less enterprise
  • Slideshare - Good for finding pitch decks and product demos

Product Reviews

How happy are your competitor’s customers? Find out on product review sites like:

Marketing Traffic

Looking at where leads are coming from for your competitors can show you how the market prefers finding your type of product. The resource below breaks down the channels that are delivering the most traffic for any URL:

Tech Stack

I usually look at tools like Datanyze, Similartech, and Builtwith to help me understand the tech that other companies are using. Generally, the type of tech a company is using isn’t very important from a competitor analysis point of view, but my engineering-side is just curious ;)

Other Fun Resources

  • Quora - Searching for questions related to the competitor usually brings up answers written by marketers working at each of the companies in the space
  • YouTube or Vimeo - Product demos, explainer videos, Q&A’s with leadership, if a company’s active on their video channel, this can be a rich set of data to really dive into what’s top of mind for a company

SaaS Company Lifecycle

The SaaS Lifecycle

These categories reflect the lifecycle of SaaS companies as they age, and the different markets they target. The general trend is for companies to move upmarket as they take on more funding and need to maximize revenue. As they grow, they acquire other companies and turn their product into a suite of products. Along the way, they either become acquired, and the most successful IPO. However, companies can choose to take alternative paths, choosing to stay small and private, or continuing to focus on SMB’s as they grow.

Fake Demo Calls

Now, if you want to take it one step further, what you can do is to start taking demo calls with some of these companies so that you can see how they pitch you. Some people would say that this is taking it too far. Common startup advice is to disregard competitors and avoid being a copycat. In principle, I agree that obsessing over competitors can be a waste of time. But in practice, I’ve observed that most people using the advice as an excuse to not put the work into understanding the market.

And then there’s the moral argument: Is it wrong to lie? The answer to that question is beyond the scope of this post. However, I will say that doing fake demo calls is not uncommon in the industry.

To maximize the relevance of the call, the alias you use will need to be closely aligned with the customer persona that you will be targeting in your venture. That way, you can see how the sales team tailors the pitch of their product to your persona, which is one of the most important pieces of information you can learn from the call. Also, if you haven’t nailed down your persona yet, these calls can be useful for identifying the most profitable personas to target.

You’ll want to be prepared on these calls with the questions you want answered, which you can sprinkle in the conversation. For example:

  • What kind of customers usually find the most value from your product? Which ones don’t?” - This can be great for identifying a target persona
  • I’ve heard of X, Y, and Z as competitors in this space. Which ones do leads bring up the most and how does your product differentiate?” - This one can add to the list of competitors you’ve already compiled, identify the most serious competitors to focus research on, and bring up differentiators that might not be on the website
  • What new products or features is your company focused on rolling out in the near future?” - This reveals the direction the company is heading and can reveal market opportunities as well as general trends. For example, if a company is focused on enterprise features, they will probably start to reduce focus on their smaller customers, a potential opportunity.

Now it’s time to actually make the call. There are multiple ways of going about this step:

  • Delegating - This involves finding a someone in your network who would be willing to hop on a call with a salesperson and take notes. Trust is important here, you don’t want them to slip up and expose you or your company (although if you’re just starting out, it doesn’t mean much). As is basic familiarity with a software sales demo and the ability to record a screenshare (which can be surprisingly challenging in the 21st century).
  • Doing it yourself - If you are just starting out, you don’t need to create a new alias, but if you are already publicly in a competing organization you will need to. Creating an alias is somewhat time consuming but if you do it once you don’t need to do it again.

Once you have the the notes from the call, equally useful is finding a place to keep it all. It’s easy to spend all of your energy on doing the calls and then forget that you’ll want to reference the info months later.

Application of Analysis

Understanding the larger market in this way improves your understanding of how your product can fit and where the market opportunities lie. When doing product development interviews, it can be valuable to learn how each of these companies are performing in satisfying the user’s needs. Is there something that the larger upstarts are doing well that the old guard is not? What is the market’s perception of each of these tools, and why are they (or aren’t they) using them?

Being able to answer these questions will help you:

  • Improve your confidence in pursuing your existing idea
  • Find business opportunities in a specific market
  • Convince investors to fund the idea
  • Ask better questions in product development interviews
  • Position your product to potential customers
  • Know when and how to pivot to a different idea
  • Avoid bad ideas from turning into real work
  • Educate your team on where to focus efforts

On the final point, one of the greatest multipliers of competitive research is making it accessible and spreading the knowledge among your team (if you have one). Don’t give people an excuse to not educate themselves. Create summary videos with Loom and post them to your slack, put all of the competitor videos in your company wiki, organize sessions on how these learnings can be applied to different departments.

Having a team that’s well-versed in the market can make all the difference, and by putting the time into gathering the data, you make it that much easier for them to get there.

My Farewell to TINT

Old TINT Photos

If you’re connected to me or anyone else at TINT, you might know that we’ve been looking for someone to take the keys to our company. The big news is that we signed a deal to sell TINT to Filestack. The press release will cover what both organizations want the world to know: This deal is a winning union between two successful companies, combining forces to strategically take on more of the user generated content market.

I wholeheartedly believe this is true. But, this post isn’t about that. It’s about what the deal means for me, in a way that could never be represented in a merger agreement or capitalization table.

Company Timeline

We started this journey in 2011. Raised $370k in 2012. Pivoted and launched TINT in 2013. Hit break-even in 5 months. Bootstrapped it to $5M ARR with 30 people. Sold it to Filestack in 2018. What happened in between? Here’s a company timeline:

2011: Hypemarks starts as Tim’s business school class project. In his homework, he describes the concept: “HypeMarks.com is a social bookmarking site that allows consumers to search the trending sites of today based on a specific category, store (bookmark) their favorite ones, and share the new-found sites with their friends.”

2012: Through a lot of hustle and luck, Tim builds the initial team, and Hypemarks goes from a university basement student project to a seed funded startup.


2013: Founders move to SF, pivot from Hypemarks to TINT, almost run out of money, and at the last minute achieve ramen profitability. Tim and I shared a studio together, and I slept on an air mattress in a tent (see photo above).

Rohith's First Day

2014: Ramen profitability turns to sustainable business growth and we hire the first employees. Pictured above are Zen and Ro on Ro’s first day.

New Office - 2501 Bryant

2015: Growth continues quickly, with impressive customers signing on, and TINT expands rapidly. 19 to 37 full-time employees. Moving from a 3,000 to 10,000 sqft office. Expanding sales globally with reps in UK, Dubai, and Brazil.

TINT revenue vs expenses

2016: Revenue growth plateaus while expenses climb due to rapid growth, so we have our first layoffs to stabilize the business, and work to reduce churn and increase contract value.

Tim giving a speech

2017: Despite having significantly grown our average contract value, overall revenue still hasn’t grown so we continue pushing hard as a team, offering an unlimited plan for enterprises, bringing in a customer success consultant to help us reduce churn, and later in the year we hire experienced senior directors of sales and marketing. Our goal is to push into the enterprise space.

Cofounders at Scaleworks

2018: The investments we made in 2017 did not result in traction in the enterprise space, so TINT switches direction to focus back on the self-service market and going back to profitability. During this time, Tim intensifies his search for potential acquirers, and after considering multiple offers, we sign a deal with Scaleworks / Filestack.

Looking Back

Looking back on the timeline, it’s shocking to me how much has happenned at TINT over the years. The innocence of the early days, the exuberance of early growth, the shock of hitting the plateau, the determination in the face of continuous challenge, and the uncertainty of looking for an exit.

My worldview has changed thanks to all of the madness that comes with operating a small business. Tim has handled more of it than anyone else, but me, Nik, and others on the team have faced it at one point or another. There’s a lot of crazy stuff behind the scenes that no-one talks about. Patent trolls. Ex-employee going rogue and stealing customers. Surprise illegal office zoning. Surprise Instagram API changes that break the product. Layoffs. Lost friends. Burnout.

But the team was able to find a way to handle each of those situations. As time has passed, the sharp pain of these situations has mellowed into experience. And the experience is why I joined this team, so ultimately I am grateful for the opportunity to learn valuable lessons.

Lessons Learned

As expected with our first company, we succeeded at a couple things, failed at many more. Below are a couple of things we learned along the way:

No Playbooks

I’ve read countless startup books, blog articles, podcasts, videos, HN comment threads, slideshares and the biggest lesson I’ve learned from putting these resources into action is that it’s rare to find a panacea, “golden rule”, or even a shortcut. It’s counterintutive that this is my first point because below I basically go into my own spiel about what you’re supposed to do, but I’ve found that every hard situation is unique in is difficulty, and there are no easy playbooks or advice to follow when you feel like you need it the most. Tim put it well when I talked to him about this. “I don’t ask for advice anymore. I ask for someone’s experience and figure out what’s relevant for me.”

Growth Hacking and SEO

A big part of how we got our initial traction was thanks to our efforts to continuously find hackish ways to distribute our product. In the beginning, we built Hypemarks profiles for celebrities for them to promote on social media. Later, we integrated TINT into the Wix app market when it first opened, piggybacking on its growth. The biggest traction-creating boost was when I created keyword-specific landing pages and pointed our product’s embed backlinks to them, catapulting us to the front page for searches for “instagram widget” and “twitter widget”. Unlike writing code, with growth hacking, effort is not closely related to impact on a project-to-project basis. It’s about experimenting as many channels as possible and seeing what sticks. I’m grateful to have had the opportunity to exercise my SEO skills while at TINT as well. I’ve found that organic search is one of the most underrated, least understood areas for digital marketers.

Solutions > Products

When we first built Hypemarks, we took a product-first approach where the end user’s problem was secondary to our own excitement about the idea. Luckily we were able to pivot in time to not run out of money, but for the next company, I’m going to spend more time trying to understand a customer before jumping to build a product.

Never compromise on hiring

One of the most valuable things that can’t be described in a blog post but must be learned first-hand is the skill of evaluating how competent someone is at their role. In the beginning we as founders had zero experience in this area, so it took us a couple of years to get okay at this. Looking back, the biggest variable in our company’s success (after product-market-fit) was who we hired. We got incredibly lucky to have attracted and retained certain people. These people were classic “multipliers” who were able to go beyond their role and amplify the efforts of the entire team. On the other hand, we also had our share of mishires who added years to reaching our goals. Unfortunately if you’re a new grad starting your own company, there’s no way out of this issue, you just have to fail at it and learn. Otherwise, this will be a function of the quality of the teams you have worked on.

Self care

Being a founder is lonely because of both the pressure to exude success and the difficulty in connecting with others who have been through a similar situation. There were times when I felt hopeless. We were lucky that with 3 founders that there was some redundancy and it almost never occurred where all three of us were hopeless at the same time. Being proactive in building a support network within our organization and outside of it was one of the best things we did to stay healthy and productive.

Good Management

For a period of time before 2016, we thought Holocracy, flat structures, and manager-less environments were superior to more traditional org structures. We quickly learned that there’s a reason why people have been doing things a certain way when it comes to organizing people. I’m sure more wealthy organizations can buy more talent to make this work, but for TINT, a bootstrapped startup consisting entirely of inexperienced millenials, it became inefficient fast.

One person can change everything, but everyone should be replaceable

The usual saying is “everyone is replaceable”. But there really are certain special people who are so rare that they may as well be irreplaceable. Building TINT helped me understand what the threshhold of replaceability is, how to evaluate the tradeoffs of making a keep/cut decision, and to what lengths to go to keep people. In general, our instinct at TINT was to keep compensation relatively flat and help B and C players at the expense of rewarding A players, and although it helped us create some level of camaraderie, it also hurt us in many ways. We had many A players leave us earlier than they needed to due to this culture. Next time I will better understand tradeoffs of creating a more “cultivation”-focused company culture.

Don’t sign a 4 year lease on the basis of a growth projection

This one seems dumb, but I had to put it in here because it’s one of our most painful lessons. In 2015 we were rapidly growing, and projecting our rapid growth into the future, we saw that we would easily have the budget for a much larger office. At the time, we justified our move by saying we would be more productive as a team with a better space, but looking back, a 4-year commitment was an unnecessary commitment that caused us to depend financially on a growth projection that never materialized. Not making that mistake again!

Special early-company things

There were a few important things that we did early on in the company that we would not have been able to do later. For example, making our salaries transparent and based on a formula. Or making our cap table transparent. Another example was when we created a self-improvement program that eventually became a culture-defining company tradition with high employee participation and buy-in. I’m thankful that didn’t miss the window for doing these special things. It’s important to identify those special things that you can only do when you’re a small team that the organization can grow into as new team members are added on.

Good Memories

Good Memories

Besides all the lessons, there are also many good memories that I hope to keep forever. Hackathons where we built eye-tracking social signage. Getting lunch with the engineering team in the South Park every day. Retreats in grand mountain houses. Rallying together in times of company crisis. Meeting customers who love our product. Meeting random people who have used our product. Seeing the product randomly out there in the world.

And the relationships. TINT helped create friendships and professional connections that people will take with them into the future.

So yeah, it’s been a wild ride. And there’s a lot to be grateful for, even the bad stuff.

The ride has exceeded my expectations. I just had no idea that this is how TINT would turn out when I met Tim. To describe how much this TINT experience has exceeded my expectations, I will now indulge myself in writing a brief description of my life as it relates to this company:

Humble Beginnings

First Computer Sometime in the mid 90’s our family got our first computer (the photo above is the model our family got, a Power Mac 7100). I remember learning about the Internet, loading a webpage for the first time, and being amazed that anyone in the world would see the same page if they typed the same thing into the address bar. And not only that, but anyone could create pages for whatever they wanted, even me! But unfortunately after asking my parents to help me set up a web page, they said that it costs money and even if they were to pay money to let their 8-year old dabble in web things, they wouldn’t know how to do it.

Screenshot of Angelfire page

So, I aged through my regular milestones, and later on I learned basic HTML/CSS by customizing my Neopets shopfront, setting up an Angelfire page of strange pre-adolescent musings, and modifying my Blogger template. My dream job in middle school was working for Flickr as “PHP Engineer”, but it was seemingly totally unattainable. I saw some PHP when I clicked on the wrong button on Wordpress and it was intimidating and gibberish-like.

Screenshot of Robotics Homepage

In high school I was part of the robotics team, but I didn’t do any robot programming. I was embarrassed to try when there were already other kids who knew how to do “real programming” so I worked on the Public Relations team where we focused on putting together marketing material to promote robotics. Brochures, essays, an animation, and a website (screenshot above).

When it came time to choose a major for college, I took my dad’s advice: “If you aren’t talented at anything, you should be a doctor because you get paid a lot and all you have to do is memorize things.” So, I entered college as a Pre-med student in biomedical engineering. I tacked on a minor in Computer Science because I still had hope of working at Flickr. Who knows? I kept my expectations low. Especially with so many other kids with AP-CS classes.

Junior year, I started to have second thoughts about going into medicine. My doubts stemmed mainly from how stark the difference was between the attitude of students in CS vs Pre-med. I remembered my first Pre-med “study session”, and being surprised that it ended up being a “copy session” where most of the students were looking for another student’s homework to copy. Afterward, I had the crappy feeling of being used. Another negative experience that comes to mind is how effed up I felt about the Pre-med honors society really just being a o-chem test-bank society.

The experience on the CS side was different. We worked on team projects where for the most part people worked together to solve problems collaboratively. So I figured, if these are the kind of people I’m going to work with for the rest of my life, I’ll take the chill ones. I dropped Pre-med and switched majors to focus on CS full-time.

After switching majors, that’s when I first discovered Hacker News and started learning more about the startup scene.

The Start of Something

When I met Tim, it was through my ex-girlfriend Pauline, who went up to him to ask about planting more trees on campus. Tim was in Student Government, part of the Environmental Committee. Tim couldn’t do anything to help, but asked her if she knew anyone in the engineering school who could help him with his idea. She did, and that’s how my relationship with Tim began.

Screenshot of email with Tim

We worked out of a student apartment, meeting after class and staying late into the night. This is embarrassing to admit but imagine the most wantrapreneur college students hunched over our laptops listening to The Social Network soundtrack on repeat. That was us. Listening to that soundtrack still brings me back to those uncertain days.

That summer, I managed to get an internship at real tech company, Yahoo! Out of the 30 companies I applied to, I got accepted to 2 (Yahoo and Adobe). And was the 7th pick at the one I joined (shoutout to those 7 people who decided Yahoo wasn’t for them!). I learned enough web development at that internship to be able to come back senior year and actually contribute to Tim’s Hypemarks project.

All of this life-history summary is to say that I never expected to be able to have the skills and knowledge to go off and help create a product and organization as substantial as TINT. Even though 2016-2018 were hard years where we weren’t able to grow the business, I am still incredibly lucky to have chanced into the opportunity to achieve my dreams.

I am really lucky.


There is just too much gratitude to express.

Tim Sae Koo

Tim - I hope you are able to take the break you need after TINT because you deserve it. People say shit rolls downhill but I’ve found that it rolls equally uphill. When all the easy decisions have been made by others, the hardest ones are the ones you had to face. You have unfailingly looked out for the best interest of the team and company and that’s the most anyone can ask for in a leader. “It’s not about the idea, it’s about the team.” That’s what you said to me when I was on the fence about joining you after graduating. I’m lucky to have trusted you.

Ryo and Nik at Leavey Library

Nik - It’s hard to believe that we met in a library basement in college, and have been working together almost daily up until today. What a pleasure it has been to work with such an ambitious and hard working person like you. Someday I will search google for “sean parker of india” and see your name as the first result. Thank you for having my back, and also being outrageously photogenic and letting me take countless pictures of you throughout our TINT journey.

Hypemarks founders






The TINT Team - I’ve been lucky enough to work with more than 60 teammates while at this company. Each brought their unique skills to the table to help us advance the company to this exit. I’m going to miss being surrounded and inspired by such a talented team. I’ve absorbed so much in the experience of working together, and I have also set wildly higher bars for performance in every degree, whether that’s programming, design, sales, or support. Can they code as well as Dan? Ship as well as Brett? Sell as well as Kelly? Or organize as well as Jess? These are questions I’ll be asking myself in my future roles. The journey has been tumultuous, but I hope that y’all were able to grow from the experience too. For the continuing team, the gratitude extends into the future. The brand that we’ve worked so hard to create now rests with you.

Blue Apron

Our Customers - Where would this venture be without our customers? I have my personal favorites. Greg from Mambo Media, thank you for being willing to Gchat late at night and give us product feedback in our early days. Nasdaq for putting TINT on the Times Square jumbotron on our team trip to New York. The Sakura of America team for the free boxes of Pigma Microns that powered all of my analog writing at TINT. Kayla at Blue Apron for always being down for a product feedback call. Purdue University, I never thought the university I grew up next to would end up being a customer! And Bob Harrington and the Orange Department at Specialty Produce for being our biggest customer champions.


Monica - Thanks for being the behind the scenes “Director of HR” when it came to the plethora of people challenges I faced at TINT. You always have a thoughtful perspective that reflects your ability to consider everyone’s needs and wants. I am very lucky to have met such a smart peach.

Team TINT in front of Idealab

Idealab/StartEngine - Thank you for believing in us from the very beginning. We really didn’t know what we were doing back then, but you helped us get off the ground and we wouldn’t be here without you.

Zen at TINT

Zen - You deserve a special shoutout for being our very first employee and for the inspiration you brought to our team. I still follow your mantra of “motion inspires emotion”, and attribute our initial success to your insistence that we switch all of our passwords to “100kMRR”. I don’t know why we stopped doing that.

Gokce and Prannay at Yahoo Gokce and Prannay - Thanks for being my mentors during my Yahoo! internship, and teaching me that “There is no company, only a team”. The technical skills I learned from you guys were what gave me the confidence to start my own thing. I even got to work on an improvement to Flickr at a hackathon! That was a great summer.

Screenshot of Daily Brink

Gary, Jeremy, Dani - Thanks for bringing me on as a “webmaster” for my first technical project of any merit. Daily Brink was the project that got the attention of my eventual manager at Yahoo!. Looking back, it’s pretty impressive how much content we put together.

What’s Next?

There are a couple of mantras I’ve followed through the TINT journey that I plan on applying after the 90 day transition period:

  • “Keep doors open” - I believe that my optimal path to achieving success is to create opportunities and see what happens rather than picking an end goal and rushing to it.
  • “Everything happens for no reason” - The funny thing is that Tim has an arm tattoo that has the exact opposite of this mantra. I don’t bring this up in front of him because I don’t want to invalidate his world view, but I find it awesome that regardless we’ve always worked well together. Back to the mantra, I think that serendipity plays a far larger factor in life than is commonly acknowledged.
  • “Do your best” - I’ve always felt that doing your best is the easiest way to avoid regret. The concept is interesting to me because it doesn’t necessitate that you do “the best”, just “your best”, and begs the question “what is my best?” which leads to the definition of personal best, which is how growth is catalyzed. I’ll be doing my best to take the energy that was being focused on the company, and focus on myself and finding what’s next.

I am working full-time on transitioning the company until the middle of November, but after that, I would love to find another team of people trying to build a SaaS company from scratch and give it another go, so I’ll be looking around for people who would be interested. If you know anyone who’s looking to collaborate on a project that would benefit from a growth hacker / front-end developer, let me know!

With #tintlove,

  • Ryo

Cofounder photo

Using Selenium and ECS to Create Reliable Rendering on Signage Systems

The Problem

My company, TINT, produces dynamic social displays for digital signage (among many social media related products). If you’re walking through a mall and you see Instagram photos show up on a kiosk screen, it could be us, especially if it’s a Westfield mall. Our product is built using web technologies (HTML/CSS/JS) and is rendered through a web browser.

Traditionally, we have relied on the browsers supplied by the signage company vendors, such as Broadsign, Brightsign, and FourWindsInteractive to render our content. However, this often results in performance issues because the hardware isn’t powerful enough to render smooth animations in a browser, or the browser is outdated and difficult to support.

The Solution

My approach in tackling this was to remove the unpredictability of the signage system’s browser, and use a browser running on a server to render a video that can be delivered to the signage system. After all, what kind of signage system doesn’t support video? After doing some research, I found that most signage systems can download a video file from a URL and cache it locally, syncing it occasionally to keep it up-to-date. This is usually done through Media RSS, or MRSS.

Using video instead of HTML has a number of advantages, including:

  1. Reliable playback during network instability
  2. Increased compatibility with older hardware/software
  3. Consistent animation performance
  4. Easier troubleshooting

The tradeoffs are that:

  1. The dimensions of the screen must be known beforehand
  2. There is greater delay from when content is posted on social media to when it is shown on the screen

For most customers, the advantages outweigh the disadvantages, so I decided to move forward with the video approach.

The only thing I had to do was figure out how to create automatically updating videos from webpages in a simple, but scalable way. Unfortunately, there aren’t any off-the-shelf services that provide this kind of thing (startup idea?). However, after some digging, I came up with a creative way to do it myself:

First, I found Headless, a Ruby gem that creates a virtual X screen and records videos of Selenium test runs. I used that to create a simple script to create videos of websites. Through trial and error, I figured out which flags Chrome requires to create a fullscreen video:

Now I had to find a way to take this basic script and scale it up to be production-ready. I decided to use AWS ECS and Docker since it is a simple way to wrap environments around tasks, and have them run on a schedule or in parallel. I thought about Lambda, but AWS Lambda doesn’t support ruby, and I wasn’t sure that Lambda was meant to handle a task as resource intensive as rendering a video from a chrome session. To store metadata about the videos, I used MySQL, and Sinatra to provide an endpoint for signage systems to request videos from.

A flow chart of the system:

TINT Screencast Microservice - Flow Chart

Here’s how it works:

  1. The signage customer provides 4 inputs to an internal tool: URL of the social display, height/width of the screen, and the duration of the video
  2. The tool returns 2 URLs which represent the link to the video file and a link to the corresponding MRSS feed
  3. The customer uses either the video file or MRSS feed link in their signage system (depending on what their system accepts)
  4. When the signage system first requests a video, it receives a response that says “video is being generated”, while the service starts a ECS task which generates the video
  5. Once the ECS task finishes, the video is saved and the video becomes available to download
  6. The signage system periodically requests the video to download, so the second time it makes a request, the video is downloaded, then played on the screen
  7. In the background, an ECS scheduled task iterates through all the videos that have been created to determine whether any videos need to be expired (I expire any videos that have not been requested in a day) or refreshed (I refresh videos every 30 minutes)
  8. Voila:

The system still has some imperfections which I haven’t gotten around to addressing, which include:

  • Autoscaling - I eventually want to use AWS Fargate to handle autoscaling of containers. Right now all of our microservices share resources on our ECS cluster, and I have to manually throttle my video microservice to balance resources. Unfortunately, as I write this Fargate does not support the shm_size parameter, which Chrome crashes without.
  • Unnecessary Proxy - Currently the Sinatra server proxies the video from S3 to keep track of when videos were last accessed. However, I could be parsing S3 logs to do the same thing, which would reduce latency and infrastructure costs in delivering the video.

Overall, I’m happy with how this project came out. It solves a problem for our signage customers and gave me a chance to creatively re-use Selenium in a way that I imagine its original creators didn’t envision, to render visualizations for in-store screens:

TINT display in Westfield SF Centre

Additional Reading

My Experiences with Professional Coaching

It’s after work, before the holidays in 2016 and inside the Lever office in downtown San Francisco, I’m hanging out with my friend Jen, catching up and venting about work. I’m telling her about some hard decision that I didn’t have enough validation on when she suggests, “You know, one thing that’s worked really well with our team is professional coaching.” She explains how she helped her team find the best coaches, the benefits of coaching, and referred me to Christina and Blue Door Partners.

So a week later, I’m dialing their number, not knowing what to expect but open to being challenged.

“Hiiiiiiiii”, says Christina. “Hey, this is Ryo. So, what happens now?”

Fast forward a year, and I’ve been able to work on a bunch of longstanding challenges like,

  • Saying yes too much
  • Taking work too personally
  • Not giving people enough space for their own feelings
  • Not being assertive, authoritative, charismatic, inspiring, vulnerable, or strategic enough
  • How to be a more supportive partner
  • Upcoming challenging social situations
  • Recovering from breaking someone’s trust

Looking back at it, it’s hard to believe I covered all of that. When I started the coaching experiment, I didn’t expect much. But I ended up getting a lot out of it. So, I’m writing this post for anyone who hasn’t explored coaching as an option for personal improvement because I didn’t know what to expect when I started.

Before going into what coaching actually involves, I admit that it seems silly. But when you pay a couple hundred dollars to work with someone to do silly things, you start to pay more attention to both the task and its intended value.

The initial coaching work consisted of exercises like:

  • Inner Voices - Have you ever lost control of your inner monologue? This exercise involves writing a paragraph describing the inner voices in your head. A Saboteur voice that comes up whenever there’s uncertainty. A Practical voice that focuses on what to do next. An Appreciator voice that comes up to reflect on positive situations. etc. These voices are then revisited throughout future coaching sessions to improve recognition and understanding of how you feel.
  • Strengths/Weaknesses - Another part of understanding yourself is appreciating your strengths and admitting your weaknesses. Writing a paragraph about one’s own strengths, and then acting them out in a physical motion representing the strength, and doing an investigation on weaknesses can bring themes to recurring challenges.
  • Improv - How awkward is it to do improv exercises alone and over the phone in a glass conference room that all your coworkers can see and hear into? Very! That’s why I take my calls in the back room. Based on the value I got out of the coaching improv work, I even ended up taking a class at a local theater, BATS.

From there, the sessions followed a common pattern.

  1. Biggest Challenge - The beginning of every session started with a question: “What do you want to work on?”. There’s a significant chunk of value attached to having someone ask you this question. After going through a couple sessions, I realized that in the rush to get things done, it’s easy to ignore the harder challenges that have no easy answers. But they don’t go away. They’re on the back of your mind, collecting in a pool which eventually gets distracting, irritating, then unavoidable. And having someone ask you that question helps empty that pool.
  2. Exploration - Going deeper into the topic through a series of Powerful Questions. Alternating between questions, and having Christina reflect back on me her observations of how I answer. Having a great coach allowed me to have a mirror on both my external projection and internal perception. A coach is supposed to help you find your own answers (although I did from time to time get straight advice, which was nice too).
  3. Homework - identifying actions that can be taken in the next week to either explore or improve the issue. The homework would be reviewed at the beginning of the next session. The pressure to actually follow through with the homework was valuable.

Every 2 weeks, we’d have a 30-minute session following the above structure. The meetings felt like a pocket of intense inner reflection, in a sea of external responsibilities and priorities. And having the support from someone you know you can share everything with feels great.

If you’re interested, Blue Door Partners offers individual coaching in addition to Pop-Up Coaching where they come on-site to run individual coaching sessions for companies. We’ve had a great experience offering the service to our employees as a perk to improve wellness and professional growth. In addition, it’s a smart idea to set up initial introductory sessions with a couple coaches and see who gels with you. Yelp is great for this.

Generate Leads with a Free Product

Instagram Winner Picker leads per day

The above image is a graph of the number of leads generated from a small marketing tool that we created at TINT. Everyday, about 18 marketers use our tool to pick a winner for their Instagram campaign. These emails are valuable to us because anyone who is wrapping up an Instagram campaign is a potential customer.

Are you a team that is lucky enough to have some extra technical talent who can crank out a fun side-project during a hack day? If so, then here’s what you need to do to get leads with a free tool:

1. Find a Customer Problem

Muriel eating a cupcake

Find a problem your customers are having. Here’s how I did it: I was getting lunch with my coworker Muriel, and she mentioned that she was having a hard time picking a winner for our Instagram contest. It was a real pain! There just wasn’t a good tool to pick a winner. She ended up searching Instagram for the contest’s hashtag, closing her eyes, scrolling down, and randomly choosing one of the images.

At that moment, I realized that I had stumbled on a perfect problem. A perfect problem is highly targeted: Something specific enough that you know the people who have this problem are your customers, but universal enough that it’ll be a popular search. Speaking of search, the next step is to…

2. Identify the Search Query

Google Keyword Planner

The next question is how they’ll find your tool. Most likely, they’ll be searching on Google. I asked Muriel what she searched for when she was looking for tools. She said, “Instagram winner picker”. Then I went on a walk outside and thought about what I would search for if I were a marketer looking to pick a winner for my contest. “instagram contest winner chooser”, “pick hashtag contest winner”, and “instagram giveaway generator” were some of the different keywords that came to mind. Finally, I went to Google Keyword Planner to type my ideas in and figure out which keywords were actually being searched for. I picked the top ones, and used that to determine what keywords to optimize the tool for.

3. Build an MVP to solve the problem

Luckily, I’m a developer, so it was easy to find someone to build my idea. But, if you need to recruit someone from the engineering team, you can still make your tool happen.

Some things to keep in mind:

  • Make it look great - A good design can keep people on the site longer, and increase the chances of interaction, which will boost SEO.
  • Make it fast - Page load speed is an important factor in bounce rates, especially when people are looking for a quick tool to solve a specific problem. Improve your ranking by making sure load time is optimized.
  • Make it simple - In our experience, the simplest landing pages perform the best. Make sure it’s brain-dead obvious to someone landing on this page that it solves the problem that they are searching for. Our Instagram Winner Picker tool just has a single button, “Get Started”.

Instagram Winner Picker Screenshot

4. Re-evaluate and iterate every 2 weeks

Although this step is easy to do, it’s also the easiest to forget. First, create a document to track all the details of your marketing experiment. Set calendar events when you release the project in 2 week intervals to:

  • Look at Google Webmaster Tools to see how your rankings are doing
  • Figure out why you might be ranking lower than expected, and build backlinks to your app that can help it rank higher


Product marketing search results

As you can see above, our tool now consistently gets about 80 clicks a day, resulting in about 18 emails a day of marketers who are running Instagram campaigns. Nice.

What is a company culture?

“What is culture and how do you start to define it for your company / startup?”

I ask myself this question often. And I answer it by saying, “A company culture isn’t a list of perks. It’s what people do when their boss isn’t looking. It’s how people make decisions, the norms and habits taken for granted, and invisible relationships that shape our workplace.”

But, how do we define OUR company culture? That’s a harder question.

Greater minds than mine have taken a stab at it. They’ve put together ways of categorizing corporate cultures through surveys and models. Using vocabulary to shine a light on what continues to be an elusive mystery.

Last year Lukas, our PM and go-to person for all miscellaneous knowledge, introduced me to the Schneider Culture Model. In 1999, William Schneider took it upon himself to try to build on previous works to create a model to describe how organizations make decisions.

Schneider’s model divides companies by how they score on two axes, one axis is the “personal vs impersonal”. Are decisions made in a detached and objective way that focuses on the company, or are they personal, taking into account the individuals involved? The other axis is “actuality vs possibility”. Are decisions made with a focus on what we can actually accomplish today, or the possibility of tomorrow?

Based on these two basic ideas, he divides corporate cultures into 4 types:

  • Collaboration - “We succeed by working together”
  • Control - “We succeed by getting and keeping control”
  • Competence - “We succeed by being the best”
  • Cultivation - “We succeed by growing people who fulfill our vision”

Schneider Culture Model

What I like about this model is that there isn’t a “good” or a “bad” culture. These are all different types of cultures that succeed in different environments. There are examples of Great Places to Work™ in each of these categories. For example:

  • Collaboration - Delta, UPS, Valve
  • Control - Proctor and Gamble, Marriot, US Army
  • Competence - Microsoft, Citibank, Pixar, Netflix
  • Cultivation - 3M, Zappos

Most people would be excited to work at any of these companies, yet they occupy totally different spaces in the model. This is important to note! Especially since it’s easy to get distracted by arguing, “oh, this kind of company culture is better”. Nonsense! Instead, I want to figure out what our company culture is, where we want to be, and then find ways to take us there.

So where does TINT fit in the chart? Last year, I had the company sit down and take a 20 question survey to figure it out. I asked the team, “Where do you think our company is today, and where do you want it to be tomorrow?”. And this year, I did the same thing. Here are the results that I got (You can use the checkboxes to explore the data):

Some initial observations:

  • People > Company - We are more people oriented than company oriented. This makes sense, as the company has produced policies that give employees more flexibility and freedom.
  • Possibility > Actuality - We are slightly more possibility oriented than actuality oriented.
  • More Actuality in 2016 - Since 2015, there is double the number of people in the “Collaboration” vs “Cultivation” quadrant, suggesting that we have become more focused on the present than the future. This makes sense, as we’ve gone through some harsh realities in the past year making it essential for us to focus on what we can do right now.
  • Cultivation - According to the results, we succeed by growing people who fulfill our vision. Not surprising, given that our vision statement is to help our team and customers achieve their potential.
  • A Common Future - If you compare the 2 predictions of an ideal future, you will see that the “where do you want to be in the future” has not changed, and that we seek to be in the Cultivation quadrant.

Screen Shot 2016-11-22 at 1.41.40 PM.png

What do I want to do based on these results?

  • The Future - From the survey, we see the team expressing a consistent ideal of being more in the cultivation corner. So, let’s figure out how we can uphold what got us there in the first place!
  • Self Improvement Program - At TINT, we have a program that’s focused on being the best you can be, where we can expense up to $100 in anything related to self improvement, as long as you complete a monthly challenge. The results from the survey highlight the importance of this program at our company, and it lets me know that I personally need to continue putting effort into participating and encouraging others to participate in the program.
    • Advisors - This tells me that I should continue to seek highly skilled advisors to help cultivate our team. Since we’ve brought her on, our sales advisor Bridget has helped us tremendously both with the co-founders management skills and also for our sales process.
    • Recruiting and Onboarding - I want to incorporate this framework into our recruiting and onboarding process to tell candidates and new hires what our company culture is and isn’t, and show them how they can contribute. The best way to maintain a culture with new employees is education, and now I have a vocabulary to teach!
    • Everyday Spirit and Compassion - How do we make a more spirited and compassionate workplace? And how can we introduce more change within our everyday routines to take us closer to a workplace that cultivates others? These are questions that I now need to focus on.

    After doing this exercise, I think it would be even more valuable if other companies joined in to see how they see themselves in terms of culture.

Your Turn

Do you want to do the same experiment for your team?

  • Step 1: Copy this Schneider Culture Survey google form
  • Step 2: Use the results, and this google sheet as a template to figure out X and Y coordinates from the results
  • Step 3: Reflect! Some questions to ask yourself:
    • Do I agree or disagree with the results, why?
    • What policies and processes at the company reflect your culture quadrant?
    • How dispersed is everyone’s assessment of the organization, and what does it mean?
    • How can these results help the team better express the company’s culture?

If you do go about doing the above, book a time to share your results with me. And even if you don’t, I’m happy to chat about anything related to company cultures in startups, I enjoy connecting with like minds on the topic.

Additional Reading

Tough Times Don’t Last But Tough Startups Do

I closed my eyes and counted to three while in an empty and dark conference room. I told myself that I was ready to tell my friend and coworker that I would be laying him off. I needed to shut off my emotions. I needed to close the valve on my feelings, and close it tight. I opened my eyes, and walked downstairs. I tap my friend on the shoulder, “Can we talk?”, and we move into another conference room. Tim, our CEO, is already in the room, ready to co-pilot the meeting with me. I close the door tightly. The three of us sit in a distanced triangle. There is a long pause.

“I need to tell you something important.”

I present the details that need to be presented: The reasons, the timeline, how long benefits will last, severance, next steps. I’ve seen Tim do this before, and I’ve been the co-pilot. It is much easier to be the co-pilot. All you have to do is pay attention and fill in any gaps that you notice. This time, I’m driving. I am making eye contact, fully aware because of the adrenaline. At the same time, distant because of what I told myself in the dark conference room. I dutifully complete the agenda.

“Out of all people, I would have expected you to be more empathetic about this.” says my friend.

All of a sudden, I realize how deeply offensive I must seem to him, to be so cold. Suddenly, the valve in my heart twists open, and all of the feelings start flooding out: The disappointment, the guilt, the anger, and sadness. My eyes begin to water and my throat closes up. I try to speak, but can’t. I hoarsely force a couple words out, but stop mid-sentence. Tim notices, and picks up from where I am stuck, and the meeting continues. How did it get to this?


On August 24, 2015, the TINT Fundraising Committee was formed to decide on whether or not we should fundraise or to continue to bootstrap our own growth. In the traditional TINT fashion, we democratically elected a 7 person committee, and set up regular weekly meetings. Just one month before in July, we had closed our biggest deal yet.

One of our largest clients wanted to display their social media using TINT, and they committed $120k+ to us. We felt like the world was our oyster as we watched the monthly revenue soar to a spectacular $640k for that month, a huge difference from the previous highest revenue month of $432k.

The committee met weekly for the month of September, and developed a financial model to predict how aggressively we could spend, and when we could start seeing returns from our spending. After much back and forth, the committee coalesced around a single model that highlighted everything from a hiring model to our sales cycle. The model suggested that if we hired aggressively, we would be able to expect to see equally aggressive revenue growth after the negative effects of the slow winter season ended. The model also suggested that we would be able to stay safe even without outside funding.

Based on these suggestions, on October 7th, the committee sent out an email to the team. TINT would “delay fundraising and pursue a course of creating a relatively more aggressive hiring/spending plan. This plan will be focused on driving revenue growth over the next 6 months and measuring the incremental impact of marketing and outbound sales on our revenue as well as increased product and operational expenses.”

However, the committee was not completely blind to the risks. The email from the committee continues: “Admitted Risk: We realize there is a chance that increasing our spend could lead us to no longer being profitable and being forced to fundraise in a situation where we are burning cash in 2016. This is a calculated risk we are taking based on our projections which show we will not end up in a situation with significant burn. Excited to put some gas on the fire and prove out some of our growth assumptions!”

On December 3rd, 2015, we still felt that we were on track, and the committee sent out an update: “I am happy to say that we are overall exceeding our goal, despite being slightly below numbers for November.” The email told the team to anticipate 10 hires before next April.

The graph below shows what we saw when that email was sent. According to the plan, we were still on track. The X-axis is set up such that “4” represents November. On closer examination, you will notice that the revenue line (red) jumps up significantly at 7, 8, and 9, which represent February, March, and April. That’s when we’d start to see the returns from our investment. The model predicted that during those months we would see revenue climb to 580, 620, and 650. We could do it right? We did it in July!

ryochiba.hackpad.com_W9y0E5gwF4h_p.419835_1463877955182_Screen Shot 2016-05-21 at 5.41.31 PM


From September 2015 through February of 2016, we brought on 11 full time employees. 4 of them were international and were previously contracting. Before the growth plan, from April through September, payroll averaged at $234k. From September through February, payroll averaged $293k, growing a whopping $60k.

ryochiba.hackpad.com_W9y0E5gwF4h_p.419835_1463959619750_Screen Shot 2016-05-22 at 4.26.29 PM

In addition, we upgraded our digs. We went from paying $8.5k on a 3000 square foot office to paying $35k on a 10000 square foot office. Total office related expenditures climbed from a $28k in January to $62k in February. The cost of moving offices was even worse than we anticipated because we were not able to find a sublessor for the old office. Given the bullish office real estate market in San Francisco, we expected to make a healthy profit of 8k from our old office. Instead, we were experiencing an 8.5k loss, as we continued to lower the price each month, desperate for a company to move in. Ouch.



ryochiba.hackpad.com_W9y0E5gwF4h_p.419835_1463881015319_Screen Shot 2016-05-21 at 5.14.15 PM

In January, we hit our target of $450k. However, the good news did not last long. In February, we missed the 580 target significantly, and only made $436k. By the middle of March, it was clear that we were not going to hit $620k, and it was becoming increasingly obvious that we would not hit $650k as predicted in April. If we were to project more conservative revenue expectations forward, our bank account would look dangerously low.

How low? Well, let’s take a look at the projected health ratio. The health ratio is a number that represents the general health of the business and is simply the business’ bank balance divided by monthly core expenses. Anywhere below 1.0 is dangerous for the business, because once you dip below that, it is possible to not make payroll if revenue for that month does not arrive in time. The projection showed that our health ratio would dip to an alarming 0.6 by the middle of the year, and by the end of the year we would be bankrupt. Simply put, the model put us in an existential crisis. Compounding the necessity to make a decision was a team retreat that was scheduled for the beginning of April. If we were going to make drastic cuts, it would be best to make them before the all hands team retreat.

ryochiba.hackpad.com_W9y0E5gwF4h_p.419835_1463963350649_Screen Shot 2016-05-22 at 5.27.41 PM

The day things came to a head was March 23, 2016. It was decided that afternoon among the co-founders that emergency planning would need to take place, and the co-founders met for extended periods between the 23rd to the 27th, scrambling on Saturday and Sunday to come up with a plan to both reduce expenses and to effectively communicate the reductions to the team. The two plans we needed to decide between were to either Cut Shallow or Cut Deep. The Cut Shallow plan involved cutting around $30k in expenses, and then working on immediately raising a $1-2M buffer round of funding. The Cut Deep plan involved cutting $50k in expenses, and then working on reaching profitability before considering raising money. After debate, we decided to go with the Cut Deep plan because it reduced the chances of a second cut, which would be devastating to morale and our long term growth. From there, we worked to make the impossible decision of which employees would be cut. Ultimately, it was a decision that was based on what would make the least drastic impact to the business.

The decision making process was brutal and ugly. It felt awful. It involved putting everyone’s name on the board and going through them one by one, and going through the impact each person would make on the business if they were laid off. After getting through the list, we went through the list again. And then we went through the list yet again, one last, painful time. Each time, we pushed back against each other when we disagreed and identified areas where we needed to collect more information. We wished we had the experience to be able to make an optimal call. Given the constraints given to us, we did the best we could, but we still walked away disappointed that employees would have to be cut for the mistakes that we had made as the leadership team.

Stakeholders were called in the weekend before the announcement to individually meet with the cofounders. They included some early employees, and continuing employees that would be affected the most. The cofounders shared the components of the plan that applied to them, so that they could gather feedback and to prepare them for Monday. By Sunday night the cofounders had a deck, a timeline, and a sleepless night ahead.

ryochiba.hackpad.com_W9y0E5gwF4h_p.419835_1463963410460_Screen Shot 2016-05-22 at 5.27.28 PM-1


On Monday, March 28, the co-founders proceeded with the layoffs, scheduling meetings with the applicable employees in hour long calendar events whose sole agenda was to let them know what was happening and to deliver the necessary details. The announcement to the team was scheduled for noon. Unfortunately, the last layoff meeting went longer than expected, and Tim had to deliver the news to the team alone without Ryo and Nik. Tim walked the team through the deck. It explained the necessity to make big expense reductions, restructure the company, and implement new processes.

After the presentation, employees were largely in shock. With a number of missing threads, the social fabric of the team was frayed, and walking through the office it could be felt. Adding to the tumultuous day, one of our top performing salespeople announced her resignation shortly after the presentation. It was by coincidence: She had planned on making her announcement on that day the week before, not knowing about the layoff.


It was only in the weeks afterward, that we began to realize the mistakes we had made when communicating the layoffs to the team. The biggest mistake we made was that we confused the difference between a firing and a layoff, which are legally very, very different. Inadvertently, we had created an HR liability for our company, and upon learning this mistake, we immediately worked to make clear that this was a layoff, not a firing. Another mistake we made was that we did not announce who was being laid off in the team announcement, until someone asked for it. That was really the only question on everyone’s mind, and it was against our values to not share it immediately. Yet another mistake we made was not looping in our Operations Manager and HR team before the announcement. This would likely have prevented the other mistakes.

On March 30, just 2 days after the announcement, the team set off for Wonder Valley in Fresno for the team retreat. We usually have a retreat every 6 months to strategize and bond. This time, it would be to repair. Our Operations Manager did a wonderful job of planning the retreat for the past couple months, and the retreat proceeded without incident, smoothly and efficiently. We paddled canoes, brainstormed Q2 strategies, and played cards late into the night. However, even the best retreat would not be able to fully heal the wounds left from losing one’s friends from the workplace. The team came back from Fresno closer than they were after the announcement, but still fragmented, and feeling the weird energy the layoffs brought about.


In April and May we saw a continuation of the aftermath when 2 key engineers announced their resignation in order to pursue their own interests. This hit the team particularly hard because both of these employees represented strong talent on the team.

That brings us to the present. Today, we are still working to handle the situation day by day, leading initiatives to get back to profitability. Until we reach a stable financial state, we will be operating in a mode of scarcity, holding off promotions and our 401k matching program. The scarcity is a painful but important motivator in absorbing the lessons learned.


  • Expect the best, but plan for the worst – We expected the best, and planned for the best. At each step of the way, we leaned on the optimistic side. Our aggressive hiring plan assumed that we would be able to source quality candidates in that time, even though past data showed that it takes months to find a quality candidate. Our office plan assumed that we would be making a big profit from subletting the space. The growth plan projected very, very optimistic revenue growth. We should not have baked as much optimism into our plans.
  • Cut Deep, Cut Once – This was the first word of advice from almost every advisor, mentor, and online resource we consulted before making the decision. Leadership only has one chance to convince the team that the company can be turned around.
  • Fundraising – Fundraising should be guided by an individual who has the most experience in fundraising. For us, that person was Allen Morgan, a member of our board, who should have been brought into the discussion much earlier. Instead, he was informed at the beginning of 2016, months after the committee laid the groundwork for the growth plan.
  • HR – We learned that a firing and a layoff are very different, even if both are based on performance. In the future, we will talk to an HR professional before making big moves.
  • Motivation – After making the announcement, morale was at a historic low. The co-founders felt pressure to motivate the team. However, how do you motivate a team that’s just gone through a round of layoffs? What we learned from our sales advisor Bridget Gleason, was “You can’t motivate people – it’s not your job to motivate people – your job is to provide a great environment where motivated people can be successful”. We learned not to beat ourselves up for everyone feeling awful, and to be patient and focus on what is under our control to create a successful environment moving forward.
  • Doing More with Less – In the months after the layoff, we asked ourselves more and more “What does success look like?” Instead of taking a “spray and pray” approach to our activities, we now spend more time tracking impact so that we can learn how we can do more with less. You can only improve what you can measure.


Screen Shot 2016-06-08 at 10.19.08 AM

Although we experienced the largest setback in this company’s history, we must remember everyday to appreciate how far we have come. We are making steady revenue from a group of passionate customers and have a product that regularly sells itself. The comments our customers give us for our easy to use product and personal customer service is inspiring.

We have overcome challenges in the past. Depression, burnout, breakups, and surviving on the bare minimum with only 3 months of runway left. Each challenge larger and more daunting than the one before. But each time, we have improved ourselves and developed solutions to move forward.

We are now 2 months past the layoffs, and are experimenting with new ways of approaching work. Here is how we are challenging ourselves to improve:

  • Data – In the past, we never got around to measuring what we wanted to know. Now, when we start a project, we are more disciplined about asking ourselves, “What does success look like?” We are more careful about measuring our results and more disciplined about learning from our mistakes. More analysis means faster failing, more learning, and a higher chance we’ll work on what will make the most difference for our customers.
  • Goals – In the past, we took a scattershot approach to what everyone was working on and didn’t provide adequate direction or coordination. We set goals, but they were often forgotten by the middle of the quarter. Now, we have improved how we create goals, spending more time making sure that they are the right size and have strong business value. Also, we have made our goals more visible by adding them to our 1:1 process. By keeping us focused on our long term objectives, we will be able to achieve more with less.
  • Restructuring – Previously, we had 7 department heads for an organization of about 30. This resulted in significant overhead in coordinating all of the heads. We are now dividing up management responsibilities among the 3 co-founders and our sales director, which results in less communication overhead, and more time to focus on customer needs.

As for what the future holds, much is beyond our control: Competitors continue to leave and enter the space, the market evolves at a rapid pace, and customers’ needs change. However, I believe the future is still in our hands. The best team is going to write the best software, sell the best pitch, generate the greatest following.

We are not the typical VC-funded Silicon Valley company. Because we are self-sustaining, we have the luxury of focusing on sustainable growth. And we have an excellent team at TINT, to move us forward on that path. We feel the pressure, but it makes us stronger. Next time, we’ll be more careful about putting gas on the fire.

SF Selenium Meetup Talk

  1. Hi, my name is Ryo and I am a Cofounder and Co-CTO at TINT, a 35 person company that has a green selenium build. I’ve been a big advocate of selenium at our company and I want to tell you how we went from no test coverage to green selenium build and almost gave up on the way.

  2. So, let me give you a quick background. At TINT, we make social media display software. A year and a half ago, we were 5 engineers and were closing deals with our first large customers. This is a picture of one of our first, the mall of Dubai!

  3. The problem was, our software failed on a weekly basis due to our everyday deployments with no test coverage. You can guess that it resulted in A LOT of angry phone calls. With our product, you can only make a couple mistakes before your customers leave. Our company was teetering between failure and success, and instability was a make-it-or-break-it concern. This is when I started on our yearlong journey to a green selenium build.

  4. When we started, our team had no resources or domain experience with selenium. We started out writing Selenium IDE tests, but were not able to integrate them into our workflow because they required so much time to supervise. We switched to ruby selenium webdriver and rspec, and were able to make progress, but we still felt like were not doing things the right way.

  5. We almost gave up. Maybe selenium wasn’t worth all of the trouble after all.

  6. We started asking questions, and here is what got us over the hump. First, we found The Selenium Guidebook / Elemental Selenium by Dave Haeffner, we read this and it allowed us to organize our tests, but more importantly, help us feel confident that what we were doing wasn’t foolish. Secondly, we met Neil Manvar at Sauce Labs through a mutual friend. Neil brought a lot of domain knowledge and more importantly provided emotional support in letting us know that selenium was not flaky and in fact we had written our tests poorly. It just goes to show the value of working your network!

  7. We had no CI server, and were running tests manually. When that got too painful, I embarked on setting up a CI server. For about a month I spent time trying to get our unique Ruby on Rails / PHP environment working on Travis, Circle, and Codeship CI. I failed every time trying to get both apps running on the same server on these CI as a service solutions.

  8. We almost gave up. Maybe selenium wasn’t worth all of the trouble after all.

  9. Luckily, we discovered a couple things that got us over the hump. We stepped back and realized we were using the wrong tool for the job. Instead of using CI as a service solutions, we set up a TeamCity server that allowed us to customize how our environments are set up. Once the build was up and running, we noticed that it was still flaky. We wrote a custom re-run script that re-runs tests that have failed. This change took our build from an unusable 50% flakiness to a usable 10% flakiness. Once we had a consistently green build, we noticed that developer’s weren’t paying attention to it, so we integrated github with team city so that selenium builds would kick off automatically and developers would be reminded that they need to have a green build before merging any pull requests. Turning this on took developer participation from about 30% to 100% instantly. All of these tasks were small things we put off for a long time, but when we finally got around to implementing them, we wondered why we hadn’t done them sooner because of how much value they added for us. And although they don’t relate directly to selenium, they were essential in getting us to use it.

  10. When we started, we had very little developer participation in writing selenium tests. Nobody remembered to write selenium tests with this PR’s, and setting up your environment to run a test was cumbersome. After all, in order to write or debug a selenium test, we would have to shell into a machine, set up a sauce labs tunnel, run our tests, and watch it on the sauce labs viewer. Debugging a selenium test on sauce labs was nearly impossible. We reached a point where maybe there was too much pushback on the team to make adequate integration test coverage a reality.

  11. We almost gave up.

  12. But, we discovered a few key things that got us over the hump. I started nudging people in code reviews and letting them know PRs would not be accepted without integration tests.Others started to enforce this rule and we began to build up coverage. We wrote a script to make it easy to run a selenium test locally with a single command. We set up an unlimited sauce plan to run concurrent tests without worrying about utilization costs. These small behavioral nudges added up in making writing selenium tests a habit rather than a chore.

  13. I want to share a quote from my best friend from high school who is now a software developer at Slalom Consulting. We were hanging out and we naturally started talking about Selenium, and he said “We had a selenium suite, but it was flaky so we stopped using it.” They gave up.

  14. We almost gave up. But we didn’t! We spent a year working on our build on-and-off, almost giving up. And now we’re able to reap the benefits of our green selenium build. The best practices might sound like it wouldn’t make a big difference. My one message to you is: Don’t give up.

Startup Promotions and Equity Grants

  • The problem: Employees who stay with your company deserve to be rewarded with more salary and equity. How do you design a system that is fair, easy to understand, and easy to implement?
  • Our process: We asked friends in the industry to explain how promotion process works in their company and researched online to understand the status-quo for the tech industry. Based on our findings, we identified parts of other companies’ processes that we liked. Finally, we assembled a policy that felt the most in-line with the company culture.

Our first step was to ask our friends. Here’s what they had to say (I highlight the parts interesting to me):


It all depends on performance, very heavily weighted. The most obvious thing they do is to have a set of responsibilities for each level and see quantitative proof that the person meets the expectations of the next level. They do this by discussing among the next to next level guys. The most realistic estimate is 1-1.5 years at lower levels. Hike is subjective, again, by performance. They have a committee that decides the hike. it’s a combination of max pay per level, how good this person is, and how much he gets. As a common trend, they give more bonuses and fewer hikes. Because bonus is a one-time thing and hike is a commitment. I don’t know the qualitative number for hike, but bonus is around 10-12% for normal performance


Compensation is reevaluated every year according to market standards. Promotions are totally merit-based, performance-based, so it depends on the level you are operating on, consistently, for at least 6 months. We want people to be consistently performing at the next level for at least 6 months before promotion. Every 6 months, we have a review cycle. Managers get peer feedback on what the engineer accomplished, and managers from different orgs will review the anonymized engineer, and compare engineers at the same rank to calibrate for impact across orgs.


The employee who thinks he/she is eligible for promotion applies to their manager. Along with this application he/she gets recommendation from other engineers they worked with during the last 6 months. These peer employees write a single paragraph describing what they worked on how that employee did a good job. Once the application is in, the manger sits with the promotion committee and determines the case. A promotion committee is usually 2-3 top senior engineers who evaluate the work and give their opinion. Ultimately its the manager’s decision to promote that employee.


At Salesforce, my title transitions were: AMTS -> MTS: 13 months, 10% increase MTS -> SMTS: 15 months, 8.77% increase Here’s what I think is standard: AMTS -> MTS: 11-18 months MTS -> SMTS: 24 months SMTS -> LMTS: 24-36 months LMTS -> PMTS: 36+ months.


Based on the above accounts and other research we did, we picked out the patterns that stood out to us:

  • Performance Reviews - Everybody does them. People hate them. It seems that they are imperfect in many ways, but are often the best that can be done in tackling the impossible challenge of gauging how an employee has performed. Performance reviews are inherently challenging because:
    • Performance is subjective: People can easily have a different idea of how an individual is performing based on how much they like that person, their visibility of that role, and other non-objective factors. This is especially the case in startups where employees where multiple hats and are continuously redefining their role.
    • Criteria is subjective: It is difficult to set an expectation on what behavior results in a promotion when . Especially in a startup that does not have other employees to serve as data points in a compensation function.
    • Power Dynamics: It leads to a power dynamic where those conducting the performance review have power over the one being evaluated. Which is especially challenging for a startup which values collaboration over competition.
  • Stack Ranking - Also known as a vitality curve, this is the management technique of grading employees based on their individual productivity. Many large organizations such as Yahoo, Amazon, and Microsoft have implemented stack ranking with mixed results.
  • Peter Principle and The Law of Crappy People - The Law of Crappy People (TLCP) states: “For any title level in a large organization, the talent on that level will eventually converge to the crappiest person with the title.” Ben Horowitz has a good segment on mitigating TLCP that boils down to being very disciplined about defining skills at each level.


After absorbing the above research, we finally came up with a rough guideline to handle promotions: Promotions are done every quarter and generally the expectation for promotions are as follows, broken down by the frequency of promotions depending on performance. These frequencies are relative to start date or date of last promotion. Keep in mind that these are guidelines, not hard rules, and does not mean that circumstances outside of the guidelines will not be considered: 3 months - a promotion can be given in 3 months after an employee’s start date or after any promotion if evaluations show that the company would be in a more fair state if the employee was set at a higher multiplier. Promotions do not necessarily mean that your next promotion is delayed by 3 months. 6 months - an exceptional promotion given very rarely, to employees whose performance greatly exceeds expectations 9 months - a great promotion, given infrequently to employees whose performance exceeds expectations 12 months - a good promotion given regularly to employees whose performance meets expectations


Role Differences: The compensation vs. time (assuming constant performance) curves for sales and engineering are different when considering market rate and as such the guidelines may be applied differently depending on the role. See graphic below from https://www.wealthfront.com/tools/startup-salary-equity-compensation Seniority: The seniority of positions affects how frequently promotions are given. It is common for promotion frequency to decrease as the position becomes higher, and this will affect how the guidelines will be applied. Expectations Work smarter, not harder (aka work more efficiently, not more hours). There is no expectation for work outside of regular office hours, and you will not be held back for promotion because you didn’t work outside office hours.


Our system isn’t perfect. After having implemented it and running it for the past two quarters, we have identified challenges that we will want to solve as we grow:

  • No crisp definitions of skill levels at different skill multipliers. This has left us vulnerable to The Law of Crappy People. As the roles in our organization become more specialized, this issue will become easier to resolve.
  • No crisp definitions of responsibilities at different skill multipliers. This has caused employees to feel that there is no clear long-term path for career advancement in the company.
  • High overhead process: Currently the way we decide who gets promoted involves a lengthy representative nomination process with multiple handoffs and a committee meeting that needs to be scheduled around everyone’s busy schedules. This happens every quarter, and takes up a lot of time to organize.
  • Responsibility bottleneck: Right now the cofounders are the ones ultimately making the decision on promotions. This is a problem because as the team is growing, the cofounders are becoming more and more distant from the day-to-day tasks of everyone and less qualified to make judgements on compensation. In addition, our time just does not scale.


If you have any questions or feedback for us on what you’ve read or our promotion guidelines, feel free to tweet me @ryochiba and @tint . Would love to hear your ideas and share what we have learned!


Good Pair Bad Pair

  • A good partner understands pairing is a difficult skill that takes time and effort to cultivate. A bad partner expects others to be great pairs right off the bat.
  • A good partner seeks to understand their own bad pairing habits. A bad pair fails to think about their own pairing habits and only blames others.
  • A good partner brings up mistakes that they make and that others make in a way that turns a mistake into an improvement opportunity. A bad partner bottles up issues they have while pairing and allows the issues to harm relationships and their quality of life at work.
  • A good partner frequently syncs up on schedule and goals and is not afraid to adjust the schedule to make it more realistic. A bad partner does not talk about schedule or goals and avoids adjusting the schedule until the last minute, causing confusion and mismatched expectations.
  • A good partner sets small achievable goals and celebrates achieving them. A bad partner sets one big (likely unrealistic) goal and stresses out about achieving it.
  • A good partner clearly communicates availability. A bad partner disappears for unpredictable periods of time with no notice leaving the other partner to work alone and confused.
  • A good partner uses 2 input devices and 1 computer and avoids using 2 computers unless necessary. A bad partner defaults to using 2 computers and gets distracted / unpaired.
  • A good partner balances give and take in decision making. A bad partner will not be aware of the decision making balance and either be a bunny or Alpha Male.
  • A good partner is aware of skill differences and works to rebalance them by making the effort to be a mentor or a student.
  • A good partner will continue to help with an epic all the way to the finish line and after with deployment tasks and bug fixes. A bad partner will stop contributing to the epic once the feature is accepted and not help their pair get the feature stable and in production.

A good partner focuses on cultivating the following pairing roles

  • Mentor - explains concepts and reasoning with minimal judgement
  • Moleskine - maintains state and checks for edge cases and unexpected side effects
  • Captain - cultivates their own soft skills necessary in effective pairing and cultivating their partners as well

And a bad partner falls into the following bad pairing roles

  • Alpha Male - mainly takes in a give and take discussion
  • Superman - grabs keyboard and starts coding quickly and silently
  • Bunny - mainly gives in a give and take discussion
  • Rodolfo Valentino - never disagrees with their partner’s decision
  • Monk - does not acknowledge the validity of other’s ideas
  • Puppet Master - uses their influence to control the driver’s coding
  • Backseat Driver - uses their voice to control the driver’s coding
  • Auditor - nitpicks small, trivial decisions at the expense of larger and more important decisions

About Drivers:

  • A good driver frequently asks for agreement on ambiguous choices. A bad driver makes difficult choices silently and does not ask the navigator for input.
  • A good driver makes easy decisions fast. A bad driver constantly asks for input on decisions that do not require input.
  • A good driver is aware of the navigator’s focus and will ask for input or suggest trading off if they notice the navigator is distracted.
  • A good driver thinks out loud and communicates intentions and reasons.

About Navigators:

  • A good navigator is continuously sanity checking code. A bad navigator is checking their phone for text messages.
  • A good navigator anticipates next steps and maintains the overall state of the system, reminding the driver about necessary changes that may have been overlooked. A bad navigator is working on a bug while simultaneously attempting to pair, but not contributing to the pair.
  • A good navigator is aware of their own focus, and suggests switching roles if they notice that their focus is slipping. A bad navigator allows their focus to deteriorate and is afraid of suggesting to switch roles.


  • A good pair has built the rapport between them to share a few laughs while pairing and have fun.