We are joining Freshdesk; Airwoot will continue as a standalone product and much more.
When we started, back in 2012, customer support was slow as snail and email was still a primary channel. Service level expectation were low and nobody expected response within minutes. Social media brought the tenets of Immediacy, Transparency, and Opinion to customer support; and mashed them together that we see as a firehose of thought vectors from it's users. With such customer-centric tenets no wonder we were about to witness a paradigm shift in customer support. Fast forward to now -
Brands of today are more honest and transparent than ever before in the history. Social media platforms such as Facebook & Twitter are heavily investing in creating infrastructure for customer service - Providing great customer service by Twitter and Facebook wants to replace +1800 support lines with messenger.
At Airwoot, we are proud of how we have contributed to this movement.
We introduced a high-speed ticketing interface that uses Kanban to track issue progress. It's not uncommon for major brands to have 10,000 users on an average interacting with them on twitter everyday. The high-speed interface helped them to consistently clock response times under 2 minutes and responding 98% of customers.
We built an agent performance dashboard from the ground up. It looks like focussing on individual performance and then stacking them up against top performers in the team brought out the best in them. Psychology matters.
Most importantly, we developed a state of art noise-cancellation technology that leverages deep learning to filter the noise from social media. We tell you what's relevant from the waterfall of mentions that are bombarded to you.
a tiny pie (4px radius) as a fully aware service level meter fondly named violation dot.
a smart auto-routing that puts your ticket routing into autopilot.
a virality score that alerts you before a conversation goes out of control.
And the list goes on.
Next steps for Airwoot were to break into an organisation mode (product management, sales & marketing engine, human resource) and get the technology into as many hands as possible. As we grew from a handful of pilots in the beginning to now, where many of top consumer internet brands in India use Airwoot to learn and engage with their customers on social, we were on a lookout for a growth investment.
This is when I was introduced to Girish (CEO, Freshdesk) and the proposition of working together came up. Girish and his 600+ strong team at Freshdesk have been in this hyper-growth phase for the longest amount of time and we believed this will be a great home for Airwoot. Girish deeply cares about social and the future of customer support. In fact, Freshdesk was one of the earliest multi-channel helpdesk to introduce social as a dedicated channel.
and we decided to unite.
Now, as part of Freshdesk, we have a tremendous upside for quickly expanding Airwoot's impact to it's 70000+ customers around the globe.
Our whole team has already shifted to Chennai. Lovely city.
We are expanding our team size to 3x.
We can't wait to show you what's coming next.
Monitoring using Sensu, StatsD, Graphite, Grafana & Slack.
At Airwoot, we are in the business of processing & mining real-time social media streams. It is critical for us to track heartbeat of our expansive distributed infrastructure and take timely action to avoid service disruptions.
With this blog post, we would like to share our work so far in creating an infrastructure watchdog and more. We started with following objectives:
Monitor everything under the radar and thereby learn how the system breath.
Use the monitoring framework to collect data and power an internal dashboard for identifying trends.
Alert anything that need attention to appropriate handlers (engineering and client servicing teams).
Let’s dive.
Monitoring Framework
Sensu
Sensu is a feature-packed distributed monitoring framework that executes health checks for applications/services and collects metrics across all connected Sensu clients, which then are relayed to a Sensu server. The checks’ results can be handled differently based on their severity levels. We choose Sensu out of the many monitoring tools available for the following reasons:
ability to write checks and handlers for check failures in any language.
large number of community plugins available and good documentation.
easy horizontal scaling by adding more clients and servers.
it acts as a “monitoring router” that publishes check requests and collects results across all Sensu clients. The results along with their context are directed to custom defined handlers for taking actions based on the criticality of results.Source: Sensu Documentation - https://sensuapp.org
Sensu has three main components that are executed as daemon processes.
sensu-server runs on one or more machines in the cluster and acts as the command center for monitoring. It performs following actions:
schedules periodic checks on clients
aggregates the checks’ results and adds context to them to create events
events can be filtered and passed on to custom defined handlers for taking actions
sensu-client can subscribe to group(s) of checks defined on the sensu-server or can have their own standalone checks. sensu-client communicate with the server using the RabbitMQ.
sensu-api has a REST interface to Sensu’s data like connected clients, active events, and check results. It also has capabilities to resolve events, remove connected clients, and issue check requests. Sensu Entities
StatsD
StatsD is a push-based network daemon that allows a statsD client to collect custom metrics and export them to a collecting server. The catch here is that StatsD uses lightweight UDP protocol for relaying metrics to the metric store, so a slow metric receiver shall not affect application’s performance. We used the Python client for statsD to collect application level metrics.
There are three main data types in statsD:
Counters are simply time correlated count of events taking place per unit time. There are incr and decr methods for altering the value of a counter. We extensively used counters to track brand-wise documents from social channels like Twitter and Facebook. Here’s a code snippet for tracking mentions of a brand on it’s Twitter handle:
These mentions’ metrics can be displayed at arbitrary time aggregations. Here’s how we did in our Grafana dashboard. Grafana dashboard showing hourly brands’ mentions on Twitter calculated using StatsD counters.
Timers collect numbers times or anything that may be a number. StatsD servers then calculate the lower bound, upper bound, 90th percentile, and count of each timer for each period. We used timers to track the time in fetching social media conversation from Facebook and Twitter. Here’s the graph for the task that fetches comments on brands’ Facebook page: Grafana dashboard for tracking delay in fetching Facebook Comments
Gauges are a constant data type that are not subjected to averaging. They will retain their value until changed. We used gauges for computing the delays and queue lengths in our systems.
This is an excellent blog that explains these metrics in detail.
Graphite
Graphite is a database for storing numeric time series data. We use StatsD for collecting metrics, which are then stored in Graphite. There are three software components of Graphite:
carbon is a daemon that listens to the time series data. It has a cache that stores values in memory and subsequently flush them to disk at a regular interval. It has configuration files that define the storage schema and aggregation policies for the metrics. It tells whisper the frequency and the history of datapoints to store.
We have configured carbon to store most our metrics in a frequency of 10 seconds and for a month’s time. Here’s an example config:
[storm_stats] # name of schema pattern = ^storm_stats.* # regex for matching metric names retentions = 10s:30d # frequency:history for retention
whisper is a database library for storing the metrics. The location of whisper files can be set from the carbon-conf file.
graphite webapp is the default web-based graphing library provided by graphite, but we used the more powerful Grafana dashboard.
New Relic
Infrastructure monitoring of all EC2 instances including memory, CPU, disks capacity and IO utilization. Many out-of-the-box solutions are available, so we decided not to reinvent the wheel. We have been using New Relic for a while now and it has worked perfectly(well almost!), so decided to stick with it.
New Relic has a quick step-wise guide for setting up. The problem we faced with New Relic is with their “Fullest Disk” alerts which are triggered when disk space of the fullest disk mounted on the machine being monitored is beyond alert thresholds. This fullest disk alert once open prevents alerts for the remaining disk from being triggered.
We solved this problem using Sensu disk check plugin which allows to select the disk(s) to be ignored from the check.
Supervisor
We run all the critical processes on Supervisor. It only has support for processes that are not daemonizing, i.e., they should not detach from the terminal from which they have been started. There are many process control features provided by Supervisor including restart on failures, alerts when set number of restart attempts fails, redirect output of processes to custom log directories, and autostart process on machine reboot.
We have instrumented a Sensu plugin that notifies on Slack if a process crashes. Here’s the code:
The official monitoring doc is a good starting point for exploring metrics for monitoring Kafka. We use an open-source plugin released by Airbnb for sending the Kafka metrics to a StatsD server.
We have found the following metrics to be useful that we track,
Request Handler Idle Time, which tells us the average fraction of time request handler threads were idle. It lies in the range of 0-1, and should be ideally less than 0.3. Grafana dash for Kafka request handler idle time
In the above graph, the legends Min, Avg, and Current are added by Grafana. The average value for the entire graph is just under 0.4, which tells us that it’s time to scale our Kafka cluster.
Data/Message Ingestion across all topics helps us to track and comprehend the load on the Kafka servers and how it varies with time. Grafana dash for Kafka Data Ingestion
Alerts for Kafka
A Kafka instance runs Zookeeper and Kafka-Server processes. We run them through Supervisor which automatically restarts a process if it crashes and notifies on Slack via Sensu Supervisor check.
Apache Storm
We use Storm to process data that is consumed from Kafka clusters. The command center of our Storm clusters is the Storm UI, which is provided as a daemon process in the official Storm distribution. This blog is a good documentation for Storm UI.
We run all Storm process under Supervisor, which is instrumented with Sensu to alert Slack if any process is not in the running state.
There could be instances when all Storm daemons are running, but the topology might have crashed due to a code-level bug. For this scenario, we have written a Sensu plugin that parses the output of “./storm list” to check if given topology is deployed and activated.
Since, we do stream processing using Storm and Kafka, an important metric is Kafka consumer lag which tells how far is the consumer from the producers. It is essentially the queue length of tuples yet to be consumed by the Storm. There are also Sensu alerts on consumer lag that notifies on Slack if it goes beyond a threshold. Grafana dash for Kafka-Storm Consumer Lag
Gunicorn
Gunicorn comes with a StatsD instrumentation that tracks all the metrics and sends to a StatsD client over UDP. Run Gunicorn with following command line arguments specifying the location of statsD server and an optional prefix to be added to the name of metrics.
We used the following aggregations and transformations in Grafana for the Gunicorn dashboard:
Request status
series sum for all 2xx, 3xx, 4xx, and 5xx response codes
table of avg, current, and total legends help to summarize data for the given time interval
total count of exceptions in the given time range
response time average over one min windowGrafana dash showing last week's data of a production Gunicorn
MongoDB
MongoDB has in-built set of utilities for reporting real-time statistics on database activities. We leveraged them to built Sensu plugin that periodically parse output from them to sent to a graphite server. These Graphite metrics are graphed on our Grafana MongoDB dashboard.
The two most important utilities are mongostat and mongotop.
mongostat tracks the load on the servers based on database operations by type including insert, update, query, and delete. MongoDB dashboard
mongotop collect and reports real-time statistics on current read and write activity on a per collection basis. We wrote a Python script to send mongotop metrics to statsD client at an interval of 10 seconds.
Below is a Grafana dash of metrics for a collection graphed over a week time. The peaks and lows corresponds to the business hours, i.e., the reads from the collection were more during the business hours. MongoDB dashboard
Sensu plugins for MongoDB monitoring
Sensu community has metrics and checks for MongoDB.
PostgreSQL
We are primarily tracking the number of connections including active, idle, and idle in transaction on PostgreSQL. For this, we created a Sensu plugin that runs periodically to fetch data from pg_stat table and output as Graphite metrics that are relayed by Sensu. Here’s the code:
PostgreSQL also provides built-in Postgres statistics collector, whose data can be relayed to a Graphite database using Postgres Sensu plugins.
Celery
Celery is an integral part of our system. Increase in the queue length beyond threshold is a critical state which the team should be informed of.
We have written a Sensu plugin which fetches the queue length of Celery every minute, which is then relayed to GraphiteDB by Sensu. If the queue length is above our warning thresholds, the team is notified on Slack.
Here’s how the Grafana dashboard for Celery looks like. Celery Dashboard
The hourly average summarization in Grafana smooths out the peaks(when bulk tasks get assigned by Celerybeat) to comprehend the load on the Celery cluster. It gives insight as to when to scale the Celery cluster to add more workers.
That's it for now, we will continue improving on our goals to instrument a system-wide heartbeat. Please feel free to use comments to give us feedback or ask any queries.
Facebook believes that communication between businesses and consumers is fundamentally broken, and is heavily betting on providing a platform to fix that.
In recent updates to pages, Facebook introduced Responsive Badge which is aimed to show consumers if the brand is responsive on facebook or not. The qualify criteria to earn a responsive badge is very high.
Snapdeal is the first brand in India and amongst the very few brands in the world (~0.01% of brands worldwide) to earn the badge.
.
As per facebook,
To get “Very responsive to messages” below your Page's cover photo, your Page must have done both of the following over the last 7 days:
Responded to 90% of messages
Maintained a median response time of 5 minutes for all replies sent
and here are Snapdeal’s stats:
This incredible outcome is the combination of Snapdeal’s social media engagement team and Airwoot’s technology which uses machine learning to help brands set up real-time engagement helpdesk on social media.
Airwoot’s noise cancellation tech clocks ~ 90% accuracy in bringing out actionable conversations in real-time.
The success of any online campaign is driven by it's pulse on social media. Hence, when GOSF '14 came along, we decided to check out how the users reacted to the event. Around 450 brands participated, out of which we tracked the top 50 active brands on social media. The rest 400 brands were found to be too minuscule on their social media footprint to skew the analysis.
Twitter Activity
Here's a quick look at how the tweets and retweets timelines panned out across the three days of the event. There were prominent peaks in activity around noon everyday and it all seemed to die down towards the fag end of the day, only to pick up the next day.
We investigated the peak hours for the cause behind these distinct crests. Three of the biggest brands involved, Google, Snapdeal and eBay India, ran their campaigns each morning and contests around this time, thus resulting in massive engagement. Nokia Lumia (#poweroffive) and Shopclues (#shopcluesgosf) too jumped aboard the ship on 11th and 12th.
Engagement Analysis
A lot of the brands we tracked are extremely active on social media, so we checked out how much of the total share of tweets have been brands vs consumers. While at it, we also mapped the nature of posts the brands were involved in, in an attempt to figure out if the support-seeking users were affected because of the event, and we weren't disappointed at all.
GOSF was a strenuous event for social media teams and a very easy source of distraction from their raison d'etre on social media. Our analysis shows that brands were 20 minutes faster in their response times during GOSF as compared to the weeks leading up to the event. This demonstrates the maturity amongst the Indian brands in preparing for big events such as GOSF. Kudos to the customer-centric spirit here!
User Analysis
The brand vs consumer graph gave us a very clear statement that this event was consumer-driven. Some of the brands duly used the momentum of engaging users to spin off their own hashtags successfully, including Snapdeal (#gosfwithsnapdeal), eBay India (#lastshowonebaygosf) and Shopclues (#shopcluesgosf) etc.
Investing further, we drew ourselves a curve which gave us valuable insights into the number of tweets the users were making. The graph was rather compelling.
We took a logarithmic fit of the number of tweets made by every user and it gave us some damning numbers. The top 10% of the users, i.e around 3000, made up for almost 83% of the total engagement around the event.
The remaining 90% of the users tweeted at an average of 1.5 tweets throughout the event, which led to us to believe that GOSF wasn't really centred around the masses talking about it, as it could have been assumed from the sheer volume of engagement.
We further analysed the top engaging users and found out that the highest engaging users were relentlessly involved in campaign & contests. Here is are the top 10 engaging twitter handles along with their number of tweets and retweets during this event:
@crickyyash - 4280
@sanketdhende - 3378
@shah_himanshu - 2850
@dinku_cfc - 2476
@rajendra9prasad - 2468
@am_navin - 2392
@awwwww12121 - 2240
@dinnu_m9 - 1858
@sathishmunna - 1641
@bindaas_nj - 1449
The activity of the top engaging users reveals a trolling nature which shadows the true reach of such events.
GOSF 2014 has been widely called as a successful event getting thumbs up and reported user engagement upto 7 times more than normal., whereas Twitter has a different story to tell altogether and we believe it was a lackluster event only catering to contest & campaign mongers with no real skin (read: chatter) in the game.
Successful campaigns tend to sprout conversations amongst the consumers and it surpasses the brands. The GOSF story couldn't gain enough escape velocity on Twitter.
Introducing Jink: An Easy Way To Fight Email Templates
We took a quick timeout, scratched our itch, and made a workflow which makes authoring email templates a really smooth sanity-proof process.
As a startup offering software as a service and catering to enterprises, there is an innate dependency on transactional emails.
But with email clients not supporting any modern markup constructs, we have to painstakingly nest tables.
In short, its a disaster in the department of maintainability.
Noble folks at Zurb did a great job at closing all the incompatibilities among the email clients (desktop and mobile) and gave us Ink.
But we still have to remember their specific module patterns and above all, the problem of nesting tables which makes the template unreadable doesn't go away. We dare you an edit.
So, we mashed up Jade and Ink and came up with a completely original name for this short endeavor - Jink. Surprise.
Jink makes it easy to author email templates by keeping it concise and using Jade's indented syntax.
Jade is a HTML Template Engine. It provides abstractions such as mixins. Mixins helps you to reuse blocks of HTML. And we exploit that fact to write less and less while we author an email template using Jink.
Jink also has an embedded workflow. You can author your CSS in Sass. We have created grunt tasks for compiling Sass files and inlining css in HTML templates.
Jink have a github repo with complete documentation in it. Read it and if you want to share any concerns or feedbacks, open issues.
Here is a pen showing you the enriched guts of Jink and it also accompanies an example
mixin container() table.container(class!=attributes.class) tr td if block block mixin row() table.row(class!=attributes.class) tr if block block //- the columns mixin takes in the //- the number of columns and //- the name of the classes(space sepertaed) //- to be applied on the `wrapper` of the column mixin columns(number, wrapperClasses) - var wrapperClasses = wrapperClasses ? wrapperClasses : '' - var columnClass = number + (attributes.visibility ? ' ' + attributes.visibility: '') td.wrapper(class=wrapperClasses) - if (attributes.visibility === "show-for-small") // [if !mso]><!-- table.columns(class!= columnClass) tr if block block td.expander - if (attributes.visibility === "show-for-small") // <![endif] mixin fullWidthRow() +row() td.center(align="center") center +container +columns('tweleve', 'last') if block block td.expander mixin blockGrid(number) - var grid = "block-grid " + number + '-up' table(class=grid) tr if block block mixin button(label) table.button(class!=(attributes.style ? attributes.style : '')) tr td a= label //- Authoring starts from here table.body tr td.center(align="center", valign="top").global-wrapper center +container()(class="template-wrapper") +row()(class="title-row") +columns('two', 'last') td.text-pad .icon +columns('four', 'last') td.text-pad h1 Fuzzy Logic +row()(class="intro") +columns('six thought', 'last') td.text-pad To Be Or Not To Be. +row()(class="desc") +columns('ten explain', 'last') td.text-pad p | Author Douglas Clark asks how we can develop | a computer that can deal with the real meanings of the | opening lines from Charles Dickens' <em> A Tale Of | Two Cities</em>: "It was the best of times, it was the | worst of times", which is a paradox. +row()(class="footer") +columns('tweleve', 'last') td.text-pad Excerpt from <b>Programming for Design</b> by <em> Edith Cherry</em>
See the Pen antbo by hoodwink73 (@hoodwink73) on CodePen.
You got to be familiar with Jade and Ink before using what Jink offers. If you are not aware of Jade and Ink go through the docs, it won't take much time.
Let us know if you use Jink for any of your projects. We plan to add more higher level abstractions and create a resource list for building high quality hand crafted emails.
This is one of the template we created at Airwoot using Jink. It was fairly complex, given its an email template but Jink eased the process a lot.
Facebook currently has over a billion users, Twitter has 550 million registered accounts, and Google+, not to be left behind, has a billion active accounts (and about 359 million monthly active users). Social media is massive in size and reach already, and the numbers are increasing at breathtaking rates every day. It's also beginning to influence its users in different ways. 47% of Americans say Facebook is their #1 influencer of purchases, while 60% of Twitter users claim the platform plays an important role in their shopping.
With social media playing an increasingly important role in helping consumers (and potential consumers) make decisions, what role are brands supposed to play on the social media scene? 93% of marketers use social media for business, and 70% claim to have used Facebook to acquire new customers. Clearly, there are ways for brands to leverage social media to their benefit. But what are the broad goals of this, and how are they supposed to achieve those goals?
Goals of Brands on Social Media
These are some of the broad goals brands seek to achieve through their social media activity -
Establish brand presence
Create brand advocates
Proactive marketing
Market research
Generate leads
SEO benefits
Setup media newsroom
Accomplishing these Goals
Now let's examine each of the above goals one at a time, along with some strategies for brands to accomplish these targets -
1. Establish and promote the brand's presence - according to research by Millward Brown, "Currently many consumers we interview report that brands can be viewed more or less as “foreigners” or “outsiders” in social media circles, insincere at best or trying too hard to be hip and cool at worst." In order to build real relationships with consumers and establish a social media presence, there are a whole host of things brands must do - post content that appeals to their target audience; offer deals, promotions, contests, and other strategies to increase consumer involvement; engage with the consumers through conversations and by listening to what they want and acting upon it; regularly updating their profiles to keep abreast of the newest developments, and provide the latest information about the brand
Note however, that the last point comes with a caveat - brands also need to find the right amount of posting, so that they keep consumers engaged, but don't over-post and alienate them.
2. Improve relations with existing customers and create brand advocates – social media provides a unique opportunity for round-the-clock customer care (something consumers now expect, along with quick responses). By being good listeners, and working to engage consumers, brands have the opportunity to create brand advocates. Consumers are increasingly likely to voice their complaints and ask for solutions on social media channels. By providing quick and effective customer care, brands can create brand evangelists who will drive positive brand sentiment. In addition, they can also convert negative sentiment, in the case of dissatisfied consumers, by recognizing and resolving issues that are raised.
3. Proactive marketing - be it fan pages on Facebook or followers on Twitter, social media puts the brand in direct contact with consumers and potential consumers. By taking full advantage of the platforms, brands can use social media to engage in effective content marketing. Of course, this means going a step further than simply putting up advertisements (which generate lower-than-average click rates); brands need to establish a presence on social media channels in order to reach out to people (the next goal we address). They can then use this presence to post content that reaches a wide audience, and probably engages customers more than traditional advertisements.
4. Market research - social media platforms provide the perfect listening stations to gauge consumer preferences - through message boards, reviews, groups, updates etc. By listening to conversations, brands can discover what their customers are and aren't looking for, and can even keep track of their competitors (and perhaps learn from the strategies they're using).
5. Lead generation and garnering new customers - social media allows brands to reach past their existing consumer base, and with engaging content and advertising, leads can be generated. However, research shows that the best type of advertising is a product recommendation from a friend or family. Thus, along with their own advertising, if brands can create brand advocates who will promote them, they are much more likely to generate a greater number of leads, and create new customers.
6. SEO benefits - if you Google 'Oreo', the first couple hits are its website, Wikipedia page, and news for Oreo, immediately followed by its Facebook, Twitter, and Instagram pages. Social media profiles rank high in search engine results, so by using these platforms, along with other strategies such as promoting keywords, and providing content that consumers are likely to search for, brands can greatly increase their visibility. Also, the content on social media profiles can contain backlinks leading to a brand's website.
7. Setup media newsroom - social media is changing the relationship between brands and conventional media. Before, in order for the brand to be visible to the public, they would directly interact with the press, and were vulnerable to misinterpretation or exaggeration by the media. Now, brands can directly contribute the information they want to spread to their audience through social media channels, effectively removing the middleman in their quest to be seen and heard. Moreover, the press often relies upon these sources for their reporting as well, and will reference a brand's social media channels when reporting about them. Thus, social media has given brands more power in controlling their visibility, and what information is shared with the public, through their own channels, and through the press as well.
Aneesh is a student at Princeton University who is interested in Psychology and Computer Science. He is currently interning at Airwoot.
Highly inspired by the Sual Bass’ work, we present you an introductory motion graphics on Airwoot’s product philosophy.
No hyperbolic missives here - We are hiring
There are two ways to persuade people. The first is by using conventional rhetoric. It’s an intellectual process, and in the startup world it usually consists of a story in which you say, “Here is our company’s biggest challenge, and here is what you can help”. And you build your case by dunking jargons on sophisticated technology and frameworks which you are working on. While you’re trying to persuade, they are already arguing in their heads. A reason is not good enough to inspire action.
A much more powerful way to persuade people is by uniting an idea with an emotion. The best way to do that is by telling a compelling story. However, it demands a vivid insight and storytelling skill to present an idea that carries emotion to be memorable.
A powerful story brewed in simplicity: the design language
That’s what we’ve tried and inculcated in our story so far and that’s what we thrive to continue with. At Airwoot our design language pivots on simplicity, as we try to keep away from the ‘discordant-kaleidoscopic noise’.
If part of what design is about communicating through symbols, ‘Saul Bass’ has created a fair measure of what we now perceive as the contemporary design. Either they have actually created these symbols or contributed mightily to the notion itself.
We finally have our first identity redesign since our inception.
Our customers spend a significant time navigating through real-time social media streams, understanding context of conversations and taking actions to effectively respond to their customers. A day for a social engagement manager may just get overwhelming. We understood this discomfort and we are taking our first steps to simplify Airwoot. We are not just looking at simplicity through the lenses of clean and minimal interface. Our journey starts by reducing any superfluous steps to achieve a result anywhere in app experience.
And while we are making our product simple, we are embracing simplicity as our company philosophy. We believe ideas, implementation and processes innately arrange themselves to a default organised state of simplicity. A state where everything is accessible without the anxiety or confusion. But to attain that state, we need to put a lot of effort and we will.
Our effort pervades every aspect of the app and while we have already begun the climb we decided to unveil our first complete endeavour, our new identity.
And it has a name. Say, hello to Yoko.
Typography
Karbon is an open, geometric sans serif with a contemporary spartan finish. It is an exploration of Paul Renner’s reductionist Futura concept channelled through the proportions of Eric Gill’s eponymous sans, with a slight nod towards Jan Tschichold’s Uhertype sans-serif.
We want businesses to meaningfully engage with as many customers on social media and we strive hard to make Airwoot intuitive and easy.
Arijit rides on the innovation spurt that is happening right now in web development and has a passion for thoughtful, meticulous yet minimalistic design and efficient handwritten code. He's been doing front-end development for a short of few years grabbing every opportunity to learn and improve.
Arijit dropped out from engineering in his final year, and turned to MOOCs to hone his skills in web development and programming. Within an year, and after almost a dozen multi-disciplinary courses in Web Development, Number Theory, Moral Philosophy, Academic Writing and Design Thinking; He is now the seamstress of Airwoot's product experience pushing the limits and turning complex user experience problems into simple and usable interfaces.
Arijit writes:
"I consider myself an experiment in contemporary education.
I do support and embody an education rich in foundation and analytical thinking but present days demand foundations to be augmented with vocational skills. Its great to know the time complexity for insertion in a Red-Black tree but its imperative to have skills to build things that can co-exist and compete in the real world.
My current goals entails being a Javascript performer and contributing back to the wonderful community of web development."
--
Arijit has quite a wide reading appetite and when not meticulously carving out details in the user experience, you will find him reading variety of subjects from rationalism to existentialism to futurism. His favorite authors include Charles Babbage and Tesla.
You can follow Arijit at @hwk73 and read through his experiences on Medium, and his musings on Tumblr
At Airwoot, we are building the smartest customer experience platform on social media and we welcome Arijit to our growing pool of talent.
Essential guide to become a truly customer centric company
Businesses have realised that creating a customer-centric company is one of the top priorities where today's customer is ever connected, on the go and highly opinionated. This is the customer that know they have the power and want you to put them in the center of your world.
At Airwoot, we are trying to radically improve the way businesses engage with their customers today. We work with few of the biggest online and consumer facing companies in India.
What are you doing to become a truly customer-centic company?
We have often asked our customers how they want to create a truly customer-centric company and what concrete steps are they following to become a truly customer-centric company.
While majority of the brands have started making efforts in embedding the customer-centric philosophy into their business processes, however there is a lack of process methodology which Brand managers/CXOs can follow to implement an organisation-wide structure to this philosophy.
Here is a compact version of our essential guide which introduces the four-step checklist which any business can follow to implement truly customer-centric processes in your company.
If you are a brand manager who is in the process of creating customer-centic processes in your company, we would love to hear from you. Please share your thoughts and feedback in the comments below.
Essential guide to become a truly customer centric company from Airwoot
Welcome @idesignthyshit, Airwoot’s first Entrepreneur in Residence.
Airwoot + Anant Ahuja = woot!
Anant’s passion for art and typography with his unique gift of clean minimalist design aesthetics has opened him already international doors. He graduated from Whanganui School of Design, New Zealand, and has amazed clients at Saatchi & Saatchi India, infusing their projects with his clear design sense. Dabbling illustration, typography, and branding, Anant has assured that his name became an echo through the Indian graphic design scene. Currently he is a creative project partner at Animal as well as a consultant design director at Chakraviyuh in India and UK. Some of his kickass work and know more about him, at his website
Anant is totally in love with type and illustration, thats why we love him so much. He is fearless in experimenting with varied mediums that helped him explore new artistic options. That’s where Airwoot kicked in for him.
The team understands my aesthetics and gives me the opportunity to shape their digital platform. If a company has no creative direction, it shouldn’t exist. Airwoot is highly design driven and that’s what made me pick up the challenge.
As Airwoot’s first Entrepreneur in Residence, he is responsible for the creative vision and communication design of our brand. This collaboration opens a new creative journey for us to adventure with him into the world of art that he has discovered and push Airwoot’s design to the next level.
Airwoot is happy to welcome Prabu Palanisamy to our growing pool of talented team members.
Born and raised in Chennai, Prabu has deep roots in mathematics with exposure to theoretical and applied ressearch quite early in his career. Prabu studied Theoretical Computer Science from PSG College of Technology and went on to intern with Data Sciences Lab, GE Global Research and Institute of Mathematical Sciences, Chennai.
Prabu joins us most recently from Serendio where he worked in the R&D team in the area of natural language processsing and sentiment classification in social media.
Built on the principles of knowledge-based businesses, work at Airwoot related to vertical intelligence relies on Machine Learning and NLP. Social media is continuously evolving and unlike the current practices in Machine learning, the statistics of the data we observe in social media shifts very rapidly. This continuous change in the feature of interests makes it tedious to use standard supervised single-machine learning training algorithms and the shift towards unsupervised adaptive learning models have become imperative.
Prabu shares our company philosophy and will join the machine learning team to ship product with deeper vertical intelligence.
Rethinking Facebook - for customer support - Part 1
We at Airwoot, are set out on one mission - to make Customer Support as realtime as possible, and we are starting with Social. Social media platforms like Twitter, Facebook and Google+ are really good at networking and marketing but fail miserably when a Brand wants to provide Customer Support.
Social media or the existing engagement tools such as tweetdeck, hootsuite etc., are inept in handling customer support engagement such as tracking a customer, collaborating within multiple support agents or external teams, enriching the knowledge base of frequent customer problems, maintaining service levels and generating actionable metrics for brand managers and CXOs.
Airwoot makes it easy for businesses to handle customer support on social media.
When I started out this time around, our goal was pretty clear. I wanted to rethink how Facebook could be used as a Customer Support tool from a Brand’s perspective following a customer centric approach.
Even though I knew what to achieve, I did not know how this was supposed to be done.
We at Airwoot, wanted to provide the best experience possible for this and I believe that we have gotten pretty close to it.
In this 3 part blog series, I want to walk you through our 8 iterations as to how we got here.
When we set out to integrate Faceboook, we already had a system which had Twitter working pretty well.
It looked like this
For those who don’t understand what the four columns mean, here is a brief -
Noise - Shows the direct Twitter stream which has the search data as well as all the public mentions
New Grouses - All direct messages being sent to the brand’s Twitter Channel as well as the public mentions which the system believes are Actionable are also pushed here. This is like an open pool out of which an agent can pick up a grouse to solve.
All Grouses/My Grouses - All grouses currently assigned to an agent solved/open are listed here.
Conversation - Shows the Customer specific details along with the one-on-one conversation which the brand is having with the customer.
Iteration 1 - Just getting started
The first step involved getting the backend ready for the new APIs which Facebook brings with it. While that was being taken care of, the front-end was also being revamped.
As the Grouse/Issue backend was not being changed that much, we set out to change just the Noise column, and instead of showing tweets, we changed it to show Only Cusomter Posts and their Comments along with Brand Post Comments. This was a quick iteration.
Pros
It was a quick iteration which allowed us to test out our new backend
Single Column change to adapt
Cons
There was no visual hierarchy between a post and its comments.
Also, for Brand Comments, the context was completely lost.
The only real separation between posts was some gutter space between them.
To show you how it looked like, here is a quick mockup of what we did.
Iteration 2 - Better understanding of Noise
We wanted to provide a cleaner view of the Noise area. Also, going forward with the customer centric approach, we decided that we need to have customer stacks and posts stacks.
Even though I don’t have a screenshot for you guys to see, but it looked pretty much the same as the mockup.
Pros
We got Brand Posts also into the system and got the context back.
The only good thing which came out of this iteration was it taught us what not to do. :)
Cons
As the conversation area was still kept the same, there was no real difference between the private messages and the public interactions (posts and comments). This was getting to become like a drag and needed to change
Iteration 3 - Rethinking Columns
This was our biggest change yet. I went back to the whiteboard and rethought how the conversations should look like.
Also, we realised that we need more room to incorporate Facebook Stream inside the app. We split up the Noise column into 2, namely Posts and Comments and it looked like this -
We implemented many little things in this iteration. I’ll list those down here
All posts would be visible all the time.
All comments would be visible all the time
Brand comments would not have an avatar image but instead be very minimal and would only have a blue indicator to their right.
As for the conversation column, we decided we needed a plot there as well. We split it into 3 sections, Public Interactions (for Posts and Comments), Private Interactions and Escalations.
Pros
The new conversation view gave us ample room to have a complete view of how this particular customer has been interacting with the brand.
Also this clear separation made it simpler to understand.
Dividing the Posts and Comments seemed like the logical way to move forward
Cons
There was no relationship between the post and the comments and it was getting harder to bring it forward
The brand comments had to be rethought as they were really confusing.
The next two posts will take us forward into the current iteration of the product.
Airwoot is growing, Welcome @raz0r and Experience-driven Development
We are happy to announce an addition to Airwoot's core team, Achal Aggarwal.
Achal joins Airwoot as Design Lead focussing on shipping fantastic product, attracting world class engineers and raising the user-experience quotient to the next level.
Previously, Achal co-founded Kinesis.io and was instrumental in developing kinect-based gesture driven web framework for developers. Kinesis closed its operation earlier this year despite of the love they acquired from international developer community. Achal has been building rich software user interfaces for past 5 years and before starting up kinesis, he worked for Disney, Apple, Opentable and Chute.
When asked what led him to Airwoot? he replied:
More than the product, it was the team which led him to Airwoot. The passion towards building the product and the science of the team has been really great.
Engineering at Airwoot is already influence with Achal's presence and we are now following XDD (eXperience-Driven Development).
Achal says:
More often than not, knowledge and skill set about a subject can be limiting to a persons capabilities. This happens a lot with programmers who tend to think in a limited frame of mind as to what is achievable via existing instruments and frameworks and what's not.
However designers prefer to work on an abstraction where they do not have to get restricted by instruments and frameworks.
I have learnt to step outside a programmers mindset and think outside the limited frame. When thinking about an experience, I no longer think about what's possible but rather what would be more simple and meaningful.
In order to build great products, developers have to embrace good design principles which puts the user experience in the center of the development process.
At Airwoot, we will follow XDD as a product development philosophy where one basic question will be at the helm of every sprint's story - "How will it improve the user experience?"
In Achal, Airwoot has found not only a gifted engineer with an eye for interaction design, but an individual who shares Airwoot's vision and philosophy in rethinking customer support and enterprising social media.
We are putting together a dream team in place and while our heads are down in finishing the open public release of Airwoot.
We are building the smartest customer support helpdesk for social media - Sign up for an early access - Airwoot. We believe in the power of small teams and we are looking for rockstar developers to join our core team.
This post is our Voyager Golden Record - a time capsule - carrying our company philosophy and vision to the future employees of Airwoot. We will drop this capsule into various time portals through these "hacker warmholes" known to us as Hackernews, Hackerstreet, Hasgeek, and even github gists, pastebins etc., in the hope that some intelligent lifeform be able to find it, believe in our vision and make contact with us.
If you have already found this bottle from the cosmic ocean and before you begin to read the message, here is a quick assessment checklist for you:
your emotional maturity is greater than your skill set
you are ready to sacrifice immediate seen benefits in exchange of uncertain future benefits
you are not attracted to titles
you don't need constant affirmations
Philosophy
We believe the next wave of economic growth is going to come from knowledge-based businesses. Some examples of knowledge-based or smart products could be -- a milk container which changes its color on reaching expiry; a smart thermostat which learns about the user behavior and adjust automatically on the basis of some usage heuristics; a tire which updates the changes in air pressure to the driver.
We are building Airwoot on the principles of knowledge-based business where, we are creating a smart support helpdesk and in this process, we are:
re-thinking customer support
enterprising social
making analytics actionable in real-time
The only way we can do this is by bringing us out from the traditional mindset of creating products with 10% improvements. When you are working for 10% improvements you get stuck in the existing instruments and assumptions; you are stuck in a slug! We are aiming towards 10x improvements; We are aiming for the moonshot.
Moonshot thinking makes you lean on bravery and creativity.
Moonshot thinking starts with picking a big problem: something huge, long existing, or on a global scale. Next it involves articulating a radical solution — one that would actually solve the problem if it existed: a product or service that sounds like it’s directly out of a sci-fi story. Finally there needs to be some kind of concrete evidence that the proposed solution is not quite as crazy as it at first seems; something that justifies at least a close look at whether such a solution could be brought into being if enough creativity, passion, and persistence were brought to bear on it.
knowledge-based Characterstics built into Airwoot
The more you use Airwoot, the smarter it gets.
The more you use Airwoot, the smarter the helpdesk agent gets.
Airwoot is built on real-time web framework and makes knowledge available in real-time (heck! we even have our own version of Pusher).
Airwoot is context-aware; It analyzes the support query and figures out if an existing closed ticket should be re-opened or a new ticket should be issued.
If you want to learn more about Airwoot's helpdesk automation features, talk to us. You can also read this post which briefly touches upon the Airwoot's architecture and its stream_manager module.
We have just started scratching the surface in re-shaping customer support with Airwoot and we have tons of ideas lined up for next months and years to come as we develop the technology further.
Our Team
Airwoot was started by two Ph.D dropouts in November, 2011 - @prabhatsaraswat (mathematical modeling) and @tanish2k (cloud architecture).
With deep expertise in data analytics, we have built the smartest customer support helpdesk on top of social media and we've been awarded with 75,000 USD worth of cloud computing usage by major cloud platform vendors incuding Amazon AWS and Microsoft Azure, as the promising new startup!
Our technology stack is built for real-time analytics and bleeds for performance; currently we use the following technology and frameworks:
Twitter's Storm Project
Websocket, HTML5 server-sent
Backbone.js, Coffescript, Twitter Bootstrap SASS, underscore.js and D3.js
MongoDB, Redis, MySQL
Celery, RabbitMQ/AWS SQS
AWS SNS, elasticsearch
We're expanding our team and looking for great people to join us. If this interest you, then check out our open positions and contact us.
Rock Bands and Startups: Cross-Correlation of Frequency Spectrum
*To Rock your startup, all you need is to structure your team like a Rock Band* This post takes a cognitive approach in recognizing uncanny similarities between a technology startup and rock band. While writing this post, I noticed this [infographic](http://www.televisionsky.org/2010/04/tech-startups-vs-rock-bands/) which generated quite a buzz in comparing the two. However, this approach is on the cognitive side in team formation and how audio spectrum analysis of a classic 4-member rock band when mashed with a technology stack spectrum brings out an interesting hypothesis on creating startup teams. Please feel free to point out any caveats in the assumptions and theories proposed here by us. -- *we, the imaginary scientists*. We begin with the team size comparison. ## Team Size Lets take a look of size of some famous rockbands from history and present: Rock Band Team Size ------------------------- The Beatles 4 Led Zeplin 4 The Rolling Stones 4-6 Radiohead 5 Pink Floyd 4 and few tech startups (please feel free to point out successful startups with small teams) Startup Team Size -------------------- Instagram 6 (technical) Reddit 5 Interviewstreet 4 (now with Hackerrank, they are 8) WebEngage 5 Mandrill 5 When you’re small, results are what matter, whether that means generating web traffic, app downloads or customers. If it only takes five member team to achieve numbers, then why to waste time in bringing extra resources which will require their own attention. Before, we discuss the team formation and roles, lets have a look at the frequency spectrum and understand what role it plays in music composition. ## Frequency Spectrum The audio spectrum is the audible frequency range at which humans can hear. The range spans from `20Hz` to `20,000Hz` and can be effectively broken down into five different frequency bands, with each having a different impact on the total sound. * Sub-Bass * Bass * Midrange * High Midrange * High Frequencies The four piece rock band is a well tried formula that potentially balances the audio spectrum. Drum kit, Bass guitar, Guitar, and Voice all blend together nicely and have the ability to fill the spectrum in a harmonious manner.  One of the critical factor in distinguishing a well recorded music is the role of audio spectrum and carefully placing the instruments within the spectrum. Each instrument resides in its own place within the audio spectrum. From looking at the chart one can realize that many instruments share the same range of frequencies and therefore when they are all represented within the same composition, they will actually begin to fight each other. *haven't you already started the correlation?* I have carefully crafted out the technology stack spectrum and aligned them into five bands in direct correlation with the audio frequency. Sub-bass <---> DevOps Bass <---> Storage Midrange <---> Server-side application High Mids <---> User Interface High Freqs <---> Javascript (server-side or client-side) ### Sub-bass vs DevOps In the audio spectrum , `sub-bass` is the low frequency zone which is felt more than it is heard, providing a sense of power. One can optimally, use `sub-bass` only if they have a very high quality monitor speakers. In the technology stack spectrum, `DevOps` was made possible only because of the cloud and tools/platforms that exist that make deployment and management easy. Quite similar to `sub-bass`, efforts in `DevOps` makes your product bleeds for performance and the experience is felt rather than visually percieved, providing a sense of power. ### Bass vs Storage `Bass` range determines how fat or thin the sound is. The fundamental notes of rhythm are centred on this area. Too much boost in the `bass` region tends to make the music sound inconsistent (due to reflections in lower frequencies). `Storage` layer determines how data-intensive (fat or thin) your architecture will appear. Big Data or Analytics startups will have a strong focus on the data layer that is capable of stroring massive amount of data but also how to retrieve and compute on the massive data. ### Midrange vs Server-side application `Midrange` determines how prominent an instrument is in the mix. Excess output at this range can sound tinny and may cause ear fatigue. *The ear is most accurate in the `midrange`, with highest accracy near 1 KHz (see the image below which maps the human hearing)* `Server-side application` is where the core of your product resides. Depending upon the nature of the product, this core might talk to the customers directly without any visual interface (especially where product value is served through APIs). In analogy to `midrange`, server-side application determines how effective is your stack and has the framework been chosen considering the usage patterns. Often, we see new-age startups either overkill or undermine the requirements. ### High Mids vs User Interface Human hearing is extremely sensitive at the `high midrange` frequencies, with the slightest boost around here resulting in a huge change in the sound timbre.  The `high midrange` is responsible for the attack on percussive instruments. If boosted, this range makes sound more clear and transparent. However, too much boost around this range can cause listening fatigue. `User Interface` is the visible layer of the technology spectrum and often recognized as the product itself. In analogy, to `high mids`, where the ear is the most sensitive to the music, `UI/UX` is where a user's eye clearly recognizes the product and an excessively bloated experience can cause fatigue. ### High Freqs vs Javascript `High Freqs` range is composed entirely of harmonics and is responsible for sparkle and air of a sound. Boost around higher frequencies make a recording sound more Hi-Fi. Morever, not all instruments can produce sound in the `high freqs` range. `Javascript` on a technology stack spectrum is placed on the extreme end. Not every technology startup is Javascript intensive especially in the era where an API is the product. A lot many can just quickly get up and running with lighter frameworks like jquery, coffeescript. However, when you want to do quiet a heavy lifting in the Javascript (server-side or Client-side), you might want to look at some of the more capable javascript framework such as Ember.js, Backbone.js etc. ## Team Formation Now, having compared technology stack against the audio spectrum, we are in much better position to analyze the roles and responsibilities of our team and how much spectrum coverage a startup ideally requires.  ### Drummer : Full-stack developer (Javascript heavy) The drum set is a set of percussive instruments that when combined, fill from low to high, the entire audio spectrum. From the low frequencies of the bass drum to the high frequencies of the high hats, the drummer can span through the entire audio spectrum and if not balanced properly, can drastically effect the quality of music. *Please take notice that Drummer is the most important member of any rock band.* Every startup needs a drummer -- a full-stack developer with ability to cover the entire stack spectrum. If your product requires Javascript (server-side or client-side) to do the heavy-lifting than make sure this full-stack developer has core competency in Javascript. *Airwoot is looking for a rockstar drummer who can play well with our python shop and do quite a heavy-lifting with Backbone.js [Join us](http://www.airwoot.com)* ### Bassist : Full-stack developer (DevOps heavy) A Bass Guitarist (`Bassist`) has two most vital functions within a band: * Rhythmic Foundation (provides steady pulse to the band) * Harmonic Foundation (provides harmony, glues them together) `Rhythmic foundations` in a startup is analogous to maintenance and monitoring of the stack-wide application (`Ops`) and be able to continuosly communicate to the rest of the developers, the current state and upcoming scaling issues. `Harmonic foundations` in a startup is analogous to database and storage foundations which binds the rest of the dev team in harmony with clear instruction on choice of data layer (SQL or NoSQL), schema design and storage API strategy. *Airwoot is looking for a rockstar bassist who can devise strategies for continuous deployment while database schemas are changing, who can juggle between `postgresql`, `mongodb` and `redis` and be able to handle provisioning, deployment and monitoring of applications, stack-wide. [Join us](http://www.airwoot.com)* ### Guitarist : UI/UX developer A lead guitarist (at times, along with rythm guitarist), provides the melody to the song. These melodic (or rhythmic) hooks catches the ear of the listener (also, because they are usually in the `midrange` to `high mids` frequency spectrum, to which our human ear has the highest accuracy) and hence the lead guitarist usually ends up becoming one of the recognizable faces of the band. Similarly, a user interface designer gives the melody to your product by developing the user experience design principles -- usability, typography, color pallette, and user behavior. *Airwoot is looking for a rockstar guitarist who is ready to make enterprise sexy again using the swiss-knife framework of photoshop, illustrator, html, css and javascript. We are re-thinking customer support, making analytics actionable in real-time and enterprising social. [Join us](http://www.airwoot.com)* ### Vocalist : product manager and developer A vocalist is often ambiguosuly represented as the frontman of the band and/or spokesperson by defining the band's image and personality to the general public. These can also play one or more instruments and quite often write the lyrics overlooking the rhythm, harmony and melody of the music. A vocalist in startup analogy, not necessarily always means the business development who is responsible to communicate the product to the customers, but primarily is someone who haves the precise understanding of product design. For startups, a vocalist is the application logic developer who is also the product manager who communicates with the whole team. *Airwoot is looking for rockstar vocalist who is a web app developer well versed with `python/flask/tornado` stack and distributed event queues.* ---- We believe its an interesting analogy and hope you will find it insightful in creating magic through powerful small teams. *#todo: take famous tracks of rock bands and make a spectrum analysis on the coverage of frequency bands and correlate with its popularity.* some references: * http://www.independentrecording.net/irn/resources/freqchart/main_display.htm * http://johnorrfranklinproject.com/wordpress/?tag=audio-spectrum * www.forbes.com/sites/stevecooper/2012/04/17/instagrams-small-workforce-legitimizes-other-small-start-ups/
_Please consider this our "hello world" post._ We are building the smartest real-time customer support helpdesk for social media. Signup here for early access - [Airwoot](http://www.airwoot.com "Airwoot"). This requires quite a heavy lifting; fundamentally, we do following: - *Listen*, for even a pin-drop on social media - *Filter*, through Airwoot's sophisticated filtering engine which segregates relevant support queries from social chatter - *Prioritize*, support queries on the basis of several complex logics - *Analytics*, to help improve brand's health ---------- This post explores how we take advantage of [Redis](http://www.redis.io)' high throughput and low latency operations (especially `SET` and `GET` with `O(1) complexity`). We will also discuss a particular design pattern of retrieving and storing Facebook private messages using Redis. At Airwoot, we use Redis as a shared memory for inter-module communication where access to Redis is available across the stack, and any module in our pipeline architecture can pass on the Redis keys to retrieve the message; process over it; and dump it back to redis. # Redis for fast and easy retrieval across the stack # Our `Stream Manager` module written purely in python does an excellent job in listening to various social media channels. It uses a hybrid mechanism of polling, using webhooks and subscribing to real-time updates. `Stream Manager` dumps every social mention in redis and embeds the unique-ids of each social mention in the redis key along with some internal semantics. for instance, a facebook private message is stored as shown in the representation below and the fetched json is dumped as its value in Redis by a simple `set` operation.  also, retrieving the total number of messages in the above given conversation is super easy with redis: m_keys = redis.keys(""1:fb_messages:t_id.252683058195016*") and messages can be fetched using the key list retrieved above (or better using redis pipeline): obj_gen = lambda id:cPickle.loads(redis.get(key)) message_objs = [obj_gen(key) for key in m_keys] ## Polling facebook page's private conversations using Messaging API ## > Messaging APIs allows you to read private messages sent to the Page and reply to them privately as the Page. You can't reply to someone more than twice until they responds back to you. People initiate the conversation with a Page and until someone has messaged you, you can’t message them. Facebook Messaging API allows calls with three types of pagination parameters (`Offset-based`, `Time-based`, `Cursor-based`) to track conversations. Each of the paging technique has its use depending upon the requirement of your application. Airwoot's `stream manager` uses `Time-based` offseting and stores the `since_id` param in redis keys for respective APIs. So, in order to fetch the most recent conversation: graph.get('/me/conversations', since=since_id) This will return all the conversations that have come since the `since_id` and it will include the whole conversation object (which includes all history of messages between the page and user) with paging for the subsequent messages. However, we only require the latest messages from the conversation. Hence, we store `conversation ids` of each conversation in redis as keys and `updated_time` of the most recent retrieved message in the conversation as the value of redis key. redis.set(x-id:fb_conversations:t_id.xxx, updated_time]) Next time, when we make a `GET` call to the conversation api, we check whether the `conversation_id` exist as redis key and if it exists what is the `updated_time` value. Using this `conversation_id` and `updated_time`, we make another batch call and fetch all the messages within this conversation which have come after the `updated_time`. graph.get('/t_id.xxx/messages', since=redis.get(x-id:fb_conversations:t_id.xxx, updated_time]) The new `updated_time` is reset to `conversation_id` redis key and each message is stored in redis with its json cpickled. Each message or a social mention is persisted, replicated and isomorphed in various entities. If the social mention is destined to become a support ticket, its one of the isomorphic forms will exist in ticket document (we use `mongodb` cluster for storing our tickets as documents). While irrespective of the fate of a social mention, it will pass through various analytical treatment such as training our filtering and classification engine, training our priority response engine, updating user's influence score and upgrading the orthography of our language modules. *If you have suggestions to further improve the facebook conversations retrieval or have an exciting case of how you are using redis in production, please share your thoughts in the comments, or email me at [email protected]* 