Data Models & Code Samples for Gaming Analytics

An Introduction to Event-based Analytics for Freemium Games

In this guide you’ll learn how to track basic gaming events and calculate common gaming metrics like DAU, Revenue, ARPDAU, Retention, and Funnels.

As a game developer, you have the opportunity to track and a/b test just about any touch, tap, and swipe out there, but let’s start with the most important things first. Every gaming company cares about the same high-level things:

  • Do people like this game?
  • How much are they willing to pay for it?
  • How long will they play it?
  • How far are they progressing in the game?
  • Is our user base growing or shrinking over time?

You can answer those questions by tracking just 3 key events in your game.

The Three Most Important Events in Your Game

1. New User Creation - track an event each time a new player is created. This is crucial for retention analysis, because it allows you to identify when users start playing your game for the first time.

Keen.addEvent("create_user", {
    "player_id" : "239408939888", 
  })

2. In-Game Action - track at least one event that happens during every gameplay session. For example, level_start, play_card, attack, navigate, etc. You’ll use this to track engagement, number of unique daily active users, and ongoing user retention & churn.

Keen.addEvent("level_start", {
    "player_id" : "239408939888",
    "level" : 3
  })

3. Purchase (for games with in-app purchase) - track every purchase that happens and the amount spent. Of course, you can add more details on the types and descriptions of items purchased, but we’re keeping it simple here.

Keen.addEvent("purchase, {
    "player_id" : "239408939888",
    "amount_USD_cents" : 800,
    "item" : "enchanted diadem"
  })

Using this data alone we can get a pretty good idea about how well our game is performing. Checkout the common game health recipes below.

New Users

Chart the growth of your game by counting the number of new users that create accounts each day.

New Players - past 30 days

This example app gets 100-200 new players per day.

var newUsers = new Keen.Series("create_user", {
      analysisType: "count",
      timeframe: "last_30_days",
      interval: "daily"
  });

This metric is pretty self explanatory. Examining your new player spikes can help you determine if your marketing efforts are working. You’ll see spikes if your game is featured in the appstore, covered by a great magazine, or suddenly goes viral. This simple chart can help you understand what events have a big impact on your game traffic.

See this gist for an example dashboard that you can make using Keen IO queries like this one.

Daily Active Users (DAU) or Monthly Active Users (MAU)

DAU is used to show the number of people that engage with your app on a daily basis. To calculate DAU, you simple count the number of unique players who did an action on a given day. Below is the formula for DAU.

DAU - past 30 days

This example app has about 300 active users during the weekdays and about 175 actives users on the weekends.

var DAU = new Keen.Series("level_start", {
    analysisType: "count_unique",
    targetProperty: "player_id",
    timeframe: "last_30_days",
    interval: "daily"
  });

How is this useful? This data helps you understand how many players your server needs to support, the audience size your ad impressions can reach, and the number of players you could potentially convince to make an in-app purchase. The rate of growth in this chart helps you understand if your player base is growing or shrinking over time.

Revenue

Chart how much revenue your game is bringing in each day.

Revenue - past 10 days

Looks like revenue is decreasing for this game.

var revenue = new Keen.Series("purchases", {
    analysisType: "sum",
    timeframe: "last_10_days",
    interval: "daily",
    targetProperty: "amount_USD_cents "
  });

ARPDAU

ARPDAU (Average Revenue Per Daily Active User) is the amount of revenue that your game makes per active user. You don’t need to run a separate query for this one; you can simply divide the metrics we’ve already calculated above.

ARPDAU = revenue / DAU

Here’s a recipe for dividing two line charts and displaying the result using the Keen IO viz library.

ARPDAU - past 10 days

This game is making about 30 cents per day per active user.

ARPPU

ARPPU(Average Revenue Per Paying User) is the average amount of revenue that your game makes for each paying player. In order to calculate ARPPU we’ll need to find the number of unique paying users. Here’s the formula:

var payingUsers= new Keen.Series("purchases ", {
    analysisType: "count_unique",
    targetProperty: "player_id",
    timeframe: "last_10_days",
    interval: "daily"
  });

Now we can divide the revenue data we found above by the number of unique paying users to get ARPPU:

ARPPU = Revenue / payingUsers

ARPPU - past 10 days

Last week the average paying player spent about $30, this week it’s $40.

Funnels

A Funnel is a way to show how users are progressing through your game. Funnels are commonly used to analyze how far player make it through a training sequence, or how many levels they make it through in the game.

Funnel for all users who played last week

This example funnel analysis shows us that while almost all users make it to level 8, only about half make it to level 9.

