Skip to content

Case study Product Launch

Launching Kinsta APM with deliberately broken WordPress sites

I planned and wrote the three launch articles for Kinsta APM, the performance monitoring tool Kinsta built into MyKinsta in 2020. I had a pre-release build and no slow sites, so I built two and broke them on purpose. Then I followed every slowdown from the dashboard chart to the line of code that caused it. Kinsta’s APM documentation still sends readers to two of the three articles.

Read the story

Client
Kinsta
Role
Technical Writer / Demo Builder / Editor
Year
2020
Disciplines
Launch planning, WordPress development, Performance debugging

Proof at a glance

The scale of the work


Three launch articles, published November 18, December 2, and December 14, 2020. All three still have my byline, and all five demos are still on them.

  • 3

    Sites broken on purpose

    A store and a membership site for the launch, and a regular WordPress site in 2022.

  • 45

    Screenshots

    Across the two use-case guides, from the dashboard chart down to the stack trace.

  • 6

    Years in the docs

    Kinsta’s APM documentation still sends readers to two of the three guides, in 2026.

The problem

A speed test tells you the page is slow and stops there

The Kinsta APM overview, from the explainerSource: Kinsta

Run a WordPress site through GTmetrix and you get a grade, a waterfall, and a list of things to fix on the front end. Run a slow checkout through it and you learn that the checkout is slow.

The time went somewhere, and a speed test can’t tell you whether PHP spent it or a payment API did. Site owners pay for that guess in developer hours. Their host pays for it in support tickets.

Kinsta’s answer was to build the investigation into MyKinsta and give it to every customer for free. Kinsta APM records every request as a transaction, splits it into spans, and keeps a stack trace for each span.

In its 2020 year in review, Kinsta called giving customers a way to pinpoint what slows their sites down one of the year’s priorities.

The launch problem

The easy article would have shown an empty dashboard

The easy article was a tour. Enable the tool on a clean site, screenshot the tabs, explain the terminology. I’d have been describing a chart with nothing in it.

The other easy article was a customer’s slow site. That’s a support case, and publishing it means publishing someone’s broken store with their plugins named.

In November 2020 I had a pre-release build of the tool and no slow sites to point it at. Every decision that follows came from one question.

What the demos had to be

  • Repeatable on demand, so the second screenshot matched the first
  • Traced to a named plugin, function, query, or external call
  • Built on my own sites, never on a customer’s

The constraint

Both sites ran the same stack

I built the two sites on the same server stack, so a reader could compare the two guides without wondering whether the server explained the difference. Each one got a registered domain instead of a Kinsta temporary URL, so the TLS handshake happened and an external call in the trace looked the way it would on a customer’s site.

Diagnosis stopped where the trace stopped. The tool finds the code. The article says who fixes it, and it says that fixing it falls outside Kinsta support’s scope.

Monitoring
Kinsta APM, pre-release build

The test stack, both sites

Web server
Nginx 1.19.4
PHP
7.3.24-3
Database
MariaDB 5.5.5
WordPress
5.5.3 on the Astra 2.6.1 theme
Store plugins
WooCommerce 4.7.1, WooCommerce Cart Abandonment Recovery, Kinsta MU plugins, Akismet
Membership plugins
LearnDash LMS, Gutenberg, Kinsta MU plugin, Akismet
Domains
A registered domain for each site

The approach

I broke my own sites so the tool had something to find

Both sites ran the same stack, each failure had to happen again on demand, and each one had to end at a named plugin, function, query, or external call. Those three rules are why most of the work in this project happened before the first screenshot.

  1. Set up two sites that looked like customers’ sites

    I set up the store first, on Astra with WooCommerce 4.7.1 and a cart abandonment plugin. A store with a checkout has more places to go wrong than a blog does.

    Then I set up the membership site on LearnDash, with courses behind a login. It got a set of test members, so the emailer had someone to write to.

    What each site needed

    WooCommerce store
    Products, a theme, a cart abandonment plugin
    LearnDash membership site
    Courses, restricted pages, test members
    Both
    A registered domain, the same stack
  2. Write five plugins that fail in five different places

    Each plugin did one thing badly. payment-api called slow.payment-api.com from a function named update_card_payment every time a customer added a product to the cart.

    snail-admin-refresh-notice ran snail_admin_refresh on every admin page load and fetched suspicious-link.com while it was at it.

    For the product pages I injected a slow database statement into woocommerce-related-products, the extension that builds the related-products slider under every product.

    On the membership site, course-views-counter called courses.salrav-external.com on every restricted page. Mass Member Emailer sent mail to every member through the web server at a fixed time each day.

    That’s an external call, admin PHP, a MySQL query, an external call plus PHP on the front end, and a scheduled job. Five layers, so the articles could show the tool reading each one.

    The admin plugin also put a hideous notice at the top of the WordPress dashboard, just like some popular plugins do.

    One plugin per layer

    • payment-api, an external call
    • snail-admin-refresh-notice, admin PHP
    • woocommerce-related-products, a MySQL query
    • course-views-counter, external call plus PHP
    • Mass Member Emailer, a scheduled job
  3. Make the slowdowns happen while the tool was recording

    For each demo I enabled the tool, waited at least 5 minutes, and used the site the way its owner would.

    For the admin demo I waited 15 minutes and worked in the WooCommerce dashboard the whole time. For the emailer demo I waited for 22:30, when the plugin was set to send.

    Recording windows

    Most demos
    5 minutes, then use the site
    Admin demo
    15 minutes in the dashboard
    Emailer demo
    Wait for the 22:30 send
  4. Take the screenshots in the order a reader would click

    Every demo has the same sequence of screenshots, from the overall transaction chart down to the stack trace. The eight stops are listed under the results.

    I took 25 for the WooCommerce guide and 20 for the membership guide. That count includes the site screenshots that show the notice, the slider, and the emailer’s settings page.

    I’m going through all of this because the articles skip it. A reader sees a trace and a stack trace. Two sites and five plugins are what put them there, plus the waiting.

    Screenshots taken

    WooCommerce guide
    25 screenshots
    Membership guide
    20 screenshots

    Dashboard chart to stack trace, every demo

  5. Check every draft with the product team and Support

    I was Kinsta’s Technical Editor, so the editorial sign-off was mine. That made the product review matter more, since the person checking the prose was also the person who wrote it. The product team read every draft for unsupported claims, and Support helped me debug the demos.

    Some of the work never made the text. I read the product team’s internal documentation and their chats. I worked on the pre-release build before customers had it, which made me one of its early testers. I also worked on the knowledge base article and the product page, and I checked the launch video scripts.

    The Content team planned the wider campaign. Matteo Duò published a roundup of APM tools on October 14, 2020, a month before my explainer. Kinsta’s launch announcement and its year in review then linked the three articles as a set, and the documentation still does.

    The use-case idea, the briefs, the sites, the plugins, the screenshots, and the three articles were mine.

    The rules, and why

    Product team reads every draft
    Inside editorial, the only reader was me
    Support debugs the demos
    A demo that broke the wrong way teaches the wrong lesson
    Diagnosis and repair stay separate
    Each article says when to hire a developer
    The evidence narrows in stages
    “It hints,” then the span details, then the stack trace
  6. Publish the three times the tool missed

    I wrote the admin demo to show Kinsta APM highlighting the problem spans in red. It didn’t.

    The two slow spans, snail_admin_refresh at over 10 seconds and the suspicious-link.com GET, were in the timeline with no highlight on them. I found them by reading the durations. I left that in. The article says the tool highlights the problem spans in most cases, and that this was one of the other cases.

    In the emailer demo, the first span the tool highlighted was mass_member_emailer at 1,269.68 ms, which was 15.5% of the sample. The one that mattered was further down the timeline.

    Mass_Member_Emailer->send_emails took 5,070.85 ms, or 61.92% of the same sample. The article walks the reader past the first span to the second, because that’s the order the timeline shows them in.

    In the payment demo, the symptom was a slow add-to-cart button. The slowest transaction in the table was /single-product. WooCommerce posts the cart action to the product page, so the article had to explain the transaction name before it could explain the trace.

    All three stayed in. Each one cost a paragraph, and each paragraph is still on the page.

    The emailer demo, one sample

    mass_member_emailer
    1,269.68 ms, 15.5%
    send_emails
    5,070.85 ms, 61.92%

    The first highlighted span, then the one that mattered

The results

Every demo ended at the line of code that caused it

What the five demos found, with the numbers from the pages.

Store, checkout
Add to cart took over 5 seconds. The trace found an external call in payment-api. 5,001.44 ms of a 5,535.14 ms transaction, 90.4%. I read the first figure off the screenshot.
Store, admin
The admin dashboard crawled. The trace found PHP and an external GET in snail-admin-refresh-notice. Every admin-ajax.php sample over 10 seconds. The tool did not highlight either span.
Store, product pages
Product pages stalled. The trace found a MySQL statement in woocommerce-related-products. 136,417.63 ms at the maximum, on a single product page.
Membership, courses
Restricted course pages took over 3 seconds. The trace found an external call and PHP in course-views-counter. 11,627.77 ms on the slowest sample.
Membership, daily
The site slowed at the same time every day. The trace found Mass_Member_Emailer->send_emails running on the web server. 5,070.85 ms, 61.92% of the sample.

The five demos covered five layers with one investigation path. Every demo walked the same eight stops, whichever layer was slow, so a reader who followed one could follow the rest without relearning the tool.

Kinsta’s launch announcement linked all three articles as the reading list for the tool, and Kinsta’s APM documentation still sends readers to the WooCommerce and membership guides in 2026.

The eight stops, every demo

  1. Symptom what the owner or member noticed
  2. Overall transaction time PHP, MySQL, or external
  3. Slowest transactions which request took it
  4. Transaction samples slowest, 95th, and 50th
  5. Trace timeline the spans inside one sample
  6. Span details the type, the URL, the plugin
  7. Stack trace the function that started it
  8. Next step inspect, replace, reschedule, or hire

The five demos were controlled and ran on my own two sites.

The published work

The three launch articles

All three are live under my byline. Kinsta has edited each one since 2020, and the demos and their numbers are unchanged.

  • Kinsta's feature illustration for the explainer, Why You Need an Application Performance Monitoring Tool
    Explainer / Nov 18, 2020 Why You Need an Application Performance Monitoring Tool Eight use cases, published six days before the launch video Source: Kinsta Read the article
  • Kinsta's illustration for the WooCommerce guide: two people study a page of charts through magnifying glasses
    WooCommerce / Dec 2, 2020 How To Fix WooCommerce Performance Issues Using Kinsta APM A store, three failures built on purpose, 25 screenshots Source: Kinsta Read the guide
  • Kinsta's illustration for the membership guide: a laptop on a cushion, wired to a hand-held monitor showing a chart
    Membership / Dec 14, 2020 How to Fix Your Membership Website’s Speed With Kinsta APM Tool An LMS site, two failures built on purpose, 20 screenshots Source: Kinsta Read the guide

The final proof

The demos, from the chart to the culprit


Fourteen screenshots from the two guides, one demo at a time, in the order a reader clicks them.

  • WooCommerce guide / Store, checkout The Kinsta APM main dashboard screen. Source: Kinsta
  • WooCommerce guide / Store, checkout A list of the slowest transactions in Kinsta APM. Source: Kinsta
  • WooCommerce guide / Store, checkout Transaction sample details in Kinsta APM. Source: Kinsta
  • WooCommerce guide / Store, checkout The payment demo. slow.payment-api.com took 5,001.44 ms of a 5,535.14 ms transaction. Source: Kinsta
  • WooCommerce guide / Store, admin Finding the slowest spans in the transaction trace timeline. Source: Kinsta
  • WooCommerce guide / Store, admin Examining the slowest span’s details in Kinsta APM. Source: Kinsta
  • WooCommerce guide / Store, admin The annoying WordPress admin notice. Source: Kinsta
  • WooCommerce guide / Store, product pages The troublesome span is highlighted in bold red. Source: Kinsta
  • WooCommerce guide / Store, product pages Span details and Stack trace of the slow database query. Source: Kinsta
  • Membership guide / Membership, courses Kinsta APM highlights spans with critical performance issues Source: Kinsta
  • Membership guide / Membership, courses Span details and Stack trace of a span Source: Kinsta
  • Membership guide / Membership, daily Notice the spike in transaction time Source: Kinsta
  • Membership guide / Membership, daily The emailer demo. Mass_Member_Emailer->send_emails at 5,070.85 ms, 61.92% of the sample. Source: Kinsta
  • Membership guide / Membership, daily The critical span’s details and stack trace Source: Kinsta

Distribution and reuse

Where the three articles went after launch

Everything below opens in a browser. 16 months after the launch I built a third site, a regular WordPress site this time, and left it unoptimized on purpose. I load-tested it with k6 at 50 virtual users for 10 minutes, then read the result through the Transactions tab and a WordPress tab the tool didn’t have at launch.

What I would change

Six things I would change, and four I got wrong

I wrote five plugins for this launch. Each one was built to fail in a specific place, and each one still does that in the screenshots. I don’t have a copy of any of them.

If you’re writing the launch content for a tool that finds problems, break one thing on a test site before you write a word. Turn the tool on for an hour and screenshot the path from the chart to the stack trace. The article comes out of the screenshots. A tour of the dashboard gives you nothing to write from.

Next time
  • Keep every demo plugin in version control
  • Save the traffic scripts, so the slowdowns can be reproduced without me
  • Write a symptom-to-evidence matrix before the first screenshot
  • Capture a trace after the fix as well as before it
  • Use one sample window for every demo
  • Archive a launch-day copy of each page myself, since Kinsta keeps editing them
What I got wrong
  • “SSL/TSL handshake,” in both guides. It’s TLS
  • Mass_Member_Emailer—>send_emails renders with a dash where the arrow should be, in the membership guide. WordPress converted the -- in my draft
  • The 46% of users who don’t revisit a slow site, in the WooCommerce intro, links to Kinsta’s own page-speed guide rather than to the study. By my current rule, a number without its study doesn’t go in
  • The titles promise “Real-World Examples” and “Actual Examples.” The body of each guide says the failures were simulated

I would rather find those myself than have a reader find them.

Sources and credits

Where to check this

Kinsta has updated all three pages since 2020. The demos, the numbers, and the byline are what remain of the launch-day copy.