Content is Community

At Keen IO, I have been tasked with community building and developer advocacy. Being a developer advocate at Keen IO requires administrating an array of services, social media, support on our Community Slack channel, blog, technical content, and more. We have learned quite a lot supporting and creating a community for developers and engineers all over the globe. Over the years we’ve learned that great content is great developer advocacy.

The team at Keen believes in creating meaningful and helpful content. Engineers and developer advocates all believe in the value of writing to be helpful to the point where many of our pieces on our blog often deal with being a human more often than it deals with our technology. (For example, what it’s like working remote, the fears and feels about switching careersfinding meaning at workwork-life balance, and how to negotiate your startup compensation to name a few.) After all, humans do run a company; and while you spend just part of your career working in technology, you spend all of your life, being human.

So why write? We hope to share a few of our reasons for believing in good developer content and documentation and share some of what we learned supporting and growing a developer community through online community and content.

To Be Helpful

Full disclosure: Being helpful is both altruistic but selfish. Helpfulness provides:

  • Clarity on product usage features
  • Makes things easy for the people we built things for
  • Less confusion and less questions

Compared to our early days when we made all kinds of mistakes, we now often receive compliments for our developer content and API documentation. We make it standard practice reach out to see if developers integrating Keen need help, and the most rewarding messages have been: “Thanks for the offer. Not at all! Your documentation was super straightforward and I don’t need any help!” and “I found Keen because I was reading your blog article about team culture. Your product is super easy to use!”

Writing to your audience provides clear benefits. It feels good to help people and provide a reference for someone searching for an example or answer.

To Develop Empathy

In addition to helping us build a clear sense of community and a voice for our company, we get the amazing opportunity to connect with developers and provide reasons for why things are done. It’s an opportunity for product owners and our platform engineers to be real with our users and understand the struggles of our users. Because we are human, it is important to have reasons and logic for why things are done.

For us as people who work hard on creating and supporting Keen IO’s databases, we read comments, interact, and think about customers, which helps us stay in tune with who we’re helping and get into our customers’ shoes.

Because If You Don’t Write, It Doesn’t Exist

On engineering and platform, it’s easy to get carried away creating and deploying new features. Project tasks include everything from testing and deploying to production, but it’s easy to overlook adding to the project plan that final step of publishing the feature before moving on to the next task in your sprint. It’s been conveyed to me that thinking about writing or documenting can often feel cumbersome, like it’s getting in the way and there’s a high activation energy required to get rolling. This is an easy thought process to fall into and a rut that fails to help.

Without providing clear and helpful documentation, or deploying some content to our API reference, customers are left in the dark. To fend for themselves. Worse 😧 — they’ll never use the awesome thing you built just for them!

On our Community Team, we’ve made it best practice to encourage our engineering teammates and help create mini milestones to fill in that missing piece on project plans. For those who are nervous about writing — that it might not be perfect, or that what is written is permanent, and will be seen by thousands, and they don’t want to fail — our awesome developer advocates help interview creators of the features and start up drafts or outlines. In the end, we’re motivated by being helpful! Having technical content and API documentation helps the customers that we’ve built things for.

There is a debate that often happens, “should I invest the time it takes to write good documentation.” Yes. “If I write, what if it’s not perfect?”

Don’t sweat the small stuff. In our experience, definitely put it out there. Good is good enough, and people digging into the sample code you wrote are happy to have an example. They’re usually pretty nice if they find a syntax error, and if they’ve found a brilliant solution are more than willing to share. Our Community Slack account is full of examples of strangers helping strangers, and StackOverflow comments show helpful and innovative solutions.

Lessons Learned on Writing Good Documentation

A lot of the knowledge we’ve stumbled upon in our journey as a developer company were revealed because of comments and suggestions provided by our customers. We know now what we could have done to be stellar right off the bat. Here are some do’s and don’ts we wish we’d known.

Format Matters

With so much to cover, long blocks of text used to dominate our how-to guides and articles. Based on pageview analytics and the type of questions we were receiving, when we didn’t give any thought to format, users gave up and would leave the page.

The format your content is in matters — it adds clarity to instructions. Some content hacks that helped technical people scan and find the answers they were looking for:

  • Search bar, top and center
    (Can you believe that we didn’t even have a search function for years?! Using Algolia for docs search improved our world for the better.)
  • Table of contents, top of page (help long articles become less overwhelming, links jump to particular subtopics of interest)
  • Anchors for subsections (helps content appear directly as entries on Google search results)
  • Layout, left side navigation
Taking the time to build a table of contents, particularly for longer articles, helps the reader

Don’t Skip Steps