This gist has the code to generate this funnel using the Keen IO JavaScript Library and the Keen IO Funnel API.

Retention

Retention tells you how many users who started playing your game continue to play it over time. Retention analysis can answer a question like “What percentage of players from last week are still playing this week?”. One you know your player retention, you can also calculate churn and estimate customer lifetime value.

There are a few different ways of visualization retention. One is a matrix like this one:

We have a whole ‘nother post on how to do retention analysis like this.

Another second way to look at retention is to see what percentage of users who started your game X days ago are actively playing it today. Calculating that percentage over time can show you how your retention is increasing or decreasing.

For example, in “D1” retention you’d measure what percentage of users come back and play the game 1 day after they signed up. In “D7” retention you’d measure what percentage of users come back and play the game 7 days after they signed up.

Retention of Users that Signed Up 1 Day Ago

This gist shows the formula for calculating and charting DX retention using the Keen IO JavaScript library.

Conclusion

Hope you found this guide useful. We’re just scratching the surface of event-based analytics. Want to learn more? Checkout Analytics for Hackers: How to Think About Event Data. Got questions about data modeling or analysis? Keen IO data scientists are here to help! Just drop us a note at contact@keen.io

M. Wetzler

Director at Keen IO.

Keen IO and the "Heartbleed" OpenSSL Vulnerability

Hello all,

As many of you are aware a security vulnerability in OpenSSL was announced yesterday. Like most of the other sites on the Internet, Keen IO was vulnerable to this. We patched our systems around 9PM PST last night night and completed a deployment of new keys for our SSL certificates at 2:30PM PST today.

While we have no evidence that any attack was performed or that any material was exposed by this exploit, we believe it to be in the best interest of our users to do the following:

  • Change your password.
  • Generate new API keys. You can do this from your project’s page when logged in by clicking on “Show API Keys”. You’ll need to update your SDK usage or other Keen IO integrations.

If you have any questions feel free to drop us a line.

Cory Watson

Bigger than a breadbox.

Announcing Keen-SDK-NET

The Keen IO SDK for .NET is now live! Now .NET developers can track user engagements, errors, server interactions or any custom event type.

We are very happy to have an official SDK to support the Microsoft community of developers. It works for mobile and server side applications and supports the full functionality of the Keen IO data collection API.

I hope you’ll take advantage of this SDK, install it from NuGet, try it in your code and maybe even join us on Github with questions, suggestions or improvements!

Justin Johnson

community guy, hacker, music nut. i like to help people build stuff.

Announcing KeenClient-Scala

The Keen IO SDK for Scala is now live! Now Scala developers can track and query user engagements, errors, server interactions or any customer event type at a very large scale with a native SDK!

The Scala SDK is a personal project of mine. When I joined Keen IO I needed to wrap my head around our API so that I could help customers and better understand their use cases. Since Keen IO didn’t have a Scala client I decided I could kill two birds with one stone, er, JAR and learn the API whilst creating a new SDK!

For those of you not familiar with Scala it’s an object-functional programming language that is compiled to Java bytecode and therefore runs on the JVM. In addition to many syntactic changes from Java, Scala has many features of functional programming languages. This melding of syntactic improvement, Java compatability and functional expressiveness have won over many engineers. I’m one of them!

Over a few weeks I worked on this project and am ready to share the beta SDK with the world. The SDK uses spray, the asynchronous, Akka-based HTTP client and makes extensive use of Futures so that you can continue doing other work while we diligently store your events.

In addition to basic event writing the SDK also supports a significant portion of the Data Analysis API as well. This makes it one of the most complete Keen IO SDKs!

I hope you’ll look the SDK over, try it in your code and maybe even join me on GitHub with questions, suggestions or improvements!

Cory Watson

Bigger than a breadbox.

I Love My Team at Keen IO

I woke up this morning with this e-mail in my inbox from my teammate Peter Nachbaur. So. Awesome.

Vikeens,

Oars up, we’re on the warpath. We’ve liberated some villages behind us, and we’ve got our eyes set on increasingly bigger targets. To celebrate our recent accomplishments (best month of sales and the impressive growth of our engineering and product pipeline!) Vikeen Michelle consulted the sages and determined we should lay jolly waste to Fort Funston and surrounding beaches. We’ll head over after next Laurelsday at Heavybit to spend some time together.

"But wait", I’m sure you just mumbled loud enough to make your cat lash her tail. If you had a cat. "Kyle just edited the sacred Introspective Happy Hour calendar invite." You reassure your cat, Doris, that you’d never intentionally miss a meeting on your calendar but especially not anxiousexcited.

