TL;DR
At Gorgias, we work with over 16,000 ecommerce brands and one common challenge emerges over and over:
Ecommerce tools are essential, but too many tools becomes a burden.
With different teams responsible for different functions, brands risk creating a disconnected tech stack that causes inefficiencies, reduces productivity, and ultimately impacts profitability.
Ecommerce teams are shuffling between tabs, copying and pasting order numbers, searching for customer data, and trying to piece it all together. It’s not only inefficient—it’s expensive, frustrating, and unsustainable as you scale.
So we dug into that data.
Our 2025 Ecommerce Trends Report surveyed ecommerce professionals across industries and job roles to understand what they really think about tech stacks and AI’s role in it.
{{lead-magnet-1}}
There is now an ecommerce app for every possible use case a brand could need. But as businesses adopt new technologies for each part of their customer journey, their teams end up working out of dozens of platforms.
The study found that 42.28% of ecommerce pros use at least six apps daily to perform their role. Regardless of the number of apps used, integration and compatibility are a must. When technologies don’t talk to each other, you spend time context-switching instead of focusing on customer experience.
For Audien Hearing, Gorgias’s open API allowed them to create an integration with its warehouse software to manage returns directly in Gorgias rather than a shared Google spreadsheet. This integration helped them reduce returns by 5%, protecting their margins and leading to higher customer satisfaction.
Read more: How Audien Hearing Increased Efficiency for 75 Agents and Reduced Product Returns by 5%
The most successful ecommerce brands aren’t necessarily using more tools—they’re using smarter tools. Leading businesses are opting for platforms that are deeply integrated, AI-compatible, and built specifically for ecommerce needs.
A growing tech stack also comes with a growing tech budget. Each new app has new costs, including subscriptions, set-up, management, and development fees. They quickly add up.
Nearly 40% of ecommerce professionals spend $5,000 to $50,000 annually on their tech stack.
We asked ecommerce professionals what they actually value in their tools. Unsurprisingly, the answer changed based on who we were talking to.
Top tool benefits included:
There’s a clear difference between what ecommerce leaders and agents value in a tool and considering both is key to success.
Despite the benefits of using fewer, well-integrated tools, there are a few things that hold brands back from consolidating their tech stacks.
We asked respondents:
What, if any, are the biggest deterrents to consolidating your tech stack?
Top concerns are:
AI is dominating the world of ecommerce. It impacts every aspect of the customer journey, from brand discovery to the post-purchase experience. AI is actively reshaping the way ecommerce professionals work, so we wanted to know how they feel about it.
Despite growing usage and excitement, teams still have their concerns with AI:
Read more: 8 AI Trends in Ecommerce: What’s Changing and How to Prepare
The most impactful use cases we’ve seen aren’t just about reducing support ticket volume. AI is now driving revenue, increasing conversion rates, and enabling 24/7 coverage without expanding headcount.
Gorgias’s AI Agent is now capable of virtual sales assistance through personalized product recommendations, dynamic discounts to reduce cart abandonment, and cross-sells and upsells.
Top brands are already leveraging these new capabilities and seeing results. For example:
We asked one final question to make ecommerce folks really reflect on how they work:
How many tabs do you currently have open?
The average ecommerce professional works with 22 open tabs. We’re not here to judge, but if you’re looking to close a few of those tabs, Gorgias might be what you’re missing.
Gorgias replaces all that complexity with a single workspace. From support to sales, order management to automation, it all happens inside one platform.
Ecommerce businesses can now leverage Gorgias’s Advanced AI for both support and sales. Within the same AI Agent, ecommerce brands can
This blog just skims the surface of what we uncover in our 2025 Ecommerce Trends report.
Want the full story?
Download the complete 2025 Ecommerce Trends: AI Adoption & Smarter Tech Stacks report to access:
{{lead-magnet-1}}
TL;DR:
When customer service teams are at their busiest, they need a helpdesk that keeps up. That’s exactly why our Site Reliability Engineering (SRE) team has been working behind the scenes to make the Gorgias platform faster than ever.
Over the past year, we've made remarkable improvements to our platform to eliminate bottlenecks, speed up data retrieval, and reduce incidents. For you, this means fewer disruptions, faster load times, and a more reliable helpdesk experience.
Here's how we did it.
Our platform relied on a single, shared database connection pool to manage all queries. Think of it as having just one pipe handling all the water flowing through your house — when too much water rushes in at once, the whole system backs up.
In practice, this meant a single surge in database requests could clog the entire system. When lower-priority background tasks got stuck, they could prevent high-priority operations (like loading tickets or running automations) from working properly. This would cause the entire helpdesk to slow down or, worse, become completely unresponsive.
Using PgBouncer, a tool that manages database connections and reduces the load on a server, we implemented multiple connection pools. Instead of relying on a single pipeline to stream all requests, we created separate "pipes" for different requests.
Like how road traffic picks up again after an exit, routing our database traffic into separate connection pools makes sure high-priority customer interactions don’t lag behind automated background tasks.
This solution is future-proof. In the event that a lower-priority task is delayed in one connection pool, other functionalities of the helpdesk will continue working because of the remaining connection pools.
The results speak for themselves:
We've eliminated incidents caused by connection pool issues in the helpdesk completely. This reduced major helpdesk outage incidents by around four per year and maintained an average uptime of over 99.99%.
As Gorgias grew to over 15,000 customers, so did the volume of data. We’re talking data from tickets, integrations, automations, and many more. The combination of more users and data meant slower searches within the helpdesk.
However, the amount of data was not the problem — it was how our data was organized.
Imagine this: An enormous storage room full of file cabinets containing every piece of data. Sure, those file cabinets kept data organized, but you would still need to spend time searching through the entire room, running up and down aisles of cabinets, to find your desired file. This method was cumbersome.
We needed a more efficient way to keep our data easy to find, especially as more customers used our platform.
The answer was database partitioning — breaking our large datasets into smaller, more manageable segments. Using Debezium, Kafka, and Kafka-connect JDBC, all managed by Terraform, we migrated over 40TB of data, including 3.5 billion tickets, without a moment of downtime for our merchants.
Instead of a giant room with thousands of file cabinets, we divided that giant room into 128 smaller rooms. So now, instead of looking for a file in one room, you know you just need to go into room number 102, which has a much smaller area to search.
This approach allows our system to quickly pinpoint the location of data, significantly reducing the time it takes to find and deliver information to users.
Additionally, database maintenance has become more efficient. Some of the partitions can probably sit without needing to be changed at all. We just have to maintain the partitions that are getting new files, which cuts down on maintenance time.
Better database partitioning provides several benefits:
When incidents occurred in the past, our response process was inconsistent, leading to delays in resolution. It was sometimes unclear who should take the lead, what immediate actions were required, and how to effectively communicate with affected customers.
Additionally, post-incident reviews varied in quality, making it difficult to prevent similar issues from happening again. We needed a standardized framework to address incidents in a timely fashion.
To streamline incident management, we introduced a replicable, automated process:
With our improved incident management process:
With more brands catching on to how essential a solid CX platform is, our team's got our work cut out for us. Here's what's on the way:
Gorgias will inevitably face new challenges in performance — no system is completely immune to downtime.
But we've built our architecture with the future in mind, and it’s more resilient than ever as more and more brands realize the power of conversational AI CX platforms.
The result? A platform you can count on to help you deliver exceptional customer service, without technical issues getting in the way.
{{lead-magnet-1}}
TL;DR:
AI is no longer a futuristic concept associated with sci-fi movies and robots. It’s driving real change in ecommerce right now. Currently, 84% of ecommerce businesses list AI as their top priority. And it’s only getting bigger. By 2034, the ecommerce AI market is expected to hit $62.64 billion.
Brands that use AI to improve personalization, automate customer support, and refine pricing strategies will have a major competitive edge.
The good news? Most brands are still figuring it out, which means there’s huge potential for early adopters to stand out.
Let’s dive into the key AI trends shaping ecommerce in 2025, and how you can use them to future-proof your business.
Instead of searching for keywords, shoppers can upload a photo and instantly find similar or matching products. Visual search eliminates the guesswork of finding the right words to describe an item and reduces friction in the search process.
In 2025, improvements in computer vision and machine learning will make visual search faster. AI will better recognize patterns, colors, and textures, delivering more precise results in real-time.
For customers, visual search simplifies product discovery while brands benefit from increased average order values. Visual search creates more opportunities to surface related products that customers might miss during manual searches, ultimately boosting conversion and revenue.
Pinterest is already doing it. With Pinterest Lens, users can take a picture on the spot to find similar products or ideas to help them with easier purchases or creative projects.
Pro Tip: Optimize product images and metadata (like color, size, and material) so your products appear accurately in visual search results. Clean, high-quality images and detailed tagging will make your catalog easier for AI to process and match.
Conversational AI, like Gorgias’s AI Agent, already handles 60% of customer conversations. Brands that adopt it often see more than a 25% improvement in customer satisfaction, revenue, or cost reduction.
Soon, advanced natural language processing (NLP) will make it easier for customers to use text, voice, and images to find exactly what they’re looking for. These multimodal capabilities will elevate support conversations, resulting in fewer abandoned carts and support teams that can focus on more complex issues.
For example, Glamnetic uses AI Agent to manage customer inquiries across multiple channels, resolving 40% of requests automatically while maintaining a personalized touch. Their AI can automate responses to common questions, recommend products based on browsing history, and even track orders in real-time.
Pro Tip: Invest in AI chat tools that integrate with your customer support system and sync with real-time product and order data. Your responses will be accurate and timely, without losing the personal touch.
Read more: The Gorgias & Shopify integration: 8 features your support team will love
According to McKinsey, omnichannel personalization strategies, including tailored product recommendations, have a 10-15% uplift potential in revenue and retention. But with only 1 in 10 retailers fully implementing personalization across channels, there’s a massive opportunity for brands to innovate.
In 2025, AI-driven product recommendations will become even more precise by analyzing customer behavior, preferences, and purchase history in real-time. Predictive AI will adjust recommendations on the fly, showing customers the right products at the right moment.
Take Kreyol Essence as an example. They use Gorgias Convert to track customer behavior and recommend products based on past purchases and browsing patterns. When a customer buys a hair mask, AI suggests complementary products like scalp oil or leave-in conditioner — increasing average order value without feeling pushy.
Personalization boosts sales by helping customers discover products they actually want. Plus, it creates a more tailored shopping experience, which encourages customers to return.
Pro Tip: Test different recommendation strategies, like “frequently bought together” or “you may also like,” to see which ones drive the most conversions.
Learn more: Reduce Customer Effort with AI: A Smarter Approach Than Surprise and Delight
In 2025, more customers may use smart speakers and voice assistants like Alexa and Google Assistant to shop hands-free. AI will improve voice recognition and contextual understanding, so it’s easier for customers to find products they want.
Instead of fumbling with a keyboard, customers will be able to say, “Order more coffee pods,” and AI will not only recognize the request but also pull up the preferred brand and size based on past orders. Less friction will make the buying process more intuitive, especially for repeat purchases.
Voice commerce expands shopping accessibility and creates a more convenient experience for busy customers. It also opens the door for brands to surface product recommendations and upsell during the conversation.
Pro Tip: Optimize product descriptions and catalog structure for voice search. Clear, simple language and detailed product tags will help AI understand and surface the right products.
A recent McKinsey report suggests that investing in real-time customer analytics will continue to be key to adjusting pricing and more effectively targeting customers.
In 2025, machine learning will allow ecommerce brands to adjust product prices instantly based on demand, competitor pricing, and customer behavior. If a competitor drops their price on a popular item, AI can respond immediately, so you stay competitive without sacrificing margins.
Machine learning will also refine pricing models over time, finding the sweet spot between profitability and customer conversion.
For example, AI might detect that customers are more likely to buy a product when it’s priced at $29.99 rather than $30, and adjust accordingly. More competitive pricing means higher revenue and better margins, but it also increases customer trust when prices are consistent with market trends.
Pro Tip: Test different pricing strategies and monitor how they affect sales and customer behavior.
According to McKinsey, AI-driven personalization and customer insights can improve marketing efficiency by 10-30% and cut costs significantly.
In 2025, AI will analyze customer data like purchase history, browsing patterns, and feedback to generate smarter, more actionable next steps. Instead of guessing what customers want, brands will have the data to predict it.
For example, Gorgias’s AI Agent for Sales can identify a shopper’s interest level and purchase intent and then use it to adjust its conversational strategy. It analyzes shopper data like browsing behavior, cart activity, and purchase history.
Here’s how it would behave for different customers:
AI-driven personalization leads to a 5-10% higher customer satisfaction and engagement. Yet, only 15% have fully implemented it across all channels — leaving a huge gap to fill.
In 2025, AI-driven personalization will go beyond product recommendations. Brands will be able to adjust website layouts based on customer preferences, highlight products that align with their style, and even customize customer service interactions.
A higher level of personalization will boost conversion rates and customer satisfaction. When customers feel like a brand “gets” them, they’re more likely to make a purchase and come back for more.
For example, AI Agent for Sales can adjust discounts and provide smart incentives to drive sales. When adjusting for discounts, AI Agent analyzes shopper behavior, including browsing activity, cart status, and conversation context, to offer a discount based on how engaged and ready the shopper is to buy.
Pro Tip: Use AI to test different personalization strategies and refine them based on performance data. Small adjustments, like changing product order or highlighting specific categories, can have a big impact on sales.
Keeping the right products in stock at the right time is about to get a whole lot easier. In 2025, AI will predict demand patterns and automate restocking decisions based on sales trends, seasonality, and customer behavior. Instead of manually tracking inventory, AI will handle it in real time to avoid stock issues.
For example, AI could notice a spike in orders for a specific product right before the holidays. It could then automatically increase stock levels to meet demand or scale back on items that aren’t moving as fast. Real-time tracking means fewer missed sales and less wasted inventory.
Efficient inventory management not only cuts costs but also improves the customer experience. When products are consistently available, customers are more likely to trust and stick with your brand.
Pro Tip: Implement AI-powered inventory management to sync data across all sales channels. This ensures accurate stock levels and seamless fulfillment, whether customers are shopping online or in-store.
AI makes it easier for brands to deliver a personalized and efficient shopping experience. From helping customers find products faster with visual search to automating support with conversational AI, there are plenty of opportunities for personalization.
The brands that adopt and refine these strategies now will be better positioned to meet customer expectations and stay ahead of the competition. Start by implementing conversational AI and later test some other AI trends like personalized suggestions.
Ready to see how AI can upgrade your brand? Book a demo to see AI Agent in action.
{{lead-magnet-1}}
The best in CX and ecommerce, right to your inbox
TL;DR:
Chargebacks are more than a thorn in a merchant’s side — they’re a growing financial and operational threat. According to Ethoca, chargebacks are projected to more than double, from $7.2 billion in 2019 to $15.3 billion by 2026 in the U.S. alone. And while fraud plays a role, the primary reason customers file chargebacks is simpler: they feel ignored.
At Chargeflow, we recently published a comprehensive report analyzing why customers dispute chargebacks. The findings were eye-opening. While it’s true that fraud is a real concern, most chargebacks happen for a different reason: a lack of communication between merchants and customers.
Top stats from Chargeflow’s report:
When customers feel ignored or frustrated, they often turn to their bank for a solution instead of reaching out to the merchant first. Understanding these behaviors is key to preventing disputes before they escalate and cause chaos.
So, what actually drives customers to dispute charges? Here’s what the data says.
While chargebacks are often the cost of doing business, the truth is that many disputes are preventable — but only if merchants understand the root causes. We identified five key drivers behind chargebacks.
According to our research, most customers file a dispute right away after encountering an issue, leaving no opportunity to resolve the problem. Another 38% file within one to three days if they don’t receive a timely response.
Why? Customers assume the fastest way to get their money back is by filing a chargeback, especially if they receive no response from the merchant.
We found that 80% of customers never receive a follow-up after filing a chargeback. Additionally, 64% of customers state immediate communication is crucial, yet many businesses fail to reach out.
Why? Customers expect businesses to be proactive. When they don’t hear back quickly, they assume the merchant won’t help, making a chargeback seem like the best option.
98% of customers report a neutral to highly satisfactory experience when filing chargebacks, and only 12% are denied.
Why? Many customers believe chargebacks are faster and easier than dealing with merchants directly, especially if return policies are unclear.
The most common reason for filing a chargeback is “product not received” (35% of the cases). Other common reasons included:
Why? When customers don’t receive clear shipping updates or experience delivery delays, they assume their order won’t arrive and file a chargeback rather than waiting.
Friendly fraud occurs when a cardholder makes a legitimate purchase but later disputes the charge as fraudulent or unauthorized, leading their card issuer to reverse the payment.
Our research found that:
According to our State of Chargebacks report, 79% of chargebacks are actually friendly fraud, meaning they were filed for invalid reasons.
Why? Many customers mistakenly believe that a chargeback is just another way to request a refund, rather than a process intended for fraud or merchant failure.
📌 The takeaway: Most chargebacks aren’t actual fraud, but rather a result of customer confusion, impatience, or poor communication from merchants.
Merchants who want to stop chargebacks before they happen need a two-part strategy:
Chargebacks result from slow response times, poor communication, and unresolved issues, not fraud. Adopting AI-driven customer support and chargeback automation allows businesses to significantly reduce disputes and retain more revenue.
Many chargebacks happen because customers don’t receive a fast enough response. In fact, 52% say they will dispute a charge if the response time is too slow. AI-powered chatbots provide real-time support, resolving issues before they escalate.
Customers expect updates regarding orders and refunds, but often don’t receive them. 80% of customers report never hearing from a merchant after filing a chargeback.
Automated order updates, refund confirmations, and proactive notifications keep customers informed, reducing unnecessary disputes.
Customers expect round-the-clock support, but most businesses can’t provide live assistance. AI-powered ticketing and automation ensure every customer receives help, regardless of the time zone or urgency.
The result? Fewer chargebacks, faster resolutions, and increased customer satisfaction.
It’s impossible to please every customer. On average, chargebacks take 50 days to resolve successfully. Focus your energy on retaining high-value, long-term customers.
Lost inquiries take on average 15 days to resolve, and lost chargebacks take 38 days. Prioritize cases based on impact.
Advanced automated ticketing systems can route inquiries and prioritize urgent cases.
Ensure customer service teams have quick-response templates to speed their resolutions.
“Product not received” was the most cited reason for delivery-related chargebacks. Work closely with carriers and third-party suppliers to improve fulfillment and reduce disputes.
Use automated tools for real-time analytics, enhanced communication, and proactive alerts, which will reduce response times.
Successfully tackling chargebacks requires both proactive customer support and automated dispute management. That’s why Gorgias and Chargeflow work so well together to give merchants a comprehensive defense against disputes.
Post-purchase automation isn’t just about reducing customer support workload or quick replies. It's about finding the most effective ways to increase customer loyalty and prevent disputes.
Learn more about how AI-driven automation enhances post-purchase experiences here.
As you know, chargebacks are costly, frustrating, but most importantly, preventable. Our research shows that most chargebacks don’t stem from fraud, but from poor communication, slow response times, and customer uncertainty.
By prioritizing fast, AI-driven customer support and automated chargeback management, merchants can resolve issues before they escalate, improve customer experience, and protect their revenue.
With Gorgias handling proactive customer support and Chargeflow managing chargeback disputes, merchants get a powerful, end-to-end prevention system that ensures fewer chargebacks, higher dispute win rates, and, at the end of the day, happier customers.
Don’t let chargebacks drain your revenue. Take control today with faster, smarter automation.
Download Chargeflow’s full Psychology of Chargebacks Report to dive deeper into the data and start preventing disputes before they happen.
TL;DR:
Shoppers aren’t just open to AI — they’re starting to expect it.
According to IBM, 3 in 5 consumers want to use AI as they shop. And a McKinsey study found that 71% expect personalized experiences from the brands they buy from. When they don’t get that? Two-thirds say they’re frustrated.
But while most brands associate AI with support automation, its real power lies in something bigger: scaling personalization across the entire customer journey.
We’ll show you how to do that in this article.
Before AI can personalize emails, recommend products, or answer support tickets, it needs one thing: good data.
That’s why one of the best places to start using AI isn’t in sales or support — but in enriching your customer data. With a deeper understanding of who your customers are, what they want, and how they behave, AI becomes a personalization engine across your entire business.
Post-purchase surveys are gold mines for understanding customers — but digging through the data manually? Not so fun.
AI can help by analyzing survey responses at scale, identifying trends, and categorizing open-ended customer feedback into clear, actionable insights. Instead of skimming thousands of answers to spot what customers are saying about your shipping times, AI can surface those insights instantly — along with sentiment and behavior signals you might’ve missed.
Try this prompt when doing this: "Analyze 500 open-ended post-purchase survey responses. Identify the top 5 recurring themes, categorize customer sentiment (positive, neutral, negative), and surface any trends related to product quality, delivery experience, or customer support."
One of AI’s biggest strengths? Spotting intent.
By analyzing things like page views, cart activity, scroll behavior, and previous purchases, AI can identify which shoppers are ready to buy, which ones are likely to churn, and which just need a little nudge to move forward.
This doesn’t just apply to email and retargeting. It also works on live chat, in real time.
Take TUSHY, for example.
To eliminate friction in the buying journey, TUSHY introduced AI Agent for Sales — a virtual assistant designed to guide shoppers toward the right product before they drop off.
Instead of letting potential customers bounce with unanswered questions, the AI Agent steps in to offer:
With a growing product catalog, TUSHY realized first-time buyers were overwhelmed with options — and needed help choosing what would work best for their home and hygiene preferences.
“What amazed us most is that the AI Agent doesn’t just help customers choose the perfect bidet for their booty — it also provides measurement and fit guidance, high-level installation support, and even recommends all the necessary spare parts for skirted toilet installations. It’s ushering in a new era of customer service — one that’s immediate, informative, and confidence-boosting as people rethink their bathroom habits.”
—Ren Fuller-Wasserman, Sr. Director of Customer Experience at TUSHY
AI also helps you see the road ahead.
Instead of looking at retention and loyalty metrics in isolation, AI can help you forecast what’s likely to happen next and where to focus your attention.
By segmenting customers based on behaviors like average order value, order frequency, and churn risk, AI can identify revenue opportunities and weak spots before they impact your bottom line.
All you need is the right prompt. Here’s an example you can run using your own data in any AI tool:
Prompt: “Analyze my customer data to forecast revenue by segment. Break customers into at least three groups based on behavior patterns like average order value, purchase frequency, and churn risk.
For each segment, provide:
Here’s what a result might look like:
Instead of flying blind, you’re making decisions with clarity — and backing them with data that scales.
When used strategically, AI becomes a proactive sales agent that can identify opportunities in real-time: recommending the right product to the right shopper at the right moment.
Here’s how ecommerce brands are using AI to drive revenue across every part of the funnel.
Your prices shouldn’t be static — especially when your competitors, inventory, and customer behavior are anything but.
AI-powered pricing tools like AI Agent for Sales help brands automatically adjust pricing based on shopper behavior. The goal is to make the right offer to the right customer.
For example:
With dynamic pricing, you can protect your margins and boost conversions — without relying on blanket sales.
AI-powered chat is no longer just a glorified FAQ. Today, it can act as a real-time shopping assistant — guiding customers, boosting conversions, and helping your team reclaim time.
That’s exactly what Pepper did with “Penelope,” their AI Agent built on Gorgias.
With a rapidly growing product catalog (22 new SKUs in 2024 alone), Pepper knew shoppers needed help discovering the right products. Customers often had questions about styles, materials, or sizing, and if they didn’t get answers right away, they’d abandon carts and move on.
Instead of hiring more agents to keep up, Pepper deployed Penelope to live chat and email.
Her job?
“With AI Agent, we’re not just putting information in our customer’s hands; we’re putting bras in their hands... We’re turning customer support from a cost center to a revenue generator.”
—Gabrielle McWhirter, CX Operations Lead at Pepper
Let’s look at how Penelope performs on the floor:
A shopper asked about the difference between two wire-free bras. Penelope broke down the styles, support level, and fabric in plain language — then followed up with personalized suggestions based on the shopper’s preferences.
Using Gorgias Convert chat campaigns, Pepper triggers targeted messages to shoppers based on behavior. If someone is browsing white bras? Penelope jumps in and offers assistance, often leading to faster decisions and fewer abandoned carts.
If a customer adds a swimsuit top to their cart, Penelope suggests matching bottoms. No full-screen popups, no awkward sales scripts — just thoughtful, helpful guidance.
Penelope also handles WISMO tickets and return inquiries. If a shopper is dealing with a sizing issue, Penelope walks them through the return process and links to Pepper’s Fit Guide to make sure the next purchase is spot on.
By implementing AI into chat, Pepper saw a 19% conversion rate from AI-assisted chats, an 18% uplift in AOV, and a 92.1% decrease in resolution time.
With Penelope handling repetitive and revenue-driving tasks, Pepper’s team now has more time to offer truly personalized touches — like virtual fit sessions that have turned refunds into exchanges and even upsells.
Bundling is a proven tactic for increasing AOV — but most brands still rely on subjective judgment calls or static reports to decide which products to group.
AI can take this a step further.
Instead of just looking at what’s bought together in the same cart, AI can analyze purchase sequences. For example, what people tend to buy as a follow-up 30 days after their first order. This gives you powerful clues into natural buying behavior and bundling opportunities you might’ve missed.
If you’re looking to explore this at scale, you can use anonymized sales data and feed it into AI tools to surface patterns in:
Try this prompt:
"Analyze this spreadsheet of order data and identify product bundle opportunities. Look for: (1) products frequently purchased together in the same order, (2) items commonly bought as a second purchase within 30 days of the first, and (3) patterns in high-value or high-frequency product pairings. Provide insights on the most promising bundles and why they might work well together."
Just make sure you’re keeping customer data anonymous — and always double-check the insights with your team.
Related: Ecommerce product categorization: How to organize your products
AI isn’t just here to deflect tickets. From quality assurance to proactive outreach, AI can elevate the entire support experience — on both sides of the conversation.
Manual QA is slow, selective, and often feels like it’s chasing the wrong tickets.
That’s where Auto QA comes in. Instead of reviewing just a handful of conversations each week, Auto QA evaluates 100% of private messages, whether they’re handled by a human or an AI agent.
Every message is scored on key metrics like:
It gives support leaders a full picture of how their team is performing, so they can coach with clarity, not just gut feeling.
Here’s what brands can do with automated QA:
Let’s walk through a real example.
Customer: “Hi, my device broke, and I bought it less than a month ago.”
Agent: “Hi Kelly, please send us a photo or a video so we can determine the issue with your device.”
Auto QA flags this interaction with:
Reactive support is table stakes. AI takes it a step further by anticipating issues before they happen — and proactively helping customers.
Let’s say login errors spike after a product update. AI detects the surge and automatically triggers an email to affected customers with a simple fix. No need for them to dig through help docs or wait on chat — support meets them right where they are.
Proactive AI can also be used for:
This saves the time of your agents because the AI will spot problems before they turn into tickets.
Your customers are telling you what they think. AI just helps you hear it more clearly.
By analyzing reviews, support tickets, post-purchase surveys, and social comments, AI can spot sentiment trends that might otherwise fly under the radar.
For example:
Related: 12 ways to upgrade your data and trend analysis with Ticket Fields
Whether you’re enriching customer data, making smarter product recommendations, triggering dynamic pricing, or proactively resolving support issues, AI gives your team the power to scale personalization without sacrificing quality.
With Gorgias, you can bring many of these use cases to life — from AI-powered chat that drives conversions to automated support that still feels human.
And with our app store, you can tap into additional AI tools for data enrichment, direct mail, bundling insights, and more.
Personalized ecommerce doesn’t have to mean more work. With the right AI tools in your corner, it means smarter work — and better results.
{{lead-magnet-1}}
TL;DR:
AI is everywhere in customer service—powering live chats, drafting responses, and handling inquiries faster than ever.
But as AI takes on more of the customer experience, one question keeps coming up: Should brands tell customers when they’re talking to AI?
Legally, the answer depends on where you operate. Ethically? That’s where things get interesting. Some argue that transparency builds trust. Others worry it might undermine confidence in support interactions.
So, what’s the right move?
This guide breaks down the debate and gives CX leaders a framework to decide when (and how) to disclose AI—so you can strike the right balance between innovation and trust.
Depending on where your business operates, disclosure laws may be strict, vague, or nonexistent. Some laws, such as the California Bolstering Online Transparency Act, prohibit misleading consumers about the use of automated artificial identities.
For maximum legal protection, it’s best to proactively disclose AI use—even when not explicitly required.
A simple disclaimer can go a long way in avoiding legal headaches down the line. Here’s how to disclose AI use in customer interactions:
Truthfully, AI laws are evolving fast. That’s why we recommend consulting legal counsel to ensure your disclosure practices align with the latest requirements in your region.
But beyond avoiding legal trouble, transparency around AI usage can reinforce customer trust. If customers feel deceived, they may question the reliability of your brand, even if the AI delivers great service.
Related reading: How AI Agent works & gathers data
Research shows that 85% of consumers want companies to share AI assurance practices before bringing AI-driven products and experiences to market.
But what does “transparency” actually mean in this context? An article in Forbes broke it down, explaining that customers expect three key things:
How you disclose AI matters just as much as whether you disclose it. At the end of the day, AI isn’t inherently good or bad—it’s all about how it’s implemented and trained.
The way a brand approaches AI disclosure can impact trust, satisfaction, and even conversion rates—making it a decision that goes beyond simple legal requirements.
While some customers appreciate honesty, others may hesitate if they prefer human support. Brands must weigh the pros and cons to determine the best approach for their audience.
Let’s be honest: AI in customer service still carries baggage. While some consumers embrace AI-driven support, others hear "AI" and immediately picture frustrating, robotic chatbots that can’t understand their questions.
This is one of the biggest risks of transparency: customers who’ve had bad AI experiences in the past may assume the worst and disengage the moment they realize they’re not speaking to a human.
For brands that thrive on personal connection and high-touch service, openly stating that AI is involved could create skepticism or drop-off rates before customers even give it a chance.
Another challenge? The perception gap.
Even if AI is handling inquiries smoothly, some customers may assume it lacks the empathy, nuance, or problem-solving skills of a live agent. Certain industries may find that transparency about AI use leads to more escalations, not fewer, simply because customers expect a human touch.
Despite the risks, transparency about AI can actually be a trust-building strategy when handled correctly.
Customers who value openness and ethical business practices tend to appreciate brands that don’t try to disguise AI as a human.
Being upfront also manages expectations. If a customer knows they’re speaking to AI, they’re less likely to feel misled or frustrated if they encounter a limitation. Instead of feeling like they were "tricked" into thinking they were talking to a human, they enter the conversation with the right mindset—often leading to higher satisfaction rates.
And then there’s the long-term brand impact.
If customers eventually realize (through phrasing, tone, or inconsistencies) that they weren’t speaking with a human when they thought they were, it can erode trust.
Deception—whether intentional or not—can backfire. Proactively disclosing AI use prevents backlash and reinforces credibility, especially as AI becomes a bigger part of the customer experience.
Arcade Belts, known for its high-quality belts, wanted to improve efficiency without compromising customer experience. By implementing Gorgias Automate, they reduced their reliance on manual support, creating self-service flows to handle common inquiries.
Initially, automation helped manage routine questions, such as product recommendations and shipping policies. But when they integrated AI Agent, they cut their ticket volume in half.
The transition was so seamless that customers often couldn’t tell they were interacting with AI. “Getting tickets down to just a handful a day has been awesome,” shares Grant, Ecommerce Coordinator at Arcade Belts. ”A lot of times, I'll receive the response, ‘Wow, I didn't know that was AI.”
You can read more about how they’re using AI Agent here.
We mentioned it earlier, but deciding whether or not to disclose your use of AI in customer support depends on compliance, customer expectations, and business goals. That said, this four-part framework helps CX leaders evaluate the right approach for their brand:
Before making any decisions, ensure your brand is compliant with AI transparency regulations.
AI transparency should align with your brand’s values and customer experience strategy.
Rather than making assumptions, run controlled tests to see how AI disclosure affects customer satisfaction.
AI strategies shouldn’t be static. As customer preferences and AI capabilities evolve, brands should refine their approach accordingly.
If you decide to be transparent about AI in customer interactions, how you communicate it is just as important as the disclosure itself. Let’s talk about how to get it right and make AI work with your customer experience, not against it.
AI doesn’t have to sound like a corporate FAQ page. Giving it a personality that aligns with your brand makes interactions feel natural and engaging. Whether it’s playful, professional, or ultra-efficient, the way AI speaks should feel like a natural extension of your team, not an out-of-place add-on.
Instead of:
"I am an automated assistant. How may I assist you?"
Try something on-brand:
"Hey there! I’m your AI assistant, here to help—ask me anything!"
A small tweak in tone can make AI feel more human while still keeping transparency front and center.
Read more: AI tone of voice: Tips for on-brand customer communication
One of the biggest mistakes brands make? Leaving customers guessing whether they’re speaking to AI or a human. That uncertainty leads to frustration and distrust.
Instead, be clear about what AI can and can’t do. If it’s handling routine questions, product recommendations, or order tracking, say so. If complex issues will be escalated to a human agent, let customers know upfront.
Framing matters. Instead of making AI sound like a replacement, position it as a helpful extension of your support team—one that speeds up resolutions, but hands off conversations when needed.
Even the best AI has limits—and customers know it. Nothing is more frustrating than a bot endlessly looping through scripted responses when a customer just needs a real person to step in.
AI should be the first line of defense, but human agents should always be an option, especially for high-stakes or emotionally charged interactions.
A smooth handoff can sound like:
"Looks like this one needs a human touch! Connecting you with a support expert now."
AI disclosure doesn’t have to feel like an apology. Instead of focusing on limitations, highlight the benefits AI brings to the experience:
It’s the difference between:
"This is an AI agent. A human will follow up later."
vs.
"I’m your AI assistant! I can answer most questions instantly—but if you need extra help, I’ll connect you with a team member ASAP."
The right framing makes AI feel like an advantage, not a compromise.
AI perception isn’t static. Regularly analyzing sentiment data and customer feedback can help refine AI messaging over time—whether that means adjusting tone, improving explanations, or updating how AI is introduced.
When you follow these best practices, AI can be a real gamechanger for your customer support. Just take it from Jonas Paul…
Jonas Paul Eyewear, a direct-to-consumer brand specializing in kids' eyewear, needed a way to manage high volumes of tickets during the back-to-school season without overwhelming their customer care team.
To streamline these conversations, Jonas Paul implemented AI Agent to provide instant responses to FAQs. This allowed human agents to focus on more complex cases that required personalized attention.
“Being able to automate responses for things like prescription details and return policies has allowed us to focus more on the nuanced questions that require more time and care. It’s been a game changer for our team,” said Lynsay Schrader, Lab and Customer Service Senior Manager and Jonas Paul.
Jonas Paul saw a 96% decrease in First Response Time and a 2x ROI on Gorgias’s AI Agent with influenced revenue. You can dive in more here.
Whether or not your brand chooses to disclose AI in customer interactions, the key is to ensure AI enhances the customer experience without compromising transparency, accuracy, or brand identity.
So how can you get started? Gorgias AI Agent was built with both effectiveness and transparency in mind.
For every interaction, AI Agent provides an internal note detailing:
Excited to see how AI Agent can transform your brand? Book a demo.
{{lead-magnet-1}}
As we all locked down in March 2020 and changed our shopping habits, many brick-and-mortar retailers started their first online storefronts.
Gorgias has benefitted from the resulting ecommerce growth over the past two years, and we have grown the team to accommodate these trends. From 30 employees at the start of 2020, we are now more than 200 on our journey to delivering better customer service.
Our engineering team contributed to much of this hiring, which created some challenges and growing pains. What worked at the beginning with our team of three did not hold up when the team grew to 20 people. And the systems that scaled the team to 20 needed updates to support a team of 50. To continue to grow, we needed to build something more sustainable.
Continuous deployment — and the changes required to support it — presented a major opportunity for reaching toward the scale we aspired to. In this article I’ll explore how we automated and streamlined our process to make our developers’ lives easier and empower faster iteration.
Throughout the last two years of accelerated growth, we’ve identified a few things that we could do to better support our team expansion.
Before optimizing the feature release process, here’s how things went for our earlier, smaller team when deploying new additions:
This wasn’t perfect, but it was an effective solution for a small team. However, the accelerated growth in the engineering team led to a sharp increase in the number of projects and also collaborators on each project. We began to notice several points of friction:
It was clear that things needed to change.
On the Site Reliability Engineering (SRE) team, we are fans of the GitOps approach, where Git is the single source of truth. So when the previously mentioned points of friction became more critical, we felt that all the tooling involved in GitOps practices could help us find practical solutions.
Additionally, these solutions would often rely on tooling we already had in place (like Kubernetes, or Helm for example).
GitOps is an operational framework. It takes application-development best practices and applies them to infrastructure automation.
The main takeaway is that in a GitOps setting, everything from code to infrastructure configuration is versioned in Git. It is then possible to create automation by leveraging the workflows associated with Git.
One such class of that automation could be “operations by pull requests”. In that case, pull requests and associated events could trigger various operations.
Here are some examples:
ArgoCD is a continuous deployment tool that relies on GitOps practices. It helps synchronize live environments and services to version-controlled declarative service definitions and configurations, which ArgoCD calls Applications.
In simpler terms, an Application resource tells ArgoCD to look at a Git repository and to make sure the deployed service’s configuration matches the one stored in Git.
The goal wasn’t to reinvent the wheel when implementing continuous deployment. We instead wanted to approach it in a progressive manner. This would help build developer buy-in, lay the groundwork for a smoother transition, and reduce the risk of breaking deploys. ArgoCD was an excellent step toward those goals, given how flexible it is with customizable Config Management Plugins (CMP).
ArgoCD can track a branch to keep everything up to date with the last commit, but can also make sure a particular revision is used. We decided to use the latter approach as an intermediate step, because we weren’t quite ready to deploy off the HEAD of our repositories.
The only difference from a pipeline perspective is that it now updates the tracked revision in ArgoCD instead of running our complex deployment scripts. ArgoCD has a Command Line Interface (CLI) that allows us to simply do that. Our deployment jobs only need to run the following command:
The developers’ workflow is left untouched at this point. Now comes the fun part.
Our biggest requirement for continuous deployment was to have some sort of safeguard in case things went wrong. No matter how much we trust our tests, it is always possible that a bug makes its way to our production environments.
Before implementing Argo Rollouts, we still kept an eye on the system to make sure everything was fine during deployment and took quick action when issues were discovered. But up to that point, this process was carried out manually.
It was time to automate that process, toward the goal of raising our team’s confidence levels when deploying new changes. By providing a safety net, of sorts, we could be sure that things would go according to plan without manually checking it all.
Argo Rollouts is a progressive delivery controller. It relies on a Kubernetes controller and set of custom resource definitions (CRD) to provide us with advanced deployment capabilities on top of the ones natively offered by Kubernetes. These include features like:
We were especially interested in the canary and canary analysis features. By shifting only a small portion of traffic to the new version of an application, we can limit the blast radius in case anything is wrong. Performing an analysis allows us to automatically, and periodically, check that our service’s new version is behaving as expected before promoting this canary.
Argo Rollouts is compatible with multiple metric providers including Datadog, which is the tool we use. This allows us to run a Datadog query (or multiple) every few minutes and compare the results with a threshold value we specify.
We can then configure Argo Rollouts to automatically take action, should the threshold(s) be exceeded too often during the analysis. In those cases, Argo Rollouts scales down the canary and scales the previous stable version of our software back to its initial number of replicas.
Each service has its own metrics to monitor, but for starters we added an error rate check for all of our services.
Remember when I mentioned replacing complex, project-specific deployment scripts with a single, simple command? That’s not entirely accurate, and requires some additional nuance for a full understanding.
Not only did we need to deploy software on different kinds of environments (staging and production), but also in multiple Kubernetes clusters per environment. For example, the applications composing the Gorgias core platform are deployed across multiple cloud regions all around the world.
ArgoCD and Argo Rollouts might seem to be magic tools, we actually still need some “glue” to make things stick together. Now because of ArgoCD’s application-based mechanisms, we were able to get rid of custom scripts and use this common tool across all projects. This in-house tool was named deployment conductor.
We even went a step further and implemented this tool in a way that accepts simple YAML configuration files. Such files allow us to declare various environments and clusters in which we want each individual project to be deployed.
When deploying a service to an environment, our tool will then go through all clusters listed for that environment.
For each of these, it will look for dedicated values.yaml files in the service’s chart’s directory. This allows developers to change a service’s configuration based on the environment and cluster in which it’s deployed. Typically, they would want to edit the number of replicas for each service depending on the geographical region.
This makes it much easier for developers than having to manage configuration and maintain deployment scripts.
This leads us to the end of our journey’s first leg: our first encounter with continuous deployment.
After we migrated all our Kubernetes Deployments to Argo Rollouts, we let our developers get acclimated for the next few weeks.
Our new setup still wasn’t fully optimized, but we felt like it was a big improvement compared to the previous one. And while we could think of many improvements to make things even more reliable before enabling continuous deployment, we decided to get feedback from the team during this period, to iterate more effectively.
Some projects introduced additional technicalities to overcome, but we easily identified a small first batch of projects where we could enable CD. Before deployment, we asked the development team if we were missing anything they needed to be comfortable with automatic deployment of their code in production environments.
With everyone feeling good about where we were at, we removed the manual step in our CI system (GitLab) for jobs deploying to production environments.
We’re still monitoring this closely, but so far we haven’t had any issues. We still plan on enabling continuous deployment on all our projects in the near future, but it will be a work in progress for now.
Here are some ideas for future improvements that anticipate potential roadblocks:
We’re excited to explore these challenges. And, overall, our developers have welcomed these changes with open arms. It helps that our systems have been successful at stopping bad deployments from creating big incidents so far.
While we haven’t reached the end of our journey yet, we are confident that we are on the right path, moving at the right pace for our team.
As you work with SQLAlchemy, over time, you might have a performance nightmare brewing in the background that you aren’t even aware of.
In this lesser-known issue, which strikes primarily in larger projects, normal usage leads to an ever-growing number of idle-in-transaction database connections. These open connections can kill the overall performance of the application.
While you can fix this issue down the line, when it begins to take a toll on your performance, it takes much less work to mitigate the problem from the start.
At Gorgias, we learned this lesson the hard way. After testing different approaches, we solved the problem by extending the high-level SQLAlchemy classes (namely sessions and transactions) with functionality that allows working with "live" DB (database) objects for limited periods of time, expunging them after they are no longer needed.
This analysis covers everything you need to know to close those unnecessary open DB connections and keep your application humming along.
Leading Python web frameworks such as Django come with an integrated ORM (object-relational mapping) that handles all database access, separating most of the low-level database concerns from the actual user code. The developer can write their code focusing on the actual logic around models, rather than thinking of the DB engine, transaction management or isolation level.
While this scenario seems enticing, big frameworks like Django may not always be suitable for our projects. What happens if we want to build our own starting from a microframework (instead of a full-stack framework) and augment it only with the components that we need?
In Python, the extra packages we would use to build ourselves a full-fledged framework are fairly standard: They will most likely include Jinja2 for template rendering, Marshmallow for dealing with schemas and SQLAlchemy as ORM.
Not all projects are web applications (following a request-response pattern) and among web applications, most of them deal with background tasks that have nothing to do with requests or responses.
This is important to understand because in request-response paradigms, we usually open a DB transaction upon receiving a request and we close it when responding to it. This allows us to associate the number of concurrent DB transactions with the number of parallel HTTP requests handled. A transaction stays open for as long as a request is being processed, and that must happen relatively quickly — users don't appreciate long loading times.
Transactions opened and closed by background tasks are a totally different story: There's no clear and simple rule on how DB transactions are managed at a code level, there's no easy way to tell how long tasks (should) last, and there usually isn't any upper limit to the execution time.
This could lead to potentially long transaction times, during which the process effectively holds a DB connection open without actually using it for the majority of the time period. This state is known as an idle-in-transaction connection state and should be avoided as much as possible, because it blocks DB resources without actively using them.
To fully understand how database access transpires in a SQLAlchemy-based app, one needs to understand the layers responsible for the execution.
At the highest level, we code our DB interaction using high-level SQLAlchemy queries on our defined models. The query is then transformed into one or more SQL statements by SQLAlchemy's ORM which is passed on to a database engine (driver) through a common Python DB API defined by PEP-249. (PEP-249 is a Python Enhancement Proposal dedicated to standardizing Python DB server access.) The database engine communicates with the actual database server.
At first glance, everything looks good in this stack. However there's one tiny problem: The DB API (defined by PEP-249) does not provide an explicit way of managing transactions. In fact, it mandates the use of a default transaction regardless of the operations you're executing, so even the simplest select will open a transaction if none are open on the current connection.
SQLAlchemy builds on top of PEP-249, doing its best to stay out of driver implementation details. That way, any Python DB driver claiming PEP-249 compatibility could work well with it.
While this is generally a good idea, SQLAlchemy has no choice but to inherit the limitations and design choices made at the PEP-249 level. More precisely (and importantly), it will automatically open a transaction for you upon the very first query, regardless whether it’s needed. And that's the root of the issue we set out to solve: In production, you'll probably end up with a lot of unwanted transactions, locking up on DB resources for longer than desired.
Also, SQLAlchemy uses sessions (in-memory caches of models) that rely on transactions. And the whole SQLAlchemy world is built around sessions. While you could technically ditch them to avoid the idle-in-transactions problem with a “lower-level” interface to the DB, all of the examples and documentation you’ll find online uses the “higher-level” interface (i.e. sessions). It’s likely that you will feel like you are trying to swim against the tide to get that workaround up and running.
Some DB servers, most notably Postgres, default to an autocommit mode. This mode implies atomicity at the SQL statement level — something developers are likely to expect. But they prefer to explicitly open a transaction block when needed and operate outside of one by default.
If you're reading this, you have probably already Googled for "sqlalchemy autocommit" and may have found their official documentation on the (now deprecated) autocommit mode. Unfortunately this functionality is a "soft" autocommit and is implemented purely in SQLAlchemy, on top of the PEP-249 driver; it doesn't have anything to do with DB's native autocommit mode.
This version works by simply committing the opened transaction as soon as SQLAlchemy detects an SQL statement that modifies data. Unfortunately, that doesn't fix our problem; the pointless, underlying DB transaction opened by non-modifying queries still remains open.
When using Postgres, we could in theory play with the new AUTOCOMMIT isolation level option introduced in psycopg2 to make use of the DB-level autocommit mode. However this is far from ideal as it would require hooking into SQLAlchemy's transaction management and adjusting the isolation level each time as needed. Additionally, "autocommit" isn't really an isolation level and it’s not desirable to change the connection's isolation level all the time, from various parts of the code. You can find more details on this matter, along with a possible implementation of this idea in Carl Meyer's article “PostgreSQL Transactions and SQLAlchemy.”
At Gorgias, we always prefer explicit solutions to implicit assumptions. By including all details, even common ones that most developers would assume by default, we can be more clear and leave less guesswork later on. This is why we didn't want to hack together a solution behind the scenes, just to get rid of our idle-in-transactions problem. We decided to dig deeper and come up with a proper, explicit, and (almost) hack-free method to fix it.
The following chart shows the profile of an idle-in-transaction case over a period of two weeks, before and after fixing the problem.
As you can see, we’re talking about tens of seconds during which connections are being held in an unusable state. In the context of a user waiting for a page to load, that is an excruciatingly long period of time.
SQLAlchemy works with sessions that are, simply put, in-memory caches of model instances. The code behind these sessions is quite complex, but usage boils down to either explicit session reference...
...or implicit usage.
Both of these approaches will ensure a transaction is opened and will not close it until a later ***session.commit()***or session.rollback(). There's actually nothing wrong with calling session.commit() when you need to explicitly close a transaction that you know is opened and you’re done with using the DB, in that particular scope.
To address the idle-in-transaction problem generated by such a line, we must keep the code between the query and the commit relatively short and fast (i.e. avoid blocking calls or CPU-intensive operations).
It sounds simple enough, but what happens if we access an attribute of a DB model after session.commit()? It will open another transaction and leave it hanging, even though it might not need to hit the DB at all.
While we can't foresee what a developer will do with the DB object afterward, we can prevent usage that would hit the DB (and open a new transaction) by expunging it from the session. An expunged object will raise an exception if any unloaded (or expired) attributes are accessed. And that’s what we actually want here: to make it crash if misused, rather than leaving idle-in-transaction connections behind to block DB resources.
When working with multiple objects and complex queries, it’s easy to overlook the necessary expunging of those objects. It only takes one un-expunged object to trigger the idle-in-transaction problem, so you need to be consistent.
Objects can't be used for any kind of DB interaction after being expunged. So how do we make it clear and obvious that certain objects are to be used in within a limited scope? The answer is a Python context manager to handle SQLAlchemy transactions and connections. Not only does it allow us to visually limit object usage to a block, but it will also ensure everything is prepared for us and cleaned up afterwards.
The construct above normally opens a transaction block associated to a new SQLAlchemy session, but we've added a new expunge keyword to the begin method, instructing SQLAlchemy to automatically expunge objects associated with block's session (the tx.session). To get this kind of behavior from a session, we need to override the begin method (and friends) in a subclass of SQLAlchemy's Session.
We want to keep the default behavior and use a new ExpungingTransaction instead of SQLAlchemy's SessionTransaction, but only when explicitly instructed to by the expunge=True argument.
You can use the class_ argument of sessionmaker to instruct it to build am ExpungingSession instead of a regular Session.
The last piece of the puzzle is the ExpungingTransaction code, which is responsible for two important things: committing the session so the underlying transaction gets closed and expunging objects so that we don't accidentally reopen the transaction.
By following these steps, you get a useful context manager that forces you to group your DB interaction into a block and notifies you if you mistakenly use (unloaded) objects outside of it.
What if we really need to access DB models outside of an expunging context?
Simply passing models to functions as arguments helps in achieving a great goal: the decoupling of models retrieval from their actual usage. However, such functions are no longer in control of what happens to those models afterwards
We don't want to forbid all usage of models outside of this context, but we need to somehow inform the user that the model object comes “as is,” with whatever loaded attributes it has. It's disconnected from the DB and shouldn't be modified.
In SQLAlchemy, when we modify a live model object, we expect the change to be pushed to the DB as soon as commit or flush is called on the owning session. With expunged objects this is not the case, because they don't belong to a session. So how does the user of such an object know what to expect from a certain model object? The user needs to ensure that she:
To safely and explicitly pass along these kind of model objects, we introduced frozen objects. Frozen objects are basically proxies to expunged models that won't allow any modification.
To work with these frozen objects, we added a freeze method to our ExpungingSession:
So now our code would look something like this:
Now, what if we want to modify the object outside of this context, later on, (e.g. after a long-lasting HTTP request)? As our frozen object is completely disconnected from any session (and from the DB), we need to fetch a warm instance associated to it from the DB and make our changes to that instance. This is done by adding a helper fetch_warm_instance method to our session...
...and then our code that modifies the object would say something like this.
When the second context manager exits, it will call commit on tx.session, and changes to my_model will be committed to the DB right away.
We now have a way of safely dealing with models without generating idle-in-transaction problems, but the code quickly becomes a mess if we have to deal with relationships: We need to freeze them separately and pass them along as if they aren’t related. This could be overcome by telling the freeze method to freeze all related objects, recursively walking the relationships.
We'll have to make some adjustments to our frozen proxy class as well.
Now, we can fetch, freeze, and use frozen objects with any preloaded relationships.
While the code to access the DB with SQLAlchemy may look simple and straightforward, one should always pay close attention to transaction management and the subtleties that arise from the various layers of the persistence stack.
We learned this the hard way, when our services eventually started to exhaust the DB resources many years into development.
If you recently decided to use a software stack similar to ours, you should consider writing your DB access code in such a way that it avoids idle-in-transaction issues, even from the first days of your project. The problem may not be obvious at the beginning, but it becomes painfully apparent as you scale.
If your project is mature and has been in development for years, you should consider planning changes to your code to avoid or to minimize idle-in-transaction issues, while the situation is still under control. You can start writing new idle-in-transaction-proof code while planning to gradually update existing code, according to the capacity of your development team.
Like any major topic in your company, your compensation policy should reflect your organizational values.
At Gorgias, we created a compensation calculator that reflected ours, setting salaries across the organization based on 3 key principles:
Since the beginning, we applied the first two: Each of our employees was granted data-driven stock options that beat the market average.
However, we were challenged internally: Our team members asked how much they would make if they switched teams or if they got promoted.
This led to the implementation of our third key principle, as we shared the compensation calculator with everyone at Gorgias and beyond: See the calculator here.
This was not a small challenge. We’re sharing our process in hopes that we can help other companies arrive at equitable, transparent compensation practices.
First, let’s get back to how we built the tool. We had to decide which criteria we wanted to take into account. Based on research articles and benchmarks on what other companies did before, we decided that our compensation model would be based on 4 factors: position, level, location, and strategic orientation.
If we had to sum it up all briefly, our formula looks like this:
Average of Data (for the position at defined percentile & Level) x Location index
This is the job title someone has in the company. It looks simple, but it can be challenging to define! Even if the titles don’t really vary from one company to another, people might have different duties, deal with much bigger clients or have more technical responsibilities. Sometimes your job title or position doesn’t match the existing databases.
For some of these roles, when we thought that our team members were doing more than average in the market, we crossed some databases to get something closer to fairness.
To assess a level we defined specific criteria in our growth plan for each job position. It is, of course, linked to seniority, but that is not the primary factor. When we hire someone, we evaluate their skills using specific challenges and case studies during our interview processes.
Depending on the databases you’ll find beginner, intermediate, expert, which we represent as L1, L2, L3, etc.We decided to go with six levels from L1 to L6 for individual contributors and six levels in management from team lead to C-level executive.
Our location index is based on the cost of living in a specific city (we rely on Numbeo for instance) and on the average salary for a position we hire (we use Glassdoor). Some cities are better providers of specific talents. By combining them, we get a more accurate location index.
When we are missing data for a specific city, we use the nearest one where we have data available.
Our reference is San Francisco, where the location index equals 1, meaning it’s basically the most expensive city in terms of hiring. For others, we have an index that can vary from 0.29 (Belgrade, Serbia) to 0.56 (Paris, France) to 0.65 (Toronto, Canada) etc. We now have 50+ locations in our salary calculator — a necessary consideration for our quickly growing, global team of full-time employees and contractors.
We rely on our strategic orientation to select which percentile we want to use in our databases. When we started Gorgias we were using the 50th percentile. As we grew (and raised funds), we wanted to be 100% sure that we were hiring the best people to build the best possible company.
High quality talent can be expensive (but not as expensive as making the wrong hires)! Obviously, we can’t pay everyone at the top of the market and align with big players like Google, but we can do our best to get close.
Since having the best product is our priority we pay our engineering and product team at the 90th percentile, meaning their pay is in the top 10% of the industry. We pay other teams at the 60th percentile.
Some other companies take into account additional criteria, such as company seniority. We believe seniority should reflect in equity, rather than in salary. If you apply seniority in the company index on salaries, eventually some of your team members will be inconsistent with the market. Those employees may stay in your company only because they won’t be able to find the same salary elsewhere.
Data is at the heart of our company DNA.
Where should you find your data? Data is everywhere! What matters most is the quality.
We look for the most relevant data on the market. If the database is not robust enough, we look elsewhere. So far we have managed to rely on several of them: Opencomp, Optionimpact, Figures.hr, and Pave are some major datasets we use for compensation. We’re curious and always looking for more. We’ll soon dig into Carta, Eon, and Levels. The more data we get, the more confident we are about the offers we make to our team.
Once we have the data, we apply our location index. It applies to both salaries and equity.
To build our equity package, we use the compensation and we then apply a “team” multiplier and a “level” multiplier. Those multipliers rely on data, of course. We’re using the same databases mentioned above and also on Rewarding Talent documentation for Europe.
As we mentioned above, once our tool was robust enough, we shared it internally.
To be honest, checking and checking again took longer than expected. But we all agreed that we’d rather release it to good reactions than rush it and create fear. We postponed the release for one month to check and double-check the results..
For the most effective release, we decided to do two things:
Overall, the reactions have been great. People loved the transparency and we got solid feedback.
We released the new calculator in September 2021, and overall we’re really happy with the response. We also had positive feedback from the update this month.
Let’s see how it goes with time.
Let’s be humble here: It’s only the beginning. It’s a Google Sheet. Of course, we’ll need to iterate on it.
In the meantime, you can check out the calculator here.
So far we’ve made plans to review the whole grid every year. However, now that it’s public within the teams, we can collect feedback and potentially make some changes. Everyone can add comments as they notice potential issues.
The next step for us is to share it online with everyone, on our website, so that candidates can have a vision of what we offer. We hope we’ll attract more talent thanks to this level of transparency and the value of our compensation packages.
I come from the world of physical retail where building a bond was more straightforward. We often celebrated wins with breakfast and champagne (yes, I’m French!) or by simply clapping our hands and making noise of joy.
We would also have lunch together every day, engaging in many informal discussions.
Of course, it bonded us! I knew my colleagues’ dog names and their plumber problems, and I felt really close to many of them.
Employee engagement is one of the primary drivers of productivity, work quality, and talent retention. When I joined Gorgias, where we have a globally distributed team, I wondered how you create the sense of belonging that drives that engagement
Like many companies now, our workforce is distributed. But at Gorgias, it’s a truly global affair: Our team lives in 17 countries, four continents, and many different time zones, which can be challenging.
And yet, I believe Gorgias culture is truly amazing and even better than the one I used to know.
I realize that we achieved that by relying on the critical ingredients of a strong relationship
By repeating these strong moments, you can make the connection between people stronger as well. The stronger the connection, the stronger the engagement.
Speaking of a strong engagement, Gorgias’s eNPS (employee Net Promoter Score) is 50. How is this possible? Well, what’s always quoted as one of our main strengths is the company culture, and how it connects our employees.
Let’s take it further by exploring five actionable steps we have taken to make that happen.
While some would push back against events like these falling under the purview of the People team, they are important for building strong culture, team cohesion, and employee happiness — all areas that are definitely part of our directive.
Here’s what you need to know to bring these summits to your organization.
As the name states, it’s a virtual event where the whole company connects.
It’s not mandatory, but it is highly recommended to attend because it’s fun and you learn many things.
It’s a mix of company updates, fun moments, and inspiring sessions. Each session is short, to let everyone the opportunity to breathe.
Typically we have three kinds of sessions:
Due to timezones, some sessions don’t include every country.
Our last virtual summit cost us roughly $13,000, which means $65 per head. Here’s the breakdown:
The first thing you might already have in mind is: It takes time! And you’re right.
The more we grow, the more challenging it becomes to organize these events.
I believe we’ll eventually need to have a dedicated event manager for all of our physical and virtual events. I want to have them within my team, and I 100% believe it’s worth it.
Another challenge can be technical difficulties with your event software choice, so make sure that you find a reliable platform that suits your needs.
Our team is a mix of hybrid and full-remote workers.
Since we don’t want the full-remote people to become disconnected, we highly encourage them to join the nearest hub once a quarter.
And when they do, we organize some happy hours, games or movie nights. Those face-to-face activities help create bonds between employees. It’s simple and doesn’t require a lot of organization, but it creates an incredible moment every time the remote teams join. We call them Gorgias Weeks.
We were fortunate to be able to organize our company offsite and gather a massive part of the crew together in October 2021.
The pandemic created doubt and additional points of stress, but looking back I’m so glad we were able to create an opportunity for everyone to meet in person.
We asked everyone to bring a health pass — full vaccination or PCR test — and we picked a location that allowed for a lot of outdoor activities.
We made sure the agenda for the two days was not too busy. As with our virtual summit, it was a balance of company alignment, learning, and fun. We made sure people had enough free time to relax, talk to each other, play games, or play sports.
This company offsite is surely an essential and strong moment for us and it helps create strong bonds and great memories.
We encourage every team to organize their own offsite for team-building purposes. Since people don’t meet a lot physically, having these once a year is great!
We let each team lead own it. They pick up the location and the agenda. Then, we provide guidelines with the budget.
Needless to say, it helps build stronger bonds and great memories.
In my experience, it was quite tough to create those moments internally with the team. That’s why we decided to start our team meeting with a fun activity of 10-15 minutes, where we are able to share more than just work.
Every week, there is a different meeting owner who has to come up with new fun activities and games. Starting the meeting with this kind of ice-breaking activity brings powerful energy, and people are more engaged and effective in the sessions. I would recommend it to everyone, especially to those who think, “We already have so many things to review in those weekly meetings, we don’t have time for that.” Try it once, you’ll see how the energy and productivity are different afterward.
On top of that, I also believe tools that encourage colleagues to randomly meet together are great. On our side we use Donut. It gives a weekly reminder that encourages employees to make it to their meeting with a colleague.
Overall, we’ve organized six virtual summits, four company retreats, three Gorgias weeks, and hundreds of virtual coffee and fun meetings.
At the beginning there were only 30 people in the company — now there are 200 of them. As I mentioned, it’s becoming more and more challenging to organize these meetups, but it’s also the most exciting part: making sure the next summit is better than the previous one!
Of course, I’m aware that employee fulfillment and connection are not the only ingredients for retention. But they are key ingredients and shouldn’t be forgotten, especially as we all become more remote.
It’s a worthy investment to organize these events and allocate resources to them, because it makes everyone at Gorgias feel included and connected. And I have no doubt, now, that it’s part of our responsibilities in People Ops.
When a customer's problem goes unanswered on Twitter, you lose that customer and possibly the audience of people who watched it happen.
It’s hard to come back from that, which is why customer care is so important on social media platforms. In fact, Shopify found 57% of North American consumers are less likely to buy if they can’t reach customer support in the channel of their choice.
Your customers want to talk to you — and you should want the same, before they head to a competitor. But first, you need to build a customer support presence on Twitter that lives up to your broader customer experience.
We've helped over 8,000 brands upgrade their customer support and seen the best and worst of social media interactions. Here are our top 10 battle-tested best practices for providing exceptional Twitter support.
Prompt response time is one of the most important pillars of great customer service, and according to data from a survey conducted by Twitter, 75% of customers on Twitter expect fast responses to their direct messages.
Of course, responding with accurate and helpful information is ultimately even more important than responding in real time, so be sure that you don't end up providing inaccurate information in a rush to reduce your response times.
Promptly and accurately responding to customer service issues that are sent to your company's Twitter account is often easier said than done. To do both, you need an efficient system and a well-trained customer support team.
This is where a helpdesk is critical, to bring your Twitter conversations into a central feed with all your other tickets.
If you’re trying to manage Twitter natively in a browser, or through copy-paste discussions with your social media manager, you’re not going to see the first-response times you need to succeed.
As data from Twitter's survey shows, speed is a necessity in order to meet customer expectations and provide a positive experience.
There may be instances where customers contact your Twitter support account via a mention in a tweet as opposed to a direct message. In fact, one in every four customers on Twitter will tweet publicly at brands in the hopes of getting a faster response according to data from Twitter. In these instances, it is important to move the conversation out of the public space as soon as possible by moving the conversation to the DMs.
There are a couple of reasons you would want to avoid resolving customer service issues on a public forum. For one, keeping customer service conversations private allows you to maintain better control over your brand voice and image since customer service conversations can often get a little messy and may not be something you want to broadcast to your entire audience.
Moving conversations out of the public space also enables you to collect more personal data from the customer such as their phone number or other contact information, details about their order and their credit card information without having to worry about privacy concerns.
In Gorgias, you can set up an auto-reply rule that responds to public support questions and directs them to send a DM for further help. This can ensure that people feel heard immediately, even if it takes a while for your team to get to their DM.
Regardless of whether you are discussing an issue with a customer via your Twitter account or any other medium, it is never a good idea for your reps to get into arguments with the customer.
Social media platforms such as Twitter tend to have a much more informal feel than other contact methods, and they also tend to sometimes bring out the worst in the people who hide behind the anonymity that they provide. You may end up finding that customers who contact you via Twitter are sometimes a little more argumentative than customers who contact you via more formal channels.
Nevertheless, it is essential for your Twitter support reps to maintain professionalism and avoid engaging in emotional arguments with customers. It may even help to establish guidelines for your team, to help deal with this type of customer tweet. You can include rules on emoji use, helpful quick-response scripts, and whatever other priorities you have.
Recommended reading: How to respond to angry customers
It is certainly possible to use Twitter alone when providing customer support via the platform. However, this isn't always the most efficient way to go about it.
Keep in mind that, like other social networks, Twitter wasn't necessarily designed to be a customer support channel. There aren't a lot of Twitter features beyond basic notifications that will be able to help your team organize support tickets.
Thankfully, there are third-party solutions that you can use that allow your support agents to respond to tweets and Twitter direct messages from your company website in a way that is much more organized and efficient. At Gorgias, for example, we offer a Twitter integration that will automatically create support tickets anytime someone mentions your brand, replies to your brand's tweets, or direct messages your brand. (By the way, we also offer integrations for Facebook Messenger and WhatsApp.)
Agents can then respond to these messages and mentions directly from the Gorgias platform, where they will show up in the same dashboard as the tickets from your other support channels.
This integration makes Twitter customer support far more efficient for your team and is one of the most effective ways to take your Twitter customer support services to the next level.
It is always important to respond to all questions and feedback that customers provide via Twitter, even if that feedback is negative. This is an important part of relationship marketing.
Many brands shy away from responding to negative feedback on public forums for fear of drawing more attention to the issue. However, this doesn't usually have the desired effect. Failing to respond to negative feedback can make it seem to anyone who happens to see the tweet in question that your brand is dodging the issue.
While you may wish to move the conversation out of the public space as soon as possible, you should always provide a public response to public feedback — negative or not.
For examples of brands effectively responding to negative tweets, check out this article.
According to data from Forbes, 86% of customers say that they would rather speak with a real human being than a chatbot. Even if you don't rely on chatbots for providing customer support, though, your customers may not be able to tell the difference unless you train your reps to be as personable as possible.
When your reps tailor their responses and connect on a personal level, it provides a much more positive support experience that provides a halo effect to your brand. Customers will remember that the next time they arrive at the checkout button, and they might even be open to upsell opportunities at that very moment.
Small businesses may not struggle to keep up with brand mentions, given that there are less to track. For larger companies, though, keeping up with brand mentions can often be a difficult task. This is especially true when some users tag brands with hashtags instead of handles.
This makes it important to create an effective strategy for tracking brand mentions in an efficient and organized manner. One of the best ways to go about this is to utilize integrations that will create a support ticket anytime a customer mentions your brand in a tweet. You can even create custom views in Gorgias to centralize all of these mentions.
By tracking these brand mentions, you can also retweet positive posts for brand awareness.
Not every customer service issue can be handled via Twitter. If there are certain types of issues that fall into that category for your brand, it's a good idea to keep your customers in the loop by providing concise FAQ guidelines that explain which issues you do and don't support via Twitter.
These guidelines can come in the form of a pinned Tweet at the top of your Twitter support account or an off-Twitter link that you provide to customers when they contact you on Twitter with an issue that requires a different medium for resolution. You could even have a visual you add when you respond to questions that don’t fit your guidelines.
Simply responding to customers and requesting that they direct message you for further assistance is another option for addressing issues that you don't want to handle on Twitter. If you set up the auto-reply we mentioned in the second tip, above, it could even include a link to these guidelines.
Check out what this brand did when contacted on Twitter with a problem that needed to be taken off-platform in order to be resolved.
If it makes sense for your brand, it may be a good idea to create multiple Twitter handles that are designated for sales, marketing, and customer support. Creating multiple Twitter handles that serve different purposes allows you to better organize your direct messages and mentions by breaking them down into different categories.
Having a designated customer support Twitter account can also better encourage customers to contact you via Twitter with their customer support issues since it reassures them that this is the purpose that the account serves.
But even then, some customers will still tweet at your main account with issues. When this happens, you can use intent and sentiment analysis in Gorgias to automatically route those issues to the correct agent or team.
When a customer takes the time to reach out to you on Twitter, whether it’s via direct message or a mention, it’s likely not the first time that customer has interacted with your brand.
If you respond on Twitter, you can see the direct message history on that platform, but that’s where the context ends. With Gorgias’s Twitter integration, you can see the full customer journey, including all social media engagement, support tickets across all of your channels and even past orders.
This context is crucial to understanding the conversation you’re walking into, so you can deal with the situation appropriately. If the person is a long-time customer who engages frequently, you’re going to treat that conversation differently than that of a customer who bashes you on social networks and returns products frequently.
Any customer support you provide through Twitter will make things more convenient and accessible for your audience.
But to make the experience faster and more pleasant on both sides of the conversation, you should consider handling all of your social media customer support in one platform, alongside all your other tickets.
Gorgias ties social handles to customer profiles from your Shopify, BigCommerce or Magento store, uniting relevant conversations from across all of your support channels. All of that info is automatically pulled into your response scripts, and you can even automate the process for no-touch ticket resolution.
Check out our social media features to learn more.
Strong website performance is no longer a “nice to have” metric — it’s a critical part of your user experience.
Slow loading times and laggy pages tank conversion rates. They serve up a negative first impression of your brand and can push even your most loyal customers to greener pastures.
When we found out our chat widget had started negatively impacting our customers’ Google Lighthouse scores — an important performance metric — we immediately started searching for a solution.
Live chat is a notoriously resource-intensive category, but we were able to cut our entry point bundle in half using the process I lay out in this article. As a result, we reduced the Lighthouse score impact to just one point, compared with a control.
Here’s what we’ll cover:
Chat widgets are small apps that allow visitors to get quicker results without leaving the webpage they’re on. The chat window usually sits in the bottom corner of the screen, when open.
Here is an example:
Live chat is especially helpful on ecommerce websites, because retail shoppers expect quicker responses. Repetitive questions involving order status, return policies, and similar situations are easily resolved in chat, and it can also provide a starting point for more complex inquiries.
Because merchants make up the bulk of our customers at Gorgias, our live chat feature is a major part of our product offering.
Our live chat feature is a regular React Redux application rendered in an iframe. It may appear simple and limited, but its features extend beyond simple chat to include campaigns, a self-service portal and widget API.
We implemented code-splitting from the beginning to reduce bundle size, leaving us with the following chunks:
Unfortunately, that initial action wasn’t enough to prevent performance issues.
We started hearing from merchants that the chat widget was impacting their Google Lighthouse scores, essentially decreasing page performance. As I previously mentioned, chat widgets generally have a bad reputation in this regard. But we were seeing unacceptable drops of 15 points or more.
To put those 15 points in context, here are the Google Lighthouse ranges:
So if you had a website with 95 performance points, it was considered to be “good” by Lighthouse, but the chat could take it down to “needs improvement”.
Of course, we immediately set out to find and fix the issue.
There were several potential causes for these performance issues. To diagnose them and test potential solutions, we prioritized the possible problem areas and worked our way down the list. We also kept an open mind and looked in other areas, which allowed us to find some fixes we didn’t initially expect.
The initial entrypoint file was 195kB gzipped and the entire bundle was 343kB gzipped. By the end, we had reduced those numbers to 109kB and 308kB respectively.
Here’s what we found.
First, we opened a test shop with chat installed and tried to find something unusual.
It didn’t take long: The chat window chunk was loaded and the corresponding component was rendered, even if you didn't interact with the chat. It wasn't visible, because the main iframe element had a display: none property set.
Then, we moved to the Profiler tab, where we found that the browser was using a lot of CPU, as reported:
Here's what happens if you defer rendering of this component, as originally intended:
However, this deferral introduced another issue. After clicking the button to open the chat, this window starts to appear with some delay. It's easy to explain: Previously, the JS chunk with this component was downloaded and executed immediately, while these changes caused the chunk to load only after interaction.
This problem is easily fixable by using resource hints. These special HTML tags tell your browser to proactively make connections or download content before the browser normally would. We needed a resource hint called prefetch, which asks the browser to download and cache a resource with a low priority.
It looks like this:
There's a similar resource hint called preload which basically does the same thing, but with higher priority. We chose prefetch, because chat assets are not as important as the resources of the main site.
Since we're using webpack to bundle the app, it's very easy to add this tag dynamically. We just added a special comment inside dynamic import, so it looked like this:
Though this solution didn’t affect bundle size, it significantly increased the performance score by only loading the chat when necessary.
Once the rendering was working as intended, we started to search for opportunities to reduce the bundle size.
Bundle size doesn’t always affect performance. For example, here you can see almost the same amount of JS, although execution times are very different:
In most cases, however, there is a correlation between bundle size and the performance. It takes the browser longer to parse and execute the additional lines of code in larger bundle sizes.
This is especially true if the app is bundled via webpack, which wraps each module with a function to execute. This isn’t a problem with just a couple of modules, but it can add up — especially once you start getting up into the hundreds.
We used a few tools to find opportunities to reduce bundle size.
The webpack-bundle-analyzer plugin created an interactive treemap, visualizing the content in all bundles
The Coverage tab inside Google Chrome DevTools helped us see which lines were loaded, but not used. The minified code made it more difficult to use, but it was still insightful.
Next, we discovered the client bundle included the yup validation library, which was unexpected. We use this library on the backend, but it’s not a part of the widget.
It turns out the intended tree-shaking didn't work in this situation — we had a shared file which was used by the JS client and backend. It contained a type declaration and validation object, and for some reason webpack didn't eliminate the second one.
After moving type declaration to its own file, bundle size was reduced dramatically - 48kB gzipped
We also discovered the Segment analytics SDK took 37.8 kB gzipped.
Since we don't use this SDK on initial load, we created a separate chunk for this library and started to load it only when it's needed.
By looking into the chart from webpack-bundle-analyzer, we realized that it was possible to move React Router's code from the main chunk to the chunk with the chat window component. It reduced entrypoint size by 3.7kB and removed unnecessary render cycles, according to React Profiler.
We also found that the Day.js library was included in the entrypoint chunk, which we found odd. We actively use this library inside the Chat Window component, so we expected to see this library only inside the chunk related to this component.
In one of the initialization methods, we found usage of utc() and isBefore() from this library, functionality that is already present in native Date API. To parse date string in ISO format you can run new Date() and for comparison just add the < sign. By rewriting this code, we were able to reduce entrypoint size by 6.67kB gzipped. Not a lot, but it’s all starting to add up.
Another offender was the official client of Sentry (23.4kB gzip). It is a known issue which has not been resolved yet.
One option is to lazy load this SDK. But in this case, there was a risk that we could miss errors occurring before the SDK fully loaded. We followed another approach, using an alternative called micro-sentry. It’s only 2kB and covered all functionality that we needed.
We also tried to replace React with Preact, which worked really well and decreased the bundle size by 33kB in gzip. However, we couldn't find a big difference in the final performance score.
After further discussion with the team, we decided not to use it for now. We think the React team could introduce some interesting features in new versions (for example, concurrent mode looks very promising), while it would take some time for the Preact team to adopt it there. It happened before with hooks: The stable Preact version of the React feature followed a full year later.
From further inspection, we found the mp3 file used for the notification sound could be compressed using FFmpeg without a noticeable difference in sound, saving 17.5kB gzipped.
We also found that we used a TTF format for font files, which is not a compression format. We converted them to WOFF2 and WOFF formats, which reduced size by 23kb in gzip for each font file — 115kB in total.
We didn't notice any differences in performance score after these changes, but it was not a redundant exercise. With these changes, we transfer less information, using less network resources. This could be beneficial for customers with bad network connection.
We already used a content delivery network (CDN) to improve the loading time, but we were able to reconfigure its cache policies to make it more efficient. Instead of downloading chat every time user visits the page, chat is downloaded via network only on a first visit, while all subsequent requests will use a version from the browser cache.
A CDN is a very good way to deliver assets to clients, because CDN providers store a cached version of chat application assets in multiple geographical locations. Then, these assets are served based on visitor's location. For example, when someone in London accesses the website with our chat, chat assets are downloaded from a server in the United Kingdom.
Below, you can see how the bundle composition changed after applying the fixes we’ve mentioned. The entrypoint file was halved in size, and the total amount of JS was reduced by 35kB gzipped.
And here’s the full chart inclusive of all chat assets, including the static assets.
To see the impact of these reductions, we performed Google Lighthouse audits on our Shopify test store using three configurations:
We also used the mobile preset to tighten up the conditions. In this mode Lighthouse simulates mobile network and applies CPU throttling.
Here are the results:
Not only did we improve on the original penalties, but we were able to get the performance score almost to the same level as when there is no chat enabled at all.
This is either in line with, or outperforming most other chat widgets we have analyzed.
To maintain the current levels of performance and impact, we added a size-limit check to our continuous integration pipeline. When you open a pull request, our CI server builds the bundle, measures its size and raises an error if it exceeds the defined limit.
When you import a function, it’s not always obvious what kind of code would be added under the hood — sometimes it's just a few bytes of code, but other times it could import a large library.
This new step makes it possible to detect these regressions in a timely manner.
It's also possible to define a time limit using this tool. In this case, the tool runs a headless version of Chrome to track the time a browser takes to compile and execute your JS.
While it sounds nice, in theory, we found results from this method very unstable. There's an open issue with a suggestion on how to make measurements more stable, so hopefully we can take advantage of the time limit functionality in the future.
It turns out there is a lot of low-hanging fruit when it comes to performance optimization.
Just by using built-in developer tools in the browser and a plugin to generate a visual representation of the bundle, you might find a lot of opportunities to optimize performance without refactoring the whole codebase. In our case, we reduced entrypoint file size by 49% and reduced impact on the client's website significantly.
If you work on a new project, we strongly advise you to think about performance before it's too late. You can prevent the accumulation of technical debt by taking simple steps like checking bundlephobia before installing a library, adding size-limit to your build pipeline and running Lighthouse audits from time to time.
As ecommerce grew this year, we continued to work toward a decentralized vision of commerce — a model where merchants take back their customer relationships from colossal marketplaces and connect one-to-one with the people who buy their products.
Our merchants had a record-breaking number of these personal interactions in 2021 and that’s worth celebrating. So we’ve collected all the firsts, upgrades and proudest moments to share with you.
Since January 2021 feels like 10 years ago (and also 10 minutes ago, somehow), let’s take a walk down memory lane.
This year, we helped 8,000 brands support over 290 million shoppers, bringing in customers like Bidabo, Biketart, Lillie's Q and Livinguard.
All together, our customers generated $1.1 billion from their customer support functions in 2021.
Those companies varied in size, from single entrepreneurs still proving their products to enterprise companies scaling beyond their wildest dreams. Differences aside, they united in prioritizing customer experience to grow their businesses.
![]() |
Some industries came up again and again on our roster, including:
And because Gorgias powered growth across 110 industries, our customers’ customers were purchasing everything from medical supplies to maritime essentials.
![]() |
Every minute of 2021, Gorgias customers closed out an average of 179 tickets. In more relatable terms, they helped more than 10,000 shoppers in the time it took to watch a new episode of Shark Tank.
At the peak of support volume — the five-day period from Thanksgiving and Black Friday through Cyber Monday (BFCM) — our merchants answered 2.5 million tickets. Their support teams drove $25.6 million in sales during that time.
With tools made for that moment, they were able to stay on top of the ticket pile and turn the holiday rush into a gold rush.
![]() |
The impact didn’t stop there. On average, our merchants received a 4/5 satisfaction rating from their customers in 2021. The 75 million tickets they answered reinforced their brands, one loyal customer at a time.
After all, when your team has a million fires to extinguish, the only flames in customer support should be the emoji reactions to your five-star ratings.
And that’s exactly what you’ll be chasing as your performance metrics approach those from our top quartile of merchants. The top-performing teams clocked first-response times under two hours and resolution times under 8 hours, on average.
![]() |
As ecommerce becomes more decentralized, so do the channels that provide your customer feedback.
Still, it’s no surprise that email remains the most popular support channel, used by 92% of our brands. Together, they answered 64 million emails in 2021 (85% of all tickets).
This next stat may be more of a revelation: 78% of our brands have brought Facebook, Instagram, and/or Twitter interactions into their Gorgias workspace. They answered 3.7 million comments across those three channels, with almost two-thirds coming from Facebook.
![]() |
These social channels were used even more than our live chat, phone, and SMS integrations. And Gorgias helped merchants meet their customers in all of the above, without ever leaving their dashboard.
2021 also saw the launch of our long-awaited Gorgias App Store. This hub features 75 apps to extend the power of our helpdesk and centralize the information support agents rely on.
![]() |
62% of our merchants are using at least one of our partner apps, and we’re exploring new partnerships all the time to continue streamlining the customer support process.
This allows us, and all of our partners, to stay focused on being the absolute best at what we do.
Some of our merchants’ favorite integrations include:
![]() |
So go ahead and close those 20 tabs out — you won’t need them where we’re headed.
We released 91 features this year, 42 of which were led by your requests on our public roadmap.
Our most requested features (that are all available today!) were:
The quick adoption of our 2021 social media updates made it clear these channels were critical to our merchants’ success this year. We expect that to continue into 2022. (TikTok, anyone? Give it an upvote here!)
And while voice support didn’t see the same volume of requests as the social channels, we knew it was essential for certain brands. To better serve these merchants, we built a native phone integration that’s easily set up for new and existing numbers.
Merchants responded by taking more than 4,000 calls from shoppers this year. As a result, resolution times were up to 34% faster than others who left phone service out of their strategies.
![]() |
And while we want to give our merchants a variety of tools to provide help, sometimes it's best to empower shoppers to help themselves.
Our new Help Center feature provides FAQ hubs on merchant websites, to work toward this goal. The first 100 Help Centers that went live attracted over 100,000 views, answering inquiries before they could turn into tickets.
Another contribution is perhaps our most exciting release: Our Automate product allows for customization of self-service flows and deflects even more tickets to boost team efficiency.
Hundreds of merchants used the add-on in 2021 to automate their tickets, increasing efficiency across their support teams.
Our self-service portal alone deflected up to another 33% of tickets specific to shoppers (like order status). This freed up agent time to provide a more personal touch to important conversations.
We tripled the size of our team in 2021 to continue building the best possible helpdesk for the specific needs of ecommerce brands. There are now 185 employees who work in 16 countries around the globe and speak 18 different languages.
![]() |
That means there’s more Gorgians building out integrations, furthering the product roadmap, and contributing to our merchants’ success.
And our customers have let us know how much these improvements impacted their businesses. We currently hold top marks among the helpdesk categories on G2, Capterra and the Shopify app store.
![]() |
2021 was a year to remember for the Gorgias team and our customers, but 2022 is shaping up to be even better. It might even be the year people learn to pronounce our name. (470 people asked how during this year’s demos; think “gorgeous.”)
Fingers crossed.
Either way, we have some key new features on the roadmap and several surprises up our sleeves. We’ll continue building and optimizing channels so you can meet your customers where they are (including a much-requested Whatsapp integration). We’re also going to renew our focus on automation tools to increase efficiency across your team.
Make sure you subscribe to our newsletter, below, to beam all of our updates directly to your inbox.
As for the rest of the ecommerce industry, we have high hopes for 2022 (and plenty of predictions). We’re expecting continued shift of support tickets to social channels, a bigger emphasis on self-service options and a sharper focus on app integrations across the ecommerce ecosystem.
Until then, thanks for a great year!
Building an incredible customer support team at your company starts with finding the right people. But once you attract a pool of applicants, distinguishing between an excellent candidate and a so-so one isn’t always simple.
Why does this matter? Research from Harvard Business Review concluded that positive customer experiences can create as much as a 140% spread in how much customers spend at transactional businesses. And a massive part of that customer experience rides on your customer service team.
And for subscription-based businesses, that same study found a 31% spread in churn: quality of the experience was a significant driver of recurring membership and revenue.
This adds up over time, as well. Forbes found a cumulative loss of $75 billion yearly across all businesses pegged to a single source: poor customer service.
So, in the big picture, a great hire in customer service or support makes you more money. A bad one hurts the bottom line, and so much more.
As a hiring manager, it’s never been more important to get the most out of your interviews. The needs of customer service teams are more technically complex than before, with numerous channels for meeting customer needs. Working with an ecommerce helpdesk support partner like Gorgias can ease some of the pressure, but the interview itself remains highly strategic.
Before we get into specific questions, it’s worth noting that not every candidate has the right disposition for customer service work. Many customer service skills are crucial, and these traits and characteristics rise to the top of the list. As you work through the selection and interview process, look for these elements.
This isn’t an all-out dealbreaker, but interviewees that are already familiar with your brand and tone of voice will assimilate much more quickly into your organization. This is true whether this familiarity is natural (because the candidate is already a fan of your brand) or learned (because the candidate took the time to prepare before the interview).
Your customer service representatives spend all day communicating directly with customers, so you want to hire people with great communication skills for customer service roles. Your customer service team forms the face of your company for many customers, so the ability to communicate clearly about a customer’s problem is essential
Customer service reps will inevitably deal with angry customers as well as difficult customers, so hiring managers should look for candidates that can keep those communication skills up even under pressure.
The best candidates for customer service roles will pair strong communication skills with superior problem-solving ability, as well.
The days of single-channel customer service departments that existed solely as phone-based call centers are long gone. Most businesses rely on a multichannel customer service strategy that could involve face-to-face assistance, phone communication, or any of a wide range of web-based platforms. Today's agents need to apply customer service best practices to many channels.
A customer service candidate that can speak empathetically and clearly but cannot navigate social media or a customer service platform may not be a good fit for your current needs.
Conversely, you may find candidates that struggle with over-the-phone communication but can tirelessly plow through online tickets with superior skill.
If your team is large enough to differentiate, both types of candidates could succeed in clearly defined roles.
Still, it’s a good idea to get a sense of which service channels a candidate is likely to succeed in. Do this during the interview if you don’t do it earlier in the process.
If you’re a hiring manager in customer service or customer support, you already know that crafting the perfect customer service job interview questions is difficult. And if you’re an aspiring or current customer service representative, you may be looking for advice on how to answer customer service interview questions.
No matter your role, this list of 17 customer service interview questions and answers will give you some new approaches to the customer service job interview. Consider adding several of these questions to your interview process so you can hone your interview process and get better results.
(And if you’re a job seeker, these sample answers should give you insight into what interviewers might be expecting to hear. Adapt them to fit your situation, of course! You might also benefit from 5 Tips to Find Your Next Job in Support.)
You don’t have to hire someone with prior knowledge of your brand, but it sure helps. The more the prospect knows about you, the less you have to teach them. So it’s worth asking how familiar the prospective hire is with your brand and what they think about it.
If your interviewee is familiar with your brand, go ahead and ask if they’ve ever interacted with your customer service team. If they have, their answers could be illuminating — about the candidate and about the customer service experience.
Listen for an honest, enthusiastic response. It’s OK if a candidate doesn’t know much about the brand, but finding someone with the skills AND who is a big fan of your brand can lead to the ultimate customer service prospect.
Pro Tip: Watch out for a response in which a candidate wants to change too much: some constructive criticism is healthy, but customer service is not the place from which to spearhead major company-wide change.
“I’ve been using your [specific product/service] for some time now. I use it to [use case], and my appreciation for your [brand/culture/products] is a big part of why I applied for this job!”
Or
“I hadn’t heard of your company before I saw this job post, but as I began to research the company, I resonated with [product or aspect of mission]. I believe it’s something I can get behind and contribute to!”
Customer service is more software-oriented than ever before, and this question does double (maybe triple) duty: first, it tells you the obvious (whether the interviewee is familiar with your software). Second, it also often reveals a candidate’s overall comfort level with software. You’ll usually get a sense in their answer of whether they’re worried about the prospect of learning new software.
Third, assuming your job listing indicated which software solutions you use, this question will reveal how closely the applicant studied the job listing. If they seem confused by the question or don’t know which software solution you’re asking about, that might be a red flag.
As you listen to the applicant’s answer, don’t settle for a blunt “yes.” Follow up with a question or two that will reveal whether the person has actual knowledge of the software. And if the applicant isn’t familiar with your chosen software, listen for confidence about the ability to learn.
“At my previous company, we used [competitor software solution], and I can tell based on my own research that the two are pretty similar. I’m sure there may be some slight gaps, but I’m eager to learn those differences and get up to speed in [your software solution].”
Behavioral interview questions can be powerful because they give you insight into an interviewee’s thought processes and ways of engaging with the world. Length of employment at the previous company is merely factual, but the “why did you leave” portion is deeply behavioral.
Tenure at a previous employer isn’t always important, though a resume filled with a series of three- to six-month gigs could be a red flag. More important is the stated reason for leaving. Did the candidate struggle with a previous manager? Did they leave over scheduling issues (that are likely to be an issue at your company as well)?
To be clear, leaving a previous company isn’t always a bad thing. But the reasons why — and the way the candidate explains those reasons — can teach you a lot about the person’s approach to working on a team.
“I’m still employed at [current employer], but I see a better future for myself with your company. I’m happy enough at [current employer], but I’m more passionate about your company for [give a reason or two].”
Or
“I worked at [previous employer] for [time period] but had to leave due to [reason]. That said, I know [reason] won’t be an issue here because [explanation].”
This question helps you keep developing a profile of the candidate’s experience. At the most basic level, you want to learn whether they are familiar with the most common customer service questions that your team deals with.
While the key to delivering great customer service is the ability to use problem-solving skills to navigate especially difficult situations, those everyday types of questions make up the bulk of the actual work. Finding an employee that’s already well-versed in your most common customer issues (and who already has good responses to those issues) makes your job a lot easier.
Also, this is another behavioral interview question that can give you deeper insight into what makes a candidate tick. Listen carefully to how the person describes their activity helping various types of customers. You’ll learn at least as much about how the person thinks as how they solved a specific problem.
“Issues with account logins made up around 15 percent of my customer service interactions at my last job. We had a script to follow for this kind of issue, and I used it when I could. But over time I noticed that many users were getting tripped up on the same problem that wasn’t covered by the script. I helped them resolve it by [x] and recommended we add this step to the script.”
This is the first of several classic behavior-based questions. You’re listening for soft skills here, those intangibles that differentiate truly excellent customer service reps from the rest.
With this question, you’re looking at conflict resolution skills surrounding customer issues like public complaints or angry customer emails. Does the candidate have a handy example of being able to
You’re also looking at the ability to follow instructions and think outside the box. You don’t want renegades and mavericks, but you do want folks that can think beyond provided customer support scripts.
Push the interviewee to be specific with their answer to questions like these.
“Once I dealt with a customer with [stated problem]. I could tell the customer was upset before we ever started talking because of [verbal/written cues]. I kept my cool, sidestepped that anger, and determined that the customer’s core problem was [actual problem]. Once I identified that I made sure to empathize with the customer as I guided them to a solution to [actual problem.”
[Image source: Me.me]
Hiring for customer service is a delicate balance. You don’t want a cadre of people constantly trying to reinvent the wheel (or, worse, the company itself). And you also don’t want mindless followers. This question helps you gauge a candidate’s ownership mindset.
If they don’t have an answer at all, they might not be thinking enough about the big picture. Conversely, if their answer sounds a little too revolutionary, you’ll be aware that this candidate might need guidance in what’s appropriate.
As the candidate responds, listen for actionable ideas and methods that seem genuinely useful. Vague feedback with no clear outcomes isn’t what you’re looking for here.
“I noticed we were getting tons of customer support calls about one of the company’s products. The product was fine, but the included instructions left out a crucial step that was leading to the calls. I was able to point this out and escalate it to the proper team, who corrected the instructions for the next printing. In the meantime, I created an email template to help agents respond to customer questions about the issue faster. By getting the instructions fixed, I reduced these calls so the team could focus on more important customer issues.”
Sometimes, the best agents have experience from other roles with complementary skillsets. For example, wait staff at restaurants have a ton of insights about human interactions and communication since they serve people in person for hours on end.
Or, if the company products are highly technical or industry-specific, you’ll benefit from finding customer service reps with relevant tech or industry backgrounds as well.
Find out if your prospect has other experience they can bring to the table. Maybe they can even teach your team a thing or two.
“I’ve worked for ‘x’ years in foodservice, including ‘y’ years as a server. In those years I developed the ability to read verbal and nonverbal cues. And have found creative ways to meet customer needs. My time in restaurants has prepared me to excel in customer service by giving me a keen sense of customers’ needs, proactive tactics to keep them happy, and multiple strategies for resolving their complaints.”
You already know a candidate’s formal education as it is listed on their resume, but this question gives them a chance to expand upon that. Perhaps they took a specific course that’s relevant to this job or additional training certifications that didn’t make it on the resume.
Give them a chance to explain how some of their formal education enhances their abilities for this job.
This is also a great place to explore whether a candidate has experience in the systems you use, such as these:
Of course, reliance on formal training varies from company to company. Some brands focus more exclusively on skills and traits. Use your judgment with this question (but make sure you don’t imply that a degree is required unless it is).
“My degree was in [field], and as a part of my coursework, I took several courses in communication as well as a technology course. In these courses, I learned [two or three high-level lessons], which will help me in this role [explain how].”
“My top three core values in the workplace are [list three]. These core values permeate every aspect of my work: how I interact with customers, how I work with other team members, and more. If you ask [reference at previous employer] about this, I believe you’ll hear that I lived this out there, and I’ll do the same here.”
You want customer service agents that can, in most cases, get your customer what they want. But sometimes customers are wrong, demanding things that can’t be done. An experienced customer service rep will certainly have run into this scenario and learning how they handled it will give you great insight into their abilities.
Were they able to salvage a customer relationship? Show the customer a better way? Or did they just blow up the situation and provide no alternatives?
“I always do my best to meet customer requests, but of course this isn’t always possible. One time, a customer [describe illegitimate request scenario]. He was convinced I could do this for him, but it was out of scope. However, instead of just flat-out denying him, I was able to guide him to an alternative that was in scope. He didn’t get everything he wanted, but I did keep him as a customer.”
For interviewees with previous customer service experience, this question gives you insight into how far they’ve been stretched — as well as their emotional intelligence after the fact.
Look for how serious or difficult the described situation is (compared to what’s typical in your organization), and pay attention to how calmly — or not — the candidate can recount the scenario.
“In my current/previous position, I’ve had a few encounters in a class all their own. Probably the most challenging one was [describe the scenario]. It was challenging for sure, but I’m glad I went through it because I learned [lesson/insight]. I also really appreciated the support I got from my leadership team throughout the situation.”
If a candidate has a quality answer to this question, it will likely reveal the sorts of situations that motivate the individual. You should look for excitement, interest, and perhaps even joy as the individual answers this question. And knowing the kinds of situations that motivate an individual can give insight into whether they’ll be a good fit for your team.
“I once had a customer call in who was incredibly angry, but it was an issue that I knew I could solve. As I worked with the customer to unpack the layers of the issue, I heard her tone gradually soften. By the end of the encounter, I’d not only solved her problem, but I’d also managed to upsell her to a higher tier of service — and she was happy about it!”
The stock answer here is “contact my supervisor,” of course, but see if you can get a little more. What avenues (official and unofficial) would the candidate pursue before escalating to a manager? Will this prospect solve problems independently, or will the individual create an unending cascade of manager escalations?
“When I didn’t know an answer, I’d quickly search our internal knowledge base/wiki. If I didn’t find the answer there, I might search Google, our company Slack, or a more knowledgeable peer. I tried to minimize the number of escalations since I know that solving the problem myself is always the ideal outcome. But of course, I escalated issues to my manager when needed.”
“The customer is always right” only goes so far. Sometimes the customer is quite wrong, and your customer support teams know this. The real question is what a prospective team member will do when this happens.
This is another question that explores soft skills. There are countless ways to say “you’re wrong” without coming out and saying it. Can the prospect guide a customer to a better understanding without insulting them along the way? That’s the kind of customer service rep you need.
“I never take a confrontational approach when this happens. Instead, I assume that the customer isn’t willfully wrong, and I try to find a gentle way to guide them to a better understanding.
If there’s documentation or fine print that the customer missed, I’ll guide them to that information. I might also ask questions to get a better sense of where the customer got the incorrect understanding.”
Every one of us brings experiences from our personal lives into our professional work, and great customer service reps are no exception. We’ve all been the customer in need of service at some point, and there are great lessons to learn from the good experiences.
A prospect’s answer to this question should demonstrate their insightfulness and awareness. It will also likely reveal more about a person’s priorities in customer service encounters.
“I had an experience with [company] that impressed me as a customer and gave me some great ideas for how to solve customer challenges in my work. [Describe scenario and lessons learned.]”
Asking the opposite question gives you similar insights: whatever got under the skin of your interviewee is an aspect of customer service that they’re passionate about. And, of course, having been a frustrated consumer can build empathy when working with other frustrated consumers.
“I had an encounter with one company where the agents were working from scripts, and it didn’t seem like they took the time to process what I’d said in my complaint. It was deeply frustrating, but I learned from the experience that scripts can only get you so far and that I need to make sure I always understand the customer’s concern before I start trying to solve it.”
If you’ve gotten to this point and expect that you’ll offer the candidate a job, it’s time to get this crucial information. If your only needs are second shift and the candidate can’t or won’t work it, you need to know now.
Simply be honest. “I’m looking for full-time work, and normal business hours are my preference. I could work the second shift if necessary, but no overnights. That said, let me know what you’re looking for, and let’s talk about it.”
[Image source: IMC]
Getting the right team in place is a crucial component of your customer service strategy and so is giving your new team members the best in ecommerce customer service technology.
Find out why Gorgias is the #1 rated helpdesk for ecommerce merchants. See how Gorgias integrates with Shopify, Magento, and BigCommerce.
And, if you need help with the technology portion of your customer service strategy, schedule a Gorgias demo today.