Do write out every step even if it seems basic to you. It’s good for placeholders, and people who are familiar with your instructions can still orient themselves and will skip the parts they know. Others encountering the instructions for the first time will be lost.



Keep it clear: screenshots for each step in our software documentation

Have peers that are on and off your team review your writing. Having a few perspectives help because what is obvious or clear to one person may not be for another. One thing we try to avoid in documentation is using language like “just” “simply”. Sometimes, it’s not as simple to developers who haven’t worked on your code base for years.

To help readers follow along, visuals punctuated throughout the article don’t hurt either.

Keep It Real

Being able to laugh at your own short comings or being okay with casual language is all right.

Embedded and spread out through documentation, I’ve written sly references to Game of Thrones, Minecraft, or other things to brighten and add some humor when talking about and documenting data analytics. They’re not always in text because we don’t necessarily want them to be indexed by bots or search engines.

At times, we punctate our documentation with these secret jokes and winks to insiders to make sure people are still awake. On the Keen site there’s a few fun or funny things hidden in documentation. Perhaps our most famous is our developer easter egg, but you’ll have to find that one yourself 😜


You’ll have to find this one on your own

Define A Community Philosophy

Our content philosophy is centered around the values of:

  • Transparency
  • Honesty
  • Helpfulness
  • Empathy

Having these key values helped us translate our approach for creating developer content. Are we helpful? Did we empower and do right by our community of developers?

Hopefully from summarizing highlights from our experience supporting and growing our developer community through online resources and content, we’ve provided some helpful tips and building your community as well.

SendGrid and Keen IO have partnered to provide robust email analytics solution

Today we’re announcing our partnership with SendGrid to provide the most powerful email analytics for SendGrid users.


SendGrid Email Analytics — Powered by Keen IO

Connect to Keen from your SendGrid account in seconds. Start collecting and storing email data for as long as you need it. No code or engineering work required!

The SendGrid Email Analytics App operates right out-of-the-box to provide the essential dashboards and metrics needed to compare and analyze email campaigns and marketing performance. Keen’s analytics includes capabilities for detailed drill down to understand users and their behavior.

Keen IO’s analytics with SendGrid enables you to:

  • Know who is receiving, opening, and clicking emails in realtime
  • Build targeted campaigns based on user behavior and campaign performance
  • Find your most or least engaged users
  • Extract lists of users for list-cleaning and segmentation
  • Drill in with a point-and-click data explorer to reveal exactly what’s happening with your emails
  • Keep ALL of your raw email event data (No forced archiving)
  • Build analytics for your customers directly into your SaaS platform
  • Programmatically query your email event data by API



SendGrid Email Analytics — Powered by Keen IO

The solution includes campaign reports, as well as an exploratory query interface, segmentation capabilities, and the ability to drill down into raw email data.

Interested in learning more? Check out the Keen IO Email Analytics Solutionon SendGrid’s Partners Marketplace.

9 Projects Showcased at Open Source Show and Tell 2017

The 4th annual Open Source Show & Tell wrapped up and we had such a great time experiencing and seeing some cool open source projects.

We got interactive with Ashley going on a journey building smart musical IoT plushies, and were wowed by Beth’s talk on unifying the .NET developer community.

Joel walked us through the inner workings of software development (the good, bad, and ugly), and show us how the purely functional and open source package manager, Nix, can help with package and configuration management. Zach took us on a journey into why the open source project Steeltoe was built, and showed us how developers can write in .NET and still implement industry best practices when building services for the cloud.

We learned from Josh at Algolia how you can scale a developer community by creating webhooks for community support, and Sarah (image left) took us along a journey understanding open source’s role in cloud computing at companies like Google.

Julia presented about internationalizing if-me, an open source non-profit mental health communication platform maintained by contributors from many backgrounds and skill sets.

There were lots of other excellent talks about open source project like Babelfish a self-hosted server for source code parser presented by Eiso, and Nicolas’s talk about helping people build better APIs following best practices via

Check out all of the topics and talks here.

Big thanks to GitHub, Google, and Microsoft for co-organizing and hosting. Looking forward to seeing you at Open Source Show and Tell next year!

We ❤ open source. We’d love to hear more about your project and share it with others. To help with any analytics needs, Keen IO has an open source software discount available to any open source or open data project. Please feel free to reach out to for more info.

Happy Data Hour with Readme and Keen IO

Free on July 20th? Keen IO and will be having a casual drinkup at from 5:30–7:30 PM, and we’d love you to join us!

Chat data, startups, and community, tell us what you really think about our services, or just swing by and hang a bit.

Please RSVP here if you’re coming. Let us know how many people to plan for. See you there!

Join us for Happy Data Hour!

Below is some nerdy JSON which probably looks terrible on your mobile device :)

   “event”: {
   “name”: “Happy Data Hour”,
   “type”: “meetup”,
   “pretty_timestamp”: “July 20th, 5:00pm-7:00pm (PST)”,
   “location”: {
      “street_address”: “”,
      “city”:”San Francisco”,
      “zip_code”: “94103”,
      “special instructions”: “ Featuring data and community members from Keen IO and ReadMe!”
   “beverages”: true,
   “host”: “Keen IO &”

Twilio has Partnered with Keen IO to Provide Contact Center Reporting and Analytics

Exciting news at the Twilio Signal Conference this week! Twilio announced they have partnered with Keen IO to provide out-of-the-box contact center reporting and analytics. Now contact centers can use Keen’s Add-on right out of the box to provide the essential dashboards and metrics needed to run a contact center. The Keen Add-on seamlessly integrates with Twilio TaskRouter to provide immediate visibility into contact center usage.

Keen’s Add-on enables you to:

  • Monitor your contact center with out-of-the-box dashboards and email reporting
  • Explore deeper insights in your data with a point-and-click visual explorer — no code or knowledge of SQL required
  • Connect other data sources, like CSAT or revenue, to customize your reports
  • Share sets of metrics and unified KPIs across every team, project, and department
  • Automate workflows and build extensions on a well-documented API
Contact Center Analytics Dashboard
Explore analyses and drill-down into you contact center data with the Explorer Tool

Interested in learning more? The Add-on includes out-of-the-box standard contact center reports, as well as an exploratory query interface and the ability to drill down into raw task data.

Check out the Keen IO Contact Center Reporting & Analytics Add-on in Twilio’s marketplace:

Dashboards Update: 20 Free Boards and New Shareable Links

We just released a couple feature enhancements to make sharing metrics and creating dashboards even easier!

First, the limit on the number of dashboards you can create has increased to 20 unique dashboards per Keen IO project. Previously, this limit was set at just one dashboard per project.

Along with allowing multiple dashboards on your project page, we also prepare and generate unique URLs — now each dashboard will have their own unique URL. This means it’s easier than ever to share metrics with your teammates with direct links to dashboards that can be shared and bookmarked!

What are Keen Dashboards?

In 2016 we released Keen Dashboards: a point-and-click UI for creating and hosting dashboards for your analytics. It allows your teammates to view live analytics when logged into your Keen IO account.

Keen Dashboards can be used to:

  • Quickly create custom dashboards with a point-and-click interface
  • Share sets of metrics and unified KPIs across every team, project, and department
  • Give anyone on your team the ability to edit and generate their own analyses — no code or knowledge of SQL required


Populate a dashboard full of metrics all via point-and-click (no code, no SQL needed) — Customer Success Team dashboard

As always we are eager for your feedback, let us know how we can continue to improve your user experience via 💌

Join Us at Twilio for Happy API Hour


Twilio’s Signal Conference 2017 is just around the corner! We’re excited to meet thousands of fellow developers in San Francisco for 2 days of talks, panels, events, knowledge sharing, and fun. Come visit us at booth number i2 to say hi, get some sweet swag, give us a hi-five, ask questions about APIs, or get a sneak peak of our latest product collaboration with Twilio.📊

On the evening of Wednesday, May 24th Keen IO is co-hosting a Happy API Hour with our friends at Auth0 and Algolia. Join us for an evening of networking and hanging out with plenty of food, beer, wine, and refreshments. Space is limited so help us out by making sure to register early with the link below:



Happy Hour Event Details

Where: Rogue Ales Public House, 673 Union Street, San Francisco, CA 94133

When: May 24, 2017 at 7:30pm — 9:30pm

What: Happy Hour/afterparty, space is limited!

How: RSVP on Eventbrite to reserve your spot


About our Co-Sponsors

Algolia helps developers connect their users with what matters most. Their hosted search API powers billions of queries for thousands of websites & mobile applications every month, delivering relevant results in an as-you-type search experience in under 100ms anywhere in the world. Algolia’s full-stack solution takes the pain out of building search; we maintain the infrastructure & the engine, and we provide extensive documentations to our dozens of up-to-date API clients and SDKs with all the latest search features, so you can focus on delighting your users.

Auth0 provides frictionless authentication and authorization for developers. The company makes it easy for developers to implement the most complex identity solution for their web, mobile and internal applications. Ultimately Auth0 allows developers to control how a person’s identity is used with the goal of making the internet safer.

About ourselves — Over 60,000 developers use Keen IO APIs to capture, analyze, and embed event data into their tools and products. Thousands of customers rely on Keen’s event data platform to white label data applications in media, e-commerce, adTech, gaming, IoT and retail. Keen’s customers query trillions of data points daily. Keen IO also values and promotes empathy, introspection, distributed innovation, continuous learning, playing to your strengths, and patching your weaknesses with diverse collaborators.


shhh… we may or may not have VIP wristbands for the happy hour event at our booth i2!

See you there at the afterparty + Twilio Signal!

How to Build and Scale an Empathetic Customer Support Experience

At Keen IO, we have individuals from every team — Engineering, Infrastructure, Web, Developer Community, Customer Success, and People Team — doing support. We use the term Support Pool to describe the pool of people who are running support at any given time. Being dedicated to helping customers on Support Pool means that we don’t have regular meetings or work on our regular projects. We’ve experimented with ways to create a schedule that works for everybody, but the basic idea is that we have a dedicated, diverse, and cross-functional subset of the company to support customers.

As a result, support is super personal. If a customer wrote into our Intercom system or reached out to us via email, they would receive a response from a real human from Team Keen. This is awesome for our customers, and helps reinforce that authenticity, a core Keen value, is important to us.

Why does everyone do support?

If you’ve ever read “The Ten Faces of Innovation”, the book talks about how individuals and organizations need to constantly gather new sources of information to expand their knowledge and grow. The first of the ten faces is a learning role: the Anthropologist. This persona’s goal is to remind everyone what’s actually going on from our customer’s perspective and exercise putting on our customers’ shoes. Adopting some of an Anthropologist’s learning persona helps to keep your team from becoming too internally focused, and remind the organization not to be so smug about what you “know”. It can be all too easy to be blinded by one’s own biases and beliefs and end up missing the point. By dedicating time for this anthropology, each individual is empowered to see the business holistically, and is reminded that our business exists to provide value to our customers.

To further drive this point home, our CEO Kyle Wild wrote this in an all-hands email:

When the “customer” is just some abstraction out in the distance, it becomes more and more abstract, and less accurate over time. On the other hand, when the “customer” is a collective persona — a mental model in progress — based on interactions with hundreds of real live human beings, it gets more accurate over time. And when everyone in a company has an accurate (and increasingly so) mental model of the customer, there’s magic.

That’s why at Keen IO, customer support is part of everyone’s job, and I hope it always will be.

Turns out there are also lots of other beneficial and positive reasons for people from many roles in the company here at Keen IO to do support. We’ve found the following three to be particularly salient.

  1. Individuals from separate teams get the chance to work together, share knowledge, and get to know each other better.
  2. Product design and development is always informed by direct customer feedback, and shortening the feedback loop.
  3. Everyone feels responsibility for our collective internal and customer pain points. When everyone does support, everyone contributes to making support (and our product) better and easier.

Iterating for Success

Because we believe firmly in authentic, human support, we have people from every team at Keen doing Support Pool. But this doesn’t mean that we haven’t evolved to make Support more efficient.

A long time ago, we once used a Google Group to serve as our main method of Support at Keen IO. The group served as the main point of contact to us for current and prospective customers. It functioned a lot like a forum, so it also had the unfortunate habit of emailing everyone in the company whenever a message was sent or replied. Because everyone on the team was on the email list, that meant every team member received every piece of inbound customer communication. Customers received excellent customer support: messages grabbed the attention of everyone in the company, the expert on that topic could respond, and the responses were quick.

This system, however, had some obvious downfalls — whenever the customer base scaled and we gained more users, there were more questions, more messages, and scaling our team became an issue. We found that this system demanded attention away from projects and was also very distracting every day.

We had every-single-person on Support, and eventually it really acted more like no-single-person was. Everyone still had their day-to-day tasks and it grew difficult trying to figure out big chunks of time for work. Then worse, as ticket volume and our customer base grew in parallel, our customer’s tickets were sadly sometimes forgotten.

This is when we decided to change things.

Instead of the entire team, we have a dedicated subset of people who are running support on a particular day. Being dedicated to helping customers on Support Pool means that we don’t have regular meetings or work on regular projects. And we schedule each volunteer for our shifts so that it is at a convenient time and has a dedicated calendar date. We have a partner on each support shift and the time spent feels like a special project and acts like a rotation. The shifts are scheduled in a way such that support runs every other work day. We learn about where in our product our customers are experiencing problems, hang out with someone from a team different from ours, and also take the wheel on using our own platform from someone else’s eyes. This teaches us a lot about empathy.

Because support has at least one person’s full attention on their Support day, tickets are not forgotten or dropped on the floor. We also selected Intercom as our support tool that helps us track and account for incoming messages as well.

By adjusting the format and layout of Support Pool and selecting the most appropriate platform to organize support, we were able to become 100% more efficient and choose a tool that provided the ability to answer 3x more tickets.

Scaling Customer Support

Before you can begin being truly effective at scaling your support processes: do me a favor and write it down. All of it. How you answered a previous customer’s question, when did you decide to pass the question along to your engineering team? Where do you store and send feedback, what kind of support volume do you get?

The single most powerful support tool we created was documentation. Internally, we create helpful articles for each other such as: “How to Answer Questions Effectively”, “A First-timer’s Guide to Support Triage & Escalation”, and “Common Requests”. By leveraging a library of internal documentation and frequently asked questions, we’ve helped make the time spent on Support Pool more effective. Additionally, we started a brief “Intro to Support” class when onboarding our new hires. This time spent on education helps new hires feel familiar and comfortable with our product and therefore also empowered to help our customers. In our internal documentation and education, along with going over support tooling and how Keen works, we also let the team know the reasons why everyone does support (the exact topic you’re reading now 😛)!

We’ve invested a lot into creating external-facing documentation as well. By updating and maintaining our SDK libraries, writing guides and helpful blog content, we help our users help themselves. In our support platform, we’re using an Intercom feature called “Educate” which allows us to create a searchable, FAQ-style knowledge base for our customers as well. Having good documentation not only helps mitigate the need for support, but when we are helping customers it is helpful to have a resource to supplement an answer and have a reference to point to that they can re-visit over time.

Developer content must be insightful, reliable, show how and why an application works, and always: helpful.

No matter how many features you have: your product is only as good as it’s documentation. Documentation adds value to your product and helps facilitate ease of use for your product. Since a well-documented product is easier to use, it is therefore more valuable and useful.

The End Goal

There’s nothing like the feeling you get when you have successfully delivered a high-level support experience, helped a customer, and receive a compliment like this:

“It was really easy to get started, and I am already making meaningful discoveries with the queries I have created.”

This is why we work so hard to deliver a high-quality developer experience. This one also makes me blush 😊

“I don’t have any questions. Your documentation and examples look very straightforward and easy to implement!”

They engaged with us, just to tell us we’re awesome! With that, well we’re going to keep working hard. Having an API product and strong documentation is a reputation we’re proud of and will keep living up to.

In closing, here at Keen we’ve created some amazing developer tools to help companies build data streams, compute, and customer-facing dashboards into their own products. My team and I have spent a lot of time developing support tools and writing quality documentation about our analytics API Platform to enhance ease of use but very importantly to also provide our developers with a great experience.

We believe in investing in creating relationships with our customers, and keeping it human. At the end of the day, when you talk to a human at Keen, know that it’s someone real that is interested in helping you.

Calls to Action

  • If you liked this article then recommend it by clicking the heart 💗
  • If you feel inspired, share it with your own teams on Facebook and Twitter. You’ll find me on @jandwiches 🍞

Access Key Creation and Management Tool for User-facing Metrics

Here at Keen we’ve built the user-facing metrics and analytics API including a tool for creating Access Keys. Access Keys are authentication tokens that can be used to grant permission to read or write data to Keen, or automatically enrich events with entity data.

The UI tool for managing Access Keys gives you a simple point-and-click method for generating keys, as well as an easy way to see all of the keys you have created. Of course, as always these Keys can be provisioned and customized via our lovingly-crafted API programmatically.

In case you’re not familiar with custom API Access Keys, the main use case for creating an Access Key is security. By defining custom permissions for different users, you can lean on Keen’s security features to serve data + end users analytics instead of building your own tools from scratch.

Some other use cases for custom Access Keys include:

  • You’d like to build in custom permissions and follow security best practices
  • You’re presenting end user dashboards with analytics to your customers and want to ensure that customer A can’t see customer B’s data
  • When writing data you want to make sure that customer A & B’s data streams don’t mix
  • You’d like to make sure administrative operations in Keen (such as deletes) are not granted to all
  • You’d like to stream in data from other sources via webhook and still take advantage of Keen’s Data Enrichments
  • You’re interested in adding entity data or Master Data to every event

Your Access Key can allow you to add entity data to each of your events — this is a powerful ability. By specifying what you’d like to append just once in the Access Key’s autofill property, you can bake a particular user, customer, or company’s entity data into each event. For example:

“autofill”: { “user_id”: 232130982, “name”: “Some Name” }

Boom💥 These properties will show up in every single event written with that key.

Autofill can also be used to enrich your incoming webhook data stream via Keen’s Data Enrichment Add-Ons. If you’re streaming SendGrid email data, long URL strings which exist in all Click events can be enriched and parsed to become more useful using the URL Enrichment. (Note: Because it’s a webhook, if a property is missing we currently have no way of notifying you if events fail. As always, test your integration.)

The SendGrid data model also includes in each event the IP address, so wherever a user opens the email you can maximize the power of the Access Keys and use autofill to enrich those Opened events with IP to Geo Data. Heck, enrich all of your events. Keen has five data enrichment tools for even more cool analyses.😋

Here’s an example Access Key definition. You’ll see the autofill property being used to include some entity data + the IP to Geo and User Agent Data Enrichments:

  "name": "Access Key for Acme Corp with Data Enrichments",
  "is_active": true,
  "permitted": ["writes"],
  "options": { 
    "writes": { 
      "autofill": { 
        "customer": {
          "id": "93iskds39kd93id",
          "name": "Acme Corp."
      "keen": {
        "addons": [ // Keen Addons to be used
            "name": "keen:ip_to_geo", // IP to Geo parser add-on
            "input": {
              "ip": "ip_address" // Make sure the "ip_address" field exists in each event sent
            "output" : "geo"
            "name": "keen:ua_parser", // User Agent parser add-on
            "input": {
              "ua_string": "user_agent" // Make sure the “user_agent” field exists in each event sent 
            "output": "tech" 
} // continue rest of Access Key definition }

Do you have a use case where you might want to define and manage fine-grained permissions for who can access your data streams and analytics? Thinking of ways you can incorporate data enrichments or entity data into your events?

Start building with Keen and try it out!

Six Steps to Building Successful Customer Relationships

Analytics is a complex beast. When you think about everything you want to build and track, it’s easy to get carried away. That’s why at Keen, we created a API-based platform with tools that make creating something from nothing much easier. Instead of doing it alone, let’s build together!

Last year we expanded from a self-service tool to an enterprise product serving large organizations with increasingly complex needs. In addition to advanced features, we also added hands-on help and organizational planning with the Customer Success Team.

As we’ve worked with bigger and bigger organizations, we’ve found the following framework to be really valuable.

1. Evaluate your customer’s needs

This may seem obvious but asking the most basic questions is really important. Before you take a step forward, take the time to ask meaningful questions about your customer’s business.

At root, what are you trying to accomplish? And how can you work together to meet these goals?

It’s easy to get carried away with all the things that are possible, but getting mired in details that are not mission critical takes attention away from the primary goals. Remember to stay focused on why your product is needed.

This shift in the conversation from the “nice-to-haves” to primary business goals helps identify which tasks might not be effective/good uses of effort. By using this focus, you can drive home and highlight the core value proposition of your service. In our case at Keen IO: analytics.

By making sure our customers understand what we’re good at — delivering a stable platform for data ingestion, analysis, and visualization — we can continue to showcase the progress they’ve accomplished in a short amount of time, the good work they’re continuing to accomplish, and then coincidentally how good of a job we are doing as their platform provider.

2. Stay Organized

When we work on customer integrations, staying organized is crucial. A Gantt Chart or Project Plan is my preferred method of staying on top of my delivery timeline and critical deadlines. This shared view helps the customer stay abreast of expected timelines, and avoid any misunderstandings in communication.


Sample Project Overview

Don’t skip this important step: Communicate timelines for when you are going to do something.

Nothing is more frustrating that making a request to a team and getting no response. Respond quickly if even just to say “I’m looking into it.” Some answers may take longer than others to reply to, and some customer requests may not be completed overnight. Providing a timeline is providing a reasonable expectation, and communicating this information in a structured way is key.

3. Maintain regular communication

When your product evolves to include new features that may be helpful, remember to let your customers know.

I tend to write frank and friendly emails to describe new feature sets and partnerships, and at times I also send along blog articles written by our team. It always feels good to find out about a change to something you’re used to or something completely new. Feature announcements have been a way for our customers to share excitement for what is upcoming for Keen.

Don’t be shy about advocating your own product’s features and regularly. By recommending use of unused or newer features, you can help your customer figure out how they can be using your technology better. There may be a more efficient or effective way to do what they’re doing.

Plus, by keeping in touch and knowing what our customers are trying to do, we can share lessons from customers doing similar things. It gives us the opportunity to reassure customers, remind them that they’re not alone in thinking about a problem in a particular way, and that they’ve chosen the right approach and technical solution for their project.

I make it a point to share helpful solutions with customers even when they don’t directly involve our product. A conversation like this has the added benefit of letting your customer know you’re available to bounce ideas off of.

Even when there’s bad news, we’ve found that customers are very appreciative when they receive a message directly from us. They appreciate the personal message and helps to receive a heads-up from you before finding out about a patch or planned downtime from anywhere else.

An added bonus of staying in touch and updating customers on your product’s best practices is that you can protect your operational teams from suboptimal customer usage patterns that can become stressful or expensive in the long term.

4. Periodically recheck goals

To keep abreast of your customers’ day-to-day operational needs and stay relevant to their business, it helps to establish periodic check-ins. At Keen we do these on a quarterly basis.

Each quarter we run an in-depth integration analysis and spend time doing a business review with our customers. Sometimes, this turns out to be a big investment of time. So why do we do this?

For one thing, it feels good to help customers succeed. But also, our customers’ success is our success. In the long run, we’ve found that the customers we’ve helped attain their own success tend to recommend Keen IO to others.

When we help customers achieve their current business goals, we build trust with them. It makes the organizations and companies we work with more likely to continue the relationship and build more integrations on top of Keen.

5. Include the customer in the product feedback loop

We share our product roadmap with our customers and actively ask what our platform’s current limitations are. Including our customers in the Product Roadmap, and allowing their input to drive the future of Keen’s product is core to our methodology for success!

As members of the Customer Success team, we become experts on the best ways to use Keen. In the process of collecting genuine customer input and bringing our customers up to speed on what’s next, we’ve gained valuable data on how to help future customers undergoing integrations too!

At times, building a requested piece of technology to help one specific customer’s goal in our platform has led to creating new product that has allowed all of our customers realize benefits.

In these Product Roadmap Sessions with our Chief of Product, our customers have even shared with us amazing tools they’re proud of and have spent time building on top of our open source toolsets. These have become fantastic opportunities to cross-promote and build a partnership, and deeply meaningful moments to learn from the people and their use cases we originally built the platform for.

6. Be yourself.

You can’t forget or unlearn how to be yourself, so bring your full self and best traits of yourself to work. If you’re fun, quirky, funny, or clumsy (I may or may not be some of these things 😜 ), show that side of who you are. Because if you are being your true self, it shows. Your genuine feelings and empathy, the moments you’re happy or sorry that you let your customer down conveys your message in the most clear and honest way possible.

Thinking about ways to do right by your customers? Do you have some of your own tips or style of working with users to share? Please leave a comment or start a conversation over DM, you’ll find me on Twitter as @jandwiches. 🍞

Announcing: Search on Keen Docs

We’ve been spending time working on the Developer Experience of using Keen, making the Keen documentation searchable is one of the first updates with more to come.

Try it out here!


In the weeks to come, we’re excited to write a technical blog post on how we implemented search in our docs with Algolia. At Keen IO, we are a developer-first company and believe in creating a world-class developer experience. We have functional tools and API’s for our developers to build applications that show off their data quickly. And we also believe that the workflow on our site should be as easy-to-use as possible, and we’re committed to creating this positive Developer Experience.

Do you have feedback for our Developer Experience? Just drop us a comment or write to us at

Happy Coding!

–Developer Advocacy Team


hint: this image from our search contains an easter egg ;)

Data-Driven Product Design

Hi, I’m Maggie, a Data Engineer at Keen IO. I presented this talk on “Data-Driven Product Design” at The Industry Product Conference back in September. It was a great event that brought together product leaders from around the world.

The talk provides a breakdown of the type of data and knowledge you can collect about your users, some sample analyses, and information on what makes a good metric.

To really drive those points home, I’ve included real-world examples of how companies have used data to drive product decisions and pointers on common pitfalls to avoid.

“Data-Driven Product Management” slides on Speaker Deck:

Additionally, here’s a link to audio and video that accompanies our slide deck!

Hope this helps you understand user behavior and develop an approach for your product to stand out! Feel free to reach out to me with questions on twitter @jandwiches or ping us on our community Slack!

How to do a Join on Event Data

Joins are a powerful feature in traditional static databases that combine data stored in two or more entity tables using SQL. You might use a join to answer a question like “Which customer spent the most money last month?”

A lot of our customers have asked us “Can I do a join with event data?”While you can’t do a traditional join on event data, you can accomplish exactly the same outcome by running a group_by on an event property. It’s flexible and very easy!

Here’s how:

First, if you were using a traditional entity database recall that the information you might need for your particular analyses are stored in strict, separate tables. With Event Data which allows for non-normalized and flexible schemas, all of that information properties about the user and their actions are already there: right inside the event, every single time!

To illustrate this, let’s take a look at a sample event. The event is an action triggered by a customer or user. Along a definition of what action occurred, the event contains other properties regarding when it occurred, who did it, on what device, and other most recent information about the user at that time.

If you want to learn more about the differences between Entity Data and Event Data, check out our more detailed guide on: “How to Think About Event Data”.

Here’s a sample Purchase event. If you work at an e-commerce company, you will probably want to track purchases (very important!). Every time you track a purchase event, you can include rich data about the purchase.

Sample Data Model for a “Purchase” event:

purchases = {
   "user": {
       "first_name": "Arya",
       "last_name": "Stark",
       "email": "",
       "id": 22
   "order": {
       "id": "XD-01-25"
   "product": {
       "list_price": 19.99,
       "description": "This is the best Dog Shirt",
       "name": "Dog Shirt",
       "id": 10
   "keen": { // these keen properties are automatically added to each event
       "timestamp": "2015-06-16T23:24:05.558Z", // when the event occurred
       "created_at": "2015-06-16T23:24:05.558Z", // when the event is written
       "id": "5580b0153bc6964d87a3a657" // unique event id

As you can see, every time a purchase is made we are tracking relevant information such as:

  • The action that occurred: a purchase
  • Details about the user
  • Order data
  • Product information
  • Timestamp information (when the action occurred)

These properties are included right in the event and allow for rich analyses. In this format we gain the ability to easily derive efficient querying for sums, counts, averages, and quick and other aggregation analyses.

Here are some real answers we can obtain from asking our sample event data some business-critical questions:

  • Which products were purchased most often?
  • Which users have spent the most money?
  • What is the average order value?

Each of these analyses can be answered in one analysis call — without joins!

Let’s try it out with: “What was the most popular product?” Here’s what our analysis call would look like:

new Keen.Query("count", {
    eventCollection: "purchases",
    groupBy: "",
    timeframe: "last_week",

Analysis Result: Of our products, the “Mallard” and the “Horse Shirt” are the most popular.

0_vzslTSowVGznk1IW (1).png

Now, let’s say… we want to know which customer made the most purchases last week.

Which user made the most purchases? Here’s our query:

new Keen.Query("count", {
     eventCollection: "purchases",
     groupBy: "user.first_name",
     timeframe: "last_week", 

Analysis Result: Username “Sansa” & “Stannis” tie as our most heavy shoppers.

0_J5cuI9wnnWQnE-nW (1).png

Finally, let’s find out what our total gross revenue is across all users.

What is my total gross revenue?

new Keen.Query("sum", {
     eventCollection: "purchases",
     targetProperty : "product.price",
     timeframe: "last_week", 

Analysis Result: $439 (not bad for oddly specific, Game of Thrones, animal-themed t-shirts!)


Event Data vs. Entity Data

With entity data, you would use a SQL command which would require multiple joins on several tables to answer these questions. To answer the question “What was the most popular product?” you would need to have your users table, a products table, and a purchases table ready. You would get the same result, but the path to get there would be longer.

With Event Data, when an event is triggered you’ll know everything you know about the user and the user’s action as well as the point in time it occurred. This serves as a snapshot of the user as you know him/her. Some examples of rich properties and information your event can include are their name, username, account number, userid, age at that time, what device they were using, what was purchased, and any other properties you have available. Keen IO also features five separate data enrichments which automatically append a lot of helpful data at analysis time — they include IP to Geo, User Agent Parsing, and URL Parsing as examples. When you’re ready to query, this rich snapshot becomes incredibly powerful.

The most important point with event data is to think carefully about the kind of questions you’d like answered when you set up your data tracking. That way you’ll be sure to have the information available when it comes time to query.

So which is better: Entity Data or Event Data?

Both have their strengths. In general, entity data is best for storing static information about nouns (users, inventory, assets, etc.) while event data is ideal for tracking data related to verbs (signup, purchase, click, upgrade, etc.)

Very often, the questions that are most important to your business revolve around these user actions, and event data allows you to run analytics on them without having to do joins at all. Another benefit of event data is its ability to collect high volume — lots and lots of non-normalized data, and does not require a strict schema. This flexibility offers a lot of power to adapt to new types of properties you may want to include in your data at a later point, as well as the ability to query or segment against any property you’ve included with your data!

In the case there are data sources that really cannot be combined whether via an engineering challenge or the fact that the need was very ad-hoc in your data setup process and came after-the-fact, if you’re using Keen IO Streamsyou can stream your data via S3 to AWS. This allows you the ability to run SQL on your event data and join with tables you’ve loaded into the Amazon environment.

Learn More About Modeling Event Data

To learn more about what to track, and when, check out our Data Modeling Guide.

Know of data in mind that you want to start exploring? Sign up for a free account now.

Questions? Join our Slack chat or DM on Twitter @jandwiches 🍞.