Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Whop & Chop: Cutting CI time in half
Search
Irina Nazarova
August 27, 2025
Programming
0
17
The Whop & Chop: Cutting CI time in half
Irina Nazarova
August 27, 2025
Tweet
Share
More Decks by Irina Nazarova
See All by Irina Nazarova
Startups on Rails in Past, Present and Future–Irina Nazarova, RailsConf 2025
irinanazarova
0
360
Programmable colors: bridging design and code @ Figma Confir 2025
irinanazarova
1
98
Startups On Rails 2025 – Sin City Ruby
irinanazarova
2
90
Startups On Rails 2025 @ Tropical on Rails
irinanazarova
0
1.1k
Evolution of realtime and AnyCable Pro – Rocky Mountain Ruby, 2024 Irina Nazarova
irinanazarova
1
190
Rails World 2024 Lightning Talk Irina Nazarova "How to run a Ruby meetup"
irinanazarova
1
64
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
890
Liz Heym Catching Waves With Time-Series Data, SF Bay Area Ruby Meetup July 18 2024
irinanazarova
0
110
SF Bay Area Ruby meetup on July 18, 2024 at Cisco Meraki – intro
irinanazarova
0
100
Other Decks in Programming
See All in Programming
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.3k
「リーダーは意思決定する人」って本当?~ 学びを現場で活かす、リーダー4ヶ月目の試行錯誤 ~
marina1017
0
240
The State of Fluid (2025)
s2b
0
190
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
240
パスタの技術
yusukebe
1
400
TDD 実践ミニトーク
contour_gara
0
130
サイトを作ったらNFCタグキーホルダーを爆速で作れ!
yuukis
0
440
コンテキストエンジニアリング Cursor編
kinopeee
1
680
Microsoft Orleans, Daprのアクターモデルを使い効率的に開発、デプロイを行うためのSekibanの試行錯誤 / Sekiban: Exploring Efficient Development and Deployment with Microsoft Orleans and Dapr Actor Models
tomohisa
0
200
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
teamlab
PRO
0
490
AIエージェント開発、DevOps and LLMOps
ymd65536
1
330
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
13
3.2k
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
480
Music & Morning Musume
bryan
46
6.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Writing Fast Ruby
sferik
628
62k
Side Projects
sachag
455
43k
The Pragmatic Product Professional
lauravandoore
36
6.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Transcript
The Whop & Chop Cutting CI Time in half Irina
Nazarova
Thank you!
3 400000000 800000000 1200000000 1600000000 April 2021 April 2022 April
2023 April 2024 April 2025 1.48B 1.08B Total transaction volume, $ 0.74B 0.52B fast-paced startup built on Rails and Next.js
None
None
The stack 6 Problem: Slow test suite Rspec thoughtbot/ factory_bot
7 github.com/test-prof/test-prof
8 Rspec Minitest TestProf: toolbox to profile slow tests -StackProf
Integration -FactoryProf -TagProf -EventProf github.com/ tmm1/ stackprof
9 Rspec Minitest TestProf: helpers to speed up slow tests
-let_it_be: create test data once for an entire context -factory_default: avoid rebuilding associated objects by reusing a cached instance -before_all: runs setup only once per group
Let’s get to profiling! Find the report in tmp/test-prof/ Review
fl amegraph with Speedscope.app Focus: top method time spent 10
StackProf report 11
Top time-consuming methods -Heavy database activity (Trilogy#query), suggesting lots of
factories or queries. -Calls to external services like Stripe and OpenAI that should be mocked. -Signi fi cant amount of time spent in logging. 12
Let’s switch off logging in test! 13
A custom Sentry logger detected! 14 Let’s go a bit
further
Easy! How much time did we save? 15 Before: Single
process: ~25 min CI (16 workers): ~4 min After: Single process: ~12 min CI: ~2 min 50% CI time saved!
Next suspect: FactoryBot TagProf to watch for AR, factory creations
and Sidekiq jobs factory.create events were now responsible for more than half of the total test execution time 16
Factory Optimization Strategy 1: let_it_be — Create Once, Use Many
Replace let with let_it_be to create the record once for the entire describe block. Don’t use it on objects whose state is modi fi ed by one test. 17
Strategy 2: create_default — create resuable associations 18 Let’s fi
rst pro fi le factories: compare total vs. top-level factories to spot an issue in associations Factory Optimization
Strategy 2: create_default — create resuable associations 19 Factory Optimization
What’s next? 20
Parallelization Swap parallel_tests for test-queue Problem: it splits tests by
fi les. 21 parallel_tests test-queue Solution: split by individual tests.
Sound good? Well… Over 100 tests failed. The errors were
bizarre and seemingly random, with no obvious connection to our changes. 22
The Flaky Test Hunt: A Guide to Isolation Our new
test-queue setup had exposed years of hidden state leakage. 23
How we fought this… 24
Soon on evilmartians.com /chronicles 25
Shoutouts Julia Egorova Igor Platonov Travis Turner Vladimir Dementyev Reach
out:
[email protected]