Fear not fellow Vikeens, we are fiercely adaptable. Like the dwarves of old, we go forth with both hammer and stein.

image

Can you think of a better way to share our feelings than at a beach sunset? Actually have you seen how much sunlight we have now? We might get cold before then.

In the next few days, be sure to reply to that invite and stay tuned for musings on fine topics like “Castle Buckets: great beach toy or best toy ever?” and “What is the optimal Sunhat-Brim-Length ::: Pallidity ratio”.

yours in war and peace,
- Techno Vikeen Peter

ps. was this whole thing just an excuse to use that picture? I don’t even know anymore, but look at the detailing.

http://www.youtube.com/watch?v=FwsntHcWiy4&t=68&authuser=0

Daniel Kador

Software engineer, entrepreneur, geek, all around okay guy.

Tupac Shakur Is Not Mentioned In This Blog Post

Today, Keen IO is happy to announce general availability for a new event collection endpoint.

It’s called HTTP POSTAL.

image

Sending events to Keen IO no longer requires a computer. Or electricity. Just write your events on a postcard, add a stamp, and drop them into the nearest mailbox.

image

Don’t have a postcard? We’ll take anything you can write on, including:

  • Scrolls of Parchment
  • Cocktail napkins
  • Basketballs

image

Since the beta launch of HTTP POSTAL, we’ve received literally thousands of events:

image

Each event is reviewed by a trained POSTAL worker. Events are checked for syntax (double quotes please!) then painstakingly keyed into our database.

If you provided a return address, expect a confirmation of your event within 4-6 weeks.

image

Due to the recent popularity of unicorn foals not every response will contain a unicorn foal sticker.

Support for queries coming soon.

Josh Dzielak

Full of code, carbohydrates, and laughter.

A Scrappy Dashboard with Adjustable Timeframes in 5 min

This week I’ve been hacking on a dashboard to quickly analyze some pageview and signup data. 

Very commonly I want to be able to change the timeframe for my data views on the fly, so I can review the past hour, day, week, month, etc. Here’s one of my quick techniques for enabling this: a query string parameter.

A query string parameter appears at the end of your URL like this:

image

By simply modifying this URL param, the dashboard viewer can change the timeframe for the data that’s displayed in the charts. Keen IO supports a variety of timeframes (e.g. “today”, “previous_5_minutes”, “this_week”, “previous_12_months”).

Here’s a gist for the mini-dashboard above. For a more detailed explanation, follow along here:

First, add the JavaScript snippet below (I found it on Stack Overflow). This code grabs the timeframe data from your URL. In our example above, the query string contains just one parameter, but you could easily chain more on the end (for example, if you’re drawing a line chart you’ll probably want to add a parameter for interval too). This function will parse out the query string data into a “urlParams” object for you.

var urlParams = {};
(function () {
  var match,
    pl     = /\+/g,  // Regex for replacing addition symbol with a space
    search = /([^&=]+)=?([^&]*)/g,
    decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
    query  = window.location.search.substring(1);

  while (match = search.exec(query))
    urlParams[decode(match[1])] = decode(match[2]);
})();

console.log(“urlParams”) // {timeframe1: "last_24_hours"} 

Now create a friendly timeframe variable based on the URL param.

var timeframe = urlParams["timeframe1"]

Next set the timeframe on your Keen IO queries equal to this variable.

// Data for the PieChart - Tells What Types of Signups Happened
 var signupsByType = new Keen.Metric("signups", {
   analysisType: "count",
   groupBy: "type",
   timeframe: timeframe,  // use the variable timeframe from the query string
 });

I also like to include the timeframe on the chart title, so it’s always clear to the viewer what data they are seeing.

// Viz Settings for a PieChart
var signupsPieChart = new Keen.PieChart(signupsByType, {
  height: 250,
  width: 550,
  chartAreaLeft: 50,
  title: "Signup Types (" + timeframe + ")",  // use timeframe in the title too!
  font: "Helvetica Neue"
});

signupsPieChart.draw(document.getElementById("signup-types"));

Obviously, this solution isn’t ideal for something like a customer-facing dashboard, but I hope you’ll find it quick & useful for your scrappy internal use.

Got questions? Don’t hesitate: team@keen.io.

M. Wetzler

Director at Keen IO.

Joining A Startup: 1,000 Terrors, 9,000 Delights

Switching jobs terrifies me. I bet it terrifies you too. It’s ok to admit it. We’re all friends here. It turns out that those feelings ramp up even more when you’re considering joining a startup. I’m going to tell you about the things that scared the shit out of me when I first thought about joining Keen IO, and what came of them in the end.

Last year, it felt like all my professional dreams were finally being realized. Here I was — a self-taught, grew-up-in-a-trailer Southern boy — working for Twitter! I joined Twitter as a Site Reliability Engineer and soon rose to manage the omnipresent Observability Team, providing tools for monitoring and visualizing the performance of every aspect of Twitter. You see, I really, really love metrics and providing visibility into complex systems. In fact, I’ve been hacking on this problem in one way or another for most of my 20-year career. But, even with this amazing, complex problem to work on, all was not right with my world…


I photoshopped myself into this picture of Univac II. No, I’m not that fucking old.

Sunday nights started to feel more and more ominous as I dreaded the arrival of the coming work week. All week, I’d run from meeting to meeting, dealing with a nonstop stream of personnel, product, and technical issues. When the end of each day rolled around (all too soon, most days), I’d realize I hadn’t written a lick of code or created a single disruptive idea that day. I was helping my team get right and making the engineers at Twitter happy, but I often felt unfulfilled myself because I valued solving technical and product problems, and I wasn’t getting to do that work.


Sunday I’m biting my nails with anxiety and Friday I’m drunk and riding an inflatable ostrich with a soggy pith helmet. How is this relevant again?

Suffice it to say I wasn’t super happy, and the Bay Area being the land of startups, it’s not surprising that I began to flirt with a few. I eventually met up with Kyle, the CEO of Keen IO, and I quickly felt like I’d found something special. I loved the technology and the culture of Keen IO: Every employee here participates in sales, support, and whatever technical areas they are personally interested in. There is also an aversion to process, unless the team naturally arrives at it.

As Kyle and I discussed our philosophies on growing the business, I began to feel that this was a place where I could be happy and fulfilled while making a real contribution. It was also right up my alley, with their focus on metrics and making sense of them in your business.

Before I knew it, we were talking about an offer. And that’s when I discovered something completely unexpected: I was terrified of joining a startup! Like I said, Keen IO seemed like a great gig, but when I thought about actually doing it, I got cold feet. So I tried to figure out why:

  • There were only about a dozen employees at Keen IO, and many of them had known each other for decades. How would they react to an outsider with a new personality and different ideas? Especially one who isn’t shy about sharing those ideas. Would I be comfortable joining the “family” that is a small startup? Would they like me? I have so many great friends at Twitter that this was an important thing to me.
  • Technical founders can sometimes be very attached to their work and their implementation. Considering Keen IO was growing fast, it’s likely that big change was on the horizon. Would I get a say in this change? Being a veteran, it’s really important to me that my opinions are heard and considered.
  • I have a strong will to do things as “right” as I can, and that has often led to me working in Operations. Would I get pigeonholed into only Ops work simply because I’ve had exposure to Ops at such a huge scale at Twitter? I’m a programmer more than I am anything else, so this was a big question for me. I’ve done my share of rebooting boxes and handling upgrades – noble and necessary work, yes, but not what I wanted to define me.
  • I’m used to a big place with fixed titles and well-defined areas of scope. How would I react to being expected to answer support emails, do deep technical work, and take out the trash? Was I romanticizing the idea of a startup too much? Did I really want to do all the things?
  • The risks are high for a small startup with big ideas. Was I willing to put in my lot with these crazy people? I’ve got a wife and daughter that I have to consider. Would they understand why I’m leaving the illustrious Twitter they were so proud of me for? Would we end up in a cardboard box or having to move back to our families in Nashville? Would a sharknado hit the – nevermind.

I tossed and turned many nights as I debated each of these fears in my head. I drove my wife crazy guessing, second-guessing, reconsidering, hemming, hawing, and just being an overall pain in the ass.

Two things convinced me to pass on Keen IO and stay where I was: Concessions from my boss that I could focus more on coding and product work, and the very motivating promise of the 9 years’ pay worth of stock I’d be leaving on the table if I left. That would buy me so many shoes!


I’m seriously some kind of pixel wizard. Come at me.

But Keen IO was persistent, and Kyle emailed me one day, subject only: “Will you really be happy in 2014?”

Damn it, Kyle. He was right! Keen IO’s culture, interesting technical work, focus on customer happiness, and my love of the product ultimately convinced me to make the leap.

Fast forward to today: I accepted the job at Keen IO, gave notice and suffered the slings and arrows of leaving a job. After a bit over a month at this job, I can now take stock of my fears and decide how much they really ended up mattering. I can also provide a bit of advice to anyone else looking to make this change:

  • Joining a small team can be hard. The team at Keen have been very welcoming, and I feel like I’m already making some really great friends here. Even if you’re an introvert like me, you can set some goals to participate in one or two social activities per week and still take some time to regain your energy and focus. It also helps to find one or two people who share common interests and focus on building relationships with them first. If all else fails, just start yelling at people about your amazing collection of 40+ pairs of Nike Air Max shoes. That gets ‘em every time.

You know you want to talk about my shoe collection.
  • Making technical decisions is very democratic at Keen IO, and with so many things in motion, it’s often hard to nail down big changes, like making the switch to a new programming language or a new piece of infrastructure. These often take a lot of small conversations rather than the big architecture meetings I was used to. My best advice is to spend time learning about the team and about the choices before suggesting change. Avoid the temptation to change something just to make it familiar. Also, be sure to approach these conversations with empathy. It’s not about ramming your opinion into things. It’s about doing what’s best for the business, the customer, and the culture.
  • The risks are still very real. Startups are notoriously fickle, and there are pivots, funding, and personnel changes that loom over us every week. There’s not much I can say here, as it comes down to your personal situation and risk aversion. I worked with my wife to plan for the risks, and we’re happy with the state of things. Startups seem to have flexibility in signing bonuses vs. salary vs. stock. If you can’t have an open conversation about your needs and these factors with the people you’re about to work with, it might not be a good fit. Arrange the compensation to cover your worries. I used a signing bonus to placate my fears. Your recipe might be different.
  • Some of you may be wondering about that stock bombshell from earlier. What motivated me to give up all that future money? That turned out to be pretty easy for me, but your mileage may vary. Since a third of my stock was vested, I was already looking at a handsome nest egg. Was sticking around for two more years in a job that was making me unhappy worth it to be become a millionaire? Not for me. I knew that, even if I had “fuck you money,” I’d still want to do exactly the type of thing I’d be doing at Keen IO. Some people would retire and climb mountains or travel the world; I’d just write code and work on a great product. Keen IO felt like that company I’d been looking for my whole career. Why not start doing what I loved now?

If I was a dog I’d be a Corygi. This has nothing to do with this blog post.

In closing, I enjoy my work at Keen IO so much that I had to be dragged from my computer last night for dinner and I woke up early today — a Saturday — to write this post. I find great satisfaction in the work that we’re doing and feel very connected to our users. There are still many days when I feel frustrated that there’s not a department in the company that solves the problems that I don’t want to deal with or when I have trouble finding consensus for some new idea. I also really miss all the amazing friends I made at Twitter. But these troubles are easily offset by having the freedom, impact, and pleasure I get from working at Keen IO. I’m also really happy all the time, and my family has seen the change in my mood. Overall, this has been one of the best decisions of my career, and I’m very excited for the new challenges that Keen IO brings. I don’t regret a thing.

Cory Watson

Bigger than a breadbox.

Joining A Startup: 1,000 Terrors, 9,000 Delights

Switching jobs terrifies me. I bet it terrifies you too. It’s ok to admit it. We’re all friends here. It turns out that those feelings ramp up even more when you’re considering joining a startup. I’m going to tell you about the things that scared the shit out of me when I first thought about joining Keen IO, and what came of them in the end.

Last year, it felt like all my professional dreams were finally being realized. Here I was — a self-taught, grew-up-in-a-trailer Southern boy — working for Twitter! I joined Twitter as a Site Reliability Engineer and soon rose to manage the omnipresent Observability Team, providing tools for monitoring and visualizing the performance of every aspect of Twitter. You see, I really, really love metrics and providing visibility into complex systems. In fact, I’ve been hacking on this problem in one way or another for most of my 20-year career. But, even with this amazing, complex problem to work on, all was not right with my world…


I photoshopped myself into this picture of Univac II. No, I’m not that fucking old.

Sunday nights started to feel more and more ominous as I dreaded the arrival of the coming work week. All week, I’d run from meeting to meeting, dealing with a nonstop stream of personnel, product, and technical issues. When the end of each day rolled around (all too soon, most days), I’d realize I hadn’t written a lick of code or created a single disruptive idea that day. I was helping my team get right and making the engineers at Twitter happy, but I often felt unfulfilled myself because I valued solving technical and product problems, and I wasn’t getting to do that work.


Sunday I’m biting my nails with anxiety and Friday I’m drunk and riding an inflatable ostrich with a soggy pith helmet. How is this relevant again?

Suffice it to say I wasn’t super happy, and the Bay Area being the land of startups, it’s not surprising that I began to flirt with a few. I eventually met up with Kyle, the CEO of Keen IO, and I quickly felt like I’d found something special. I loved the technology and the culture of Keen IO: Every employee here participates in sales, support, and whatever technical areas they are personally interested in. There is also an aversion to process, unless the team naturally arrives at it.

As Kyle and I discussed our philosophies on growing the business, I began to feel that this was a place where I could be happy and fulfilled while making a real contribution. It was also right up my alley, with their focus on metrics and making sense of them in your business.

Before I knew it, we were talking about an offer. And that’s when I discovered something completely unexpected: I was terrified of joining a startup! Like I said, Keen IO seemed like a great gig, but when I thought about actually doing it, I got cold feet. So I tried to figure out why:

  • There were only about a dozen employees at Keen IO, and many of them had known each other for decades. How would they react to an outsider with a new personality and different ideas? Especially one who isn’t shy about sharing those ideas. Would I be comfortable joining the “family” that is a small startup? Would they like me? I have so many great friends at Twitter that this was an important thing to me.
  • Technical founders can sometimes be very attached to their work and their implementation. Considering Keen IO was growing fast, it’s likely that big change was on the horizon. Would I get a say in this change? Being a veteran, it’s really important to me that my opinions are heard and considered.
  • I have a strong will to do things as “right” as I can, and that has often led to me working in Operations. Would I get pigeonholed into only Ops work simply because I’ve had exposure to Ops at such a huge scale at Twitter? I’m a programmer more than I am anything else, so this was a big question for me. I’ve done my share of rebooting boxes and handling upgrades – noble and necessary work, yes, but not what I wanted to define me.
  • I’m used to a big place with fixed titles and well-defined areas of scope. How would I react to being expected to answer support emails, do deep technical work, and take out the trash? Was I romanticizing the idea of a startup too much? Did I really want to do all the things?
  • The risks are high for a small startup with big ideas. Was I willing to put in my lot with these crazy people? I’ve got a wife and daughter that I have to consider. Would they understand why I’m leaving the illustrious Twitter they were so proud of me for? Would we end up in a cardboard box or having to move back to our families in Nashville? Would a sharknado hit the – nevermind.

I tossed and turned many nights as I debated each of these fears in my head. I drove my wife crazy guessing, second-guessing, reconsidering, hemming, hawing, and just being an overall pain in the ass.

Two things convinced me to pass on Keen IO and stay where I was: Concessions from my boss that I could focus more on coding and product work, and the very motivating promise of the 9 years’ pay worth of stock I’d be leaving on the table if I left. That would buy me so many shoes!


I’m seriously some kind of pixel wizard. Come at me.

But Keen IO was persistent, and Kyle emailed me one day, subject only: “Will you really be happy in 2014?”

Damn it, Kyle. He was right! Keen IO’s culture, interesting technical work, focus on customer happiness, and my love of the product ultimately convinced me to make the leap.

Fast forward to today: I accepted the job at Keen IO, gave notice and suffered the slings and arrows of leaving a job. After a bit over a month at this job, I can now take stock of my fears and decide how much they really ended up mattering. I can also provide a bit of advice to anyone else looking to make this change:

  • Joining a small team can be hard. The team at Keen have been very welcoming, and I feel like I’m already making some really great friends here. Even if you’re an introvert like me, you can set some goals to participate in one or two social activities per week and still take some time to regain your energy and focus. It also helps to find one or two people who share common interests and focus on building relationships with them first. If all else fails, just start yelling at people about your amazing collection of 40+ pairs of Nike Air Max shoes. That gets ‘em every time.

You know you want to talk about my shoe collection.
  • Making technical decisions is very democratic at Keen IO, and with so many things in motion, it’s often hard to nail down big changes, like making the switch to a new programming language or a new piece of infrastructure. These often take a lot of small conversations rather than the big architecture meetings I was used to. My best advice is to spend time learning about the team and about the choices before suggesting change. Avoid the temptation to change something just to make it familiar. Also, be sure to approach these conversations with empathy. It’s not about ramming your opinion into things. It’s about doing what’s best for the business, the customer, and the culture.
  • The risks are still very real. Startups are notoriously fickle, and there are pivots, funding, and personnel changes that loom over us every week. There’s not much I can say here, as it comes down to your personal situation and risk aversion. I worked with my wife to plan for the risks, and we’re happy with the state of things. Startups seem to have flexibility in signing bonuses vs. salary vs. stock. If you can’t have an open conversation about your needs and these factors with the people you’re about to work with, it might not be a good fit. Arrange the compensation to cover your worries. I used a signing bonus to placate my fears. Your recipe might be different.
  • Some of you may be wondering about that stock bombshell from earlier. What motivated me to give up all that future money? That turned out to be pretty easy for me, but your mileage may vary. Since a third of my stock was vested, I was already looking at a handsome nest egg. Was sticking around for two more years in a job that was making me unhappy worth it to be become a millionaire? Not for me. I knew that, even if I had “fuck you money,” I’d still want to do exactly the type of thing I’d be doing at Keen IO. Some people would retire and climb mountains or travel the world; I’d just write code and work on a great product. Keen IO felt like that company I’d been looking for my whole career. Why not start doing what I loved now?

If I was a dog I’d be a Corygi. This has nothing to do with this blog post.

In closing, I enjoy my work at Keen IO so much that I had to be dragged from my computer last night for dinner and I woke up early today — a Saturday — to write this post. I find great satisfaction in the work that we’re doing and feel very connected to our users. There are still many days when I feel frustrated that there’s not a department in the company that solves the problems that I don’t want to deal with or when I have trouble finding consensus for some new idea. I also really miss all the amazing friends I made at Twitter. But these troubles are easily offset by having the freedom, impact, and pleasure I get from working at Keen IO. I’m also really happy all the time, and my family has seen the change in my mood. Overall, this has been one of the best decisions of my career, and I’m very excited for the new challenges that Keen IO brings. I don’t regret a thing.

Keen IO

"Corporations are people, my friend."

Joining A Startup: 1,000 Terrors, 9,000 Delights

Switching jobs terrifies me. I bet it terrifies you too. It’s ok to admit it. We’re all friends here. It turns out that those feelings ramp up even more when you’re considering joining a startup. I’m going to tell you about the things that scared the shit out of me when I first thought about joining Keen IO, and what came of them in the end.

Last year, it felt like all my professional dreams were finally being realized. Here I was — a self-taught, grew-up-in-a-trailer Southern boy — working for Twitter! I joined Twitter as a Site Reliability Engineer and soon rose to manage the omnipresent Observability Team, providing tools for monitoring and visualizing the performance of every aspect of Twitter. You see, I really, really love metrics and providing visibility into complex systems. In fact, I’ve been hacking on this problem in one way or another for most of my 20-year career. But, even with this amazing, complex problem to work on, all was not right with my world…


I photoshopped myself into this picture of Univac II. No, I’m not that fucking old.

Sunday nights started to feel more and more ominous as I dreaded the arrival of the coming work week. All week, I’d run from meeting to meeting, dealing with a nonstop stream of personnel, product, and technical issues. When the end of each day rolled around (all too soon, most days), I’d realize I hadn’t written a lick of code or created a single disruptive idea that day. I was helping my team get right and making the engineers at Twitter happy, but I often felt unfulfilled myself because I valued solving technical and product problems, and I wasn’t getting to do that work.


Sunday I’m biting my nails with anxiety and Friday I’m drunk and riding an inflatable ostrich with a soggy pith helmet. How is this relevant again?

Suffice it to say I wasn’t super happy, and the Bay Area being the land of startups, it’s not surprising that I began to flirt with a few. I eventually met up with Kyle, the CEO of Keen IO, and I quickly felt like I’d found something special. I loved the technology and the culture of Keen IO: Every employee here participates in sales, support, and whatever technical areas they are personally interested in. There is also an aversion to process, unless the team naturally arrives at it.

As Kyle and I discussed our philosophies on growing the business, I began to feel that this was a place where I could be happy and fulfilled while making a real contribution. It was also right up my alley, with their focus on metrics and making sense of them in your business.

Before I knew it, we were talking about an offer. And that’s when I discovered something completely unexpected: I was terrified of joining a startup! Like I said, Keen IO seemed like a great gig, but when I thought about actually doing it, I got cold feet. So I tried to figure out why:

  • There were only about a dozen employees at Keen IO, and many of them had known each other for decades. How would they react to an outsider with a new personality and different ideas? Especially one who isn’t shy about sharing those ideas. Would I be comfortable joining the “family” that is a small startup? Would they like me? I have so many great friends at Twitter that this was an important thing to me.
  • Technical founders can sometimes be very attached to their work and their implementation. Considering Keen IO was growing fast, it’s likely that big change was on the horizon. Would I get a say in this change? Being a veteran, it’s really important to me that my opinions are heard and considered.
  • I have a strong will to do things as “right” as I can, and that has often led to me working in Operations. Would I get pigeonholed into only Ops work simply because I’ve had exposure to Ops at such a huge scale at Twitter? I’m a programmer more than I am anything else, so this was a big question for me. I’ve done my share of rebooting boxes and handling upgrades – noble and necessary work, yes, but not what I wanted to define me.
  • I’m used to a big place with fixed titles and well-defined areas of scope. How would I react to being expected to answer support emails, do deep technical work, and take out the trash? Was I romanticizing the idea of a startup too much? Did I really want to do all the things?
  • The risks are high for a small startup with big ideas. Was I willing to put in my lot with these crazy people? I’ve got a wife and daughter that I have to consider. Would they understand why I’m leaving the illustrious Twitter they were so proud of me for? Would we end up in a cardboard box or having to move back to our families in Nashville? Would a sharknado hit the – nevermind.

I tossed and turned many nights as I debated each of these fears in my head. I drove my wife crazy guessing, second-guessing, reconsidering, hemming, hawing, and just being an overall pain in the ass.

Two things convinced me to pass on Keen IO and stay where I was: Concessions from my boss that I could focus more on coding and product work, and the very motivating promise of the 9 years’ pay worth of stock I’d be leaving on the table if I left. That would buy me so many shoes!


I’m seriously some kind of pixel wizard. Come at me.

But Keen IO was persistent, and Kyle emailed me one day, subject only: “Will you really be happy in 2014?”

Damn it, Kyle. He was right! Keen IO’s culture, interesting technical work, focus on customer happiness, and my love of the product ultimately convinced me to make the leap.

Fast forward to today: I accepted the job at Keen IO, gave notice and suffered the slings and arrows of leaving a job. After a bit over a month at this job, I can now take stock of my fears and decide how much they really ended up mattering. I can also provide a bit of advice to anyone else looking to make this change:

  • Joining a small team can be hard. The team at Keen have been very welcoming, and I feel like I’m already making some really great friends here. Even if you’re an introvert like me, you can set some goals to participate in one or two social activities per week and still take some time to regain your energy and focus. It also helps to find one or two people who share common interests and focus on building relationships with them first. If all else fails, just start yelling at people about your amazing collection of 40+ pairs of Nike Air Max shoes. That gets ‘em every time.

You know you want to talk about my shoe collection.
  • Making technical decisions is very democratic at Keen IO, and with so many things in motion, it’s often hard to nail down big changes, like making the switch to a new programming language or a new piece of infrastructure. These often take a lot of small conversations rather than the big architecture meetings I was used to. My best advice is to spend time learning about the team and about the choices before suggesting change. Avoid the temptation to change something just to make it familiar. Also, be sure to approach these conversations with empathy. It’s not about ramming your opinion into things. It’s about doing what’s best for the business, the customer, and the culture.
  • The risks are still very real. Startups are notoriously fickle, and there are pivots, funding, and personnel changes that loom over us every week. There’s not much I can say here, as it comes down to your personal situation and risk aversion. I worked with my wife to plan for the risks, and we’re happy with the state of things. Startups seem to have flexibility in signing bonuses vs. salary vs. stock. If you can’t have an open conversation about your needs and these factors with the people you’re about to work with, it might not be a good fit. Arrange the compensation to cover your worries. I used a signing bonus to placate my fears. Your recipe might be different.
  • Some of you may be wondering about that stock bombshell from earlier. What motivated me to give up all that future money? That turned out to be pretty easy for me, but your mileage may vary. Since a third of my stock was vested, I was already looking at a handsome nest egg. Was sticking around for two more years in a job that was making me unhappy worth it to be become a millionaire? Not for me. I knew that, even if I had “fuck you money,” I’d still want to do exactly the type of thing I’d be doing at Keen IO. Some people would retire and climb mountains or travel the world; I’d just write code and work on a great product. Keen IO felt like that company I’d been looking for my whole career. Why not start doing what I loved now?

If I was a dog I’d be a Corygi. This has nothing to do with this blog post.

In closing, I enjoy my work at Keen IO so much that I had to be dragged from my computer last night for dinner and I woke up early today — a Saturday — to write this post. I find great satisfaction in the work that we’re doing and feel very connected to our users. There are still many days when I feel frustrated that there’s not a department in the company that solves the problems that I don’t want to deal with or when I have trouble finding consensus for some new idea. I also really miss all the amazing friends I made at Twitter. But these troubles are easily offset by having the freedom, impact, and pleasure I get from working at Keen IO. I’m also really happy all the time, and my family has seen the change in my mood. Overall, this has been one of the best decisions of my career, and I’m very excited for the new challenges that Keen IO brings. I don’t regret a thing.

Keen IO

"Corporations are people, my friend."