What is Segment?
Who uses Segment?
Why developers like Segment?
Here are some stack decisions, common use cases and reviews by companies and developers who chose Segment in their tech stack.
Back in 2014, I was given an opportunity to re-architect SmartZip Analytics platform, and flagship product: SmartTargeting. This is a SaaS software helping real estate professionals keeping up with their prospects and leads in a given neighborhood/territory, finding out (thanks to predictive analytics) who's the most likely to list/sell their home, and running cross-channel marketing automation against them: direct mail, online ads, email... The company also does provide Data APIs to Enterprise customers.
I had inherited years and years of technical debt and I knew things had to change radically. The first enabler to this was to make use of the cloud and go with AWS, so we would stop re-inventing the wheel, and build around managed/scalable services.
For the SaaS product, we kept on working with Rails as this was what my team had the most knowledge in. We've however broken up the monolith and decoupled the front-end application from the backend thanks to the use of Rails API so we'd get independently scalable micro-services from now on.
Our various applications could now be deployed using AWS Elastic Beanstalk so we wouldn't waste any more efforts writing time-consuming Capistrano deployment scripts for instance. Combined with Docker so our application would run within its own container, independently from the underlying host configuration.
Storage-wise, we went with Amazon S3 and ditched any pre-existing local or network storage people used to deal with in our legacy systems. On the database side: Amazon RDS / MySQL initially. Ultimately migrated to Amazon RDS for Aurora / MySQL when it got released. Once again, here you need a managed service your cloud provider handles for you.
Future improvements / technology decisions included:
Caching: Amazon ElastiCache / Memcached CDN: Amazon CloudFront Systems Integration: Segment / Zapier Data-warehousing: Amazon Redshift BI: Amazon Quicksight / Superset Search: Elasticsearch / Amazon Elasticsearch Service / Algolia Monitoring: New Relic
As our usage grows, patterns changed, and/or our business needs evolved, my role as Engineering Manager then Director of Engineering was also to ensure my team kept on learning and innovating, while delivering on business value.
One of these innovations was to get ourselves into Serverless : Adopting AWS Lambda was a big step forward. At the time, only available for Node.js (Not Ruby ) but a great way to handle cost efficiency, unpredictable traffic, sudden bursts of traffic... Ultimately you want the whole chain of services involved in a call to be serverless, and that's when we've started leveraging Amazon DynamoDB on these projects so they'd be fully scalable.
One of the challenges we've had to deal with as our product surface area has grown, is identifying and reproducing bugs. We use Sentry for exception monitoring, however, it's usually difficult to try to reproduce bugs. I first heard about FullStory from our friends over at Flexport (check out the Stack Story and you'll hear them mention it: https://stackshare.io/posts/how-flexport-builds-software-to-move-over-1-billion-dollars-in-merchandise). FullStory let's you record user sessions, and play them back to help you identify bugs and UX issues. You're even able to view the console errors live as they happen during the sessions!
We were pretty blown away at how comprehensive the product was at first, and it seems to be getting better every time I use it. Only complaint is that it's super expensive once you're in the hundreds of thousands of sessions so we had to stop trying to record logged out sessions, we only use it for auth'd sessions. We also started out using it via Segment but once we needed to watch out for the number of sessions we were recording we realized that it was impossible to restrict FullStory recordings on a per-page basis without ripping it out of Segment, so we ended up just using their JS snippet and putting that in the Rails views that we wanted to monitor closely.
The ability to share specific portions of sessions, speed them up, skip inactivity, and all sorts of other little features all add up to a really solid product that helps both our PMs and engineers improve our own product much quicker. I officially requested a Sentry + FullStory integration a while back https://twitter.com/yonasbe/status/871987738777616384, still waiting on this! #UserFeedbackAsAService #reproducing-bugs #sessionrecording #bug-squashing
Our primary source of monitoring and alerting is Datadog. We’ve got prebuilt dashboards for every scenario and integration with PagerDuty to manage routing any alerts. We’ve definitely scaled past the point where managing dashboards is easy, but we haven’t had time to invest in using features like Anomaly Detection. We’ve started using Honeycomb for some targeted debugging of complex production issues and we are liking what we’ve seen. We capture any unhandled exceptions with Rollbar and, if we realize one will keep happening, we quickly convert the metrics to point back to Datadog, to keep Rollbar as clean as possible.
We use Segment to consolidate all of our trackers, the most important of which goes to Amplitude to analyze user patterns. However, if we need a more consolidated view, we push all of our data to our own data warehouse running PostgreSQL; this is available for analytics and dashboard creation through Looker.
Segment has made it a no-brainer to integrate with third-party scripts and services, and has saved us from doing pointless redeploys just to change the It gives you the granularity to toggle services on different environments without having to make any code changes.
It's also a great platform for discovering SaaS products that you could add to your own – just by browsing their catalog, I've discovered tools we now currently use to augment our main product. Here are a few:
- Heap: We use Heap for our product analytics. Heap's philosophy is to gather events from multiple sources, and then organize and graph segments to form your own business insights. They have a few starter graphs like DAU and retention to help you get started.
- Hotjar: If a picture's worth a thousand words, than a video is worth 1000 * 30fps = 30k words per second. Hotjar gives us videos of user sessions so we can pinpoint problems that aren't necessarily JS exceptions – say, logical errors in a UX flow – that we'd otherwise miss.
- Bugsnag: Bugsnag has been a big help in catching run-time errors that our users encounter. Their Slack integration pings us when something goes wrong (which we can control if we want to notified on all bugs or just new bugs), and their source map uploader means that we don't have to debug minified code.
Customer.io Segment #Sendgrid Prior to using customer.io to automate our email campaigns, we had been using a combination of sendgrid and an engineer to manually set up campaigns in Rails. Since we had already been using segment to handle our data for other applications, integrating with customer.io took only a few minutes. Building automated email campaigns to connect and engage with our audience is a simple point and click, rules-based workflow. Importing html for emails from sendgrid to customer.io was a snap and the UX of the drag and drop editor is virtually the same as we had grown accustomed to with #sendgrid. I like that this platform has a powerful segmentation tool, which allows us to use relevant customer data such as website interaction behavior to help us craft personalized campaigns to connect with our users.
- A single API to integrate third-party tools
- Data replay that backfills new tools with historical data
- SQL support to automatically transform and load behavioral data into Amazon Redshift
- More than 120 tools on the platform
- One-click to install plugins for WordPress, Magento and WooCommerce
- Mobile, web and server-side libraries