← Extractions

Ever shorter feedback loop — Krzysztof Hasiński at wroclove.rb 2022

Krzysztof 'Chris' Hasiński's wroclove.rb 2022 talk on shortening the developer feedback loop. He traces feedback loops from 1960s punch cards through terminals, local compilation, and test suites to modern exploratory programming, then prescribes concrete tactics: throw money at faster hardware, run code locally, mock third-party services, push often behind feature flags, simplify setup, dockerize dependencies, and aggressively speed up test suites with tools like test-prof, knapsack_pro, parallel_tests, Crystal Ball and Guard.

Model
claude-opus-4-7
Ingestion
e61d6ac4
Input tokens
321,771
fresh
237,461
cached
71,537
cache write
12,773
Output tokens
15,777
Duration
236.2s
Roundtrips
5
Tool calls
17
Cost
$0.00
Nodes/edges extracted
41 / 61
Read set (nodes/edges)
325 / 2

Nodes (41)

create OVH company
kind (empty) company
name (empty) OVH
slug (empty) ovh
attrs (empty) {"industry" => "hosting"}
description (empty) European bare-metal and cloud hosting provider mentioned alongside Hetzner as a cheap option for self-hosted CI machi...
short_description (empty) European hosting and cloud provider.
create FactoryBot tool
kind (empty) tool
name (empty) FactoryBot
slug (empty) factorybot
attrs (empty) {"category" => "library"}
description (empty) Widely-used Ruby gem for defining and building test data. Cited as the site of the Factory Cascades anti-pattern when...
short_description (empty) Ruby gem for building test fixtures as factory-defined objects.
create MySQL tool
kind (empty) tool
name (empty) MySQL
slug (empty) mysql
attrs (empty) {"category" => "service"}
description (empty) Relational database. Referenced in the closing Q&A: an audience member cut a test suite from ~10 minutes to ~1 minute...
short_description (empty) Open-source relational database.
create SQLite tool
kind (empty) tool
name (empty) SQLite
slug (empty) sqlite
attrs (empty) {"category" => "service"}
description (empty) Embedded SQL database. Mentioned as also supporting in-RAM storage, making it another candidate for the MySQL-in-RAM ...
short_description (empty) In-process relational database engine.
create Shared Hardware Is a 1970s Feedback Loop takeaway
kind (empty) takeaway
name (empty) Shared Hardware Is a 1970s Feedback Loop
slug (empty) shared-hardware-is-a-1970s-feedback-loop
attrs (empty) {"type" => "insight"}
description (empty) Developers who skip local runs and push directly to CI are effectively using a 1970s shared-terminal workflow: waitin...
short_description (empty) Pushing to CI without running locally puts you in a shared-terminal-era queue.
create Buy Faster Hardware takeaway
kind (empty) takeaway
name (empty) Buy Faster Hardware
slug (empty) buy-faster-hardware
attrs (empty) {"type" => "recommendation"}
description (empty) Spending money is the cheapest way to shorten the feedback loop. A $1500–2000 MacBook that saves 10 minutes per day (...
short_description (empty) A faster developer laptop or CI server pays for itself in months.
create Keep Project Setup Simple takeaway
kind (empty) takeaway
name (empty) Keep Project Setup Simple
slug (empty) keep-project-setup-simple
attrs (empty) {"type" => "recommendation"}
description (empty) A new developer should be able to bring a project up with essentially `bundle install`, DB setup and `rails c` (or a ...
short_description (empty) Optimize for `bundle; db setup; rails c` so new developers can work in minutes.
create Dockerize Exotic Dependencies takeaway
kind (empty) takeaway
name (empty) Dockerize Exotic Dependencies
slug (empty) dockerize-exotic-dependencies
attrs (empty) {"type" => "recommendation"}
description (empty) Even if you don't dockerize the app itself (binding pry can be painful in Docker), put exotic dependencies like Elast...
short_description (empty) Dockerize hard-to-install services like Elasticsearch and ship default config.
create Provide Seeds for All Data takeaway
kind (empty) takeaway
name (empty) Provide Seeds for All Data
slug (empty) provide-seeds-for-all-data
attrs (empty) {"type" => "recommendation"}
description (empty) If a developer has to manually recreate an account with their custom password every time they reset the database, the...
short_description (empty) Ship seed data so developers can reset the DB without losing their local work.
create Quantify Wasted Time to Convince the Business takeaway
kind (empty) takeaway
name (empty) Quantify Wasted Time to Convince the Business
slug (empty) quantify-wasted-time-to-convince-the-business
attrs (empty) {"type" => "recommendation"}
description (empty) Speeding a test suite from 15 to 5 minutes isn't an obvious business case. Track how long builds take, how long PRs s...
short_description (empty) Track CI wait, queue time, and bug rework; multiply by salary; show the money.
create Cut Test Suites Under 15 Minutes takeaway
kind (empty) takeaway
name (empty) Cut Test Suites Under 15 Minutes
slug (empty) cut-test-suites-under-15-minutes
attrs (empty) {"type" => "recommendation"}
description (empty) Hasiński's rule of thumb: if a test suite runs longer than 15 minutes he switches to TikTok/Facebook while waiting. E...
short_description (empty) A test suite longer than 15 minutes loses developer focus to social media.
create Cache Clear Hook Killed a Test Suite takeaway
kind (empty) takeaway
name (empty) Cache Clear Hook Killed a Test Suite
slug (empty) cache-clear-hook-killed-a-test-suite
attrs (empty) {"type" => "lesson-learned"}
description (empty) Audience war story: on joining a new company, the test suite took ~15 minutes. test-prof revealed that someone had co...
short_description (empty) A `Rails.cache.clear` in an RSpec before(:each) inflated a suite from 40s to 15 minutes.
create Paperclip Disable Convert Trick takeaway
kind (empty) takeaway
name (empty) Paperclip Disable Convert Trick
slug (empty) paperclip-disable-convert-trick
attrs (empty) {"type" => "lesson-learned"}
description (empty) Q&A contribution: a Paperclip maintainer shared that Paperclip ships a quick setting to stop converting files (always...
short_description (empty) Disabling Paperclip's file conversion in tests cut a suite from 3.5 minutes to under 30 seconds.
update Krzysztof Hasiński person
attrs (empty) {"nickname" => "Chris", "nationality" => "Polish"}
description Conference speaker. Ruby developer who goes by 'Chris' because his Polish name is hard for English speakers to pronounce. Filled a missin...
short_description Conference speaker. Ruby developer; wroclove.rb speaker on developer feedback loops.
update Ever shorter feedback loop talk
description Talk at wroclove.rb 2022. Krzysztof Hasiński's wroclove.rb 2022 talk prepared the day before to fill an empty slot. Defines the feedback loop a...
short_description Talk at wroclove.rb 2022. Talk on shortening the code-to-run-to-validate developer feedback loop.
create Feedback Loop concept
kind (empty) concept
name (empty) Feedback Loop
slug (empty) feedback-loop
attrs (empty) {"category" => "practice"}
description (empty) Any system in which the output affects the input for the next iteration. Applied to software development as the round...
short_description (empty) System in which the output affects the input for the next iteration.
create Punch Card Programming concept
kind (empty) concept
name (empty) Punch Card Programming
slug (empty) punch-card-programming
attrs (empty) {"category" => "practice"}
description (empty) 1960s workflow in which programmers wrote code on paper, handed it to someone who punched it onto cards, handed cards...
short_description (empty) 1960s workflow where code was mailed through typists and operators for a days-long feedback loop.
create VT100 Terminal concept
kind (empty) concept
name (empty) VT100 Terminal
slug (empty) vt100-terminal
attrs (empty) {"category" => "practice"}
description (empty) Digital Equipment Corporation VT100 terminal, representative of 1970s text terminals connected to mainframes via acou...
short_description (empty) 1970s text terminal whose protocol is still emulated in modern terminal apps.
create awk tool
kind (empty) tool
name (empty) awk
slug (empty) awk
attrs (empty) {"category" => "language"}
description (empty) Unix text-processing programming language. Originally published as a throwaway language its authors didn't intend to ...
short_description (empty) Text-processing programming language; one of the first projects to ship automated tests.
create Exploratory Programming concept
kind (empty) concept
name (empty) Exploratory Programming
slug (empty) exploratory-programming
attrs (empty) {"category" => "practice"}
description (empty) Practice of probing a running program via a REPL/console, inspecting state, trying methods, and modifying code mid-fl...
short_description (empty) Interactively inspecting and modifying a running program via a live console.
create Live Reload concept
kind (empty) concept
name (empty) Live Reload
slug (empty) live-reload
attrs (empty) {"category" => "practice"}
description (empty) Front-end development technique that watches files and refreshes the browser automatically on change, often preservin...
short_description (empty) Front-end development technique auto-refreshing the browser on file change while preserving state.
create Mock Third-Party Services Locally concept
kind (empty) concept
name (empty) Mock Third-Party Services Locally
slug (empty) mock-third-party-services-locally
attrs (empty) {"category" => "practice"}
description (empty) Practice of replacing integrations with Stripe, auth providers, accounting services, etc. with local mocks or stubs s...
short_description (empty) Stub or mock external services so the app can be developed and tested without them.
create Develop in Production concept
kind (empty) concept
name (empty) Develop in Production
slug (empty) develop-in-production
attrs (empty) {"category" => "practice"}
description (empty) Deliberate, careful use of the Rails console and live production for investigations that can't be replicated locally ...
short_description (empty) Using the Rails console and production data carefully to diagnose real issues.
create Push Often Behind Feature Flags concept
kind (empty) concept
name (empty) Push Often Behind Feature Flags
slug (empty) push-often-behind-feature-flags
attrs (empty) {"category" => "practice"}
description (empty) Practice of landing unfinished code to main/master hidden behind a feature flag rather than letting it rot in a long-...
short_description (empty) Ship unfinished code to master hidden behind a feature flag instead of long-lived PRs.
create Factory Cascades concept
kind (empty) concept
name (empty) Factory Cascades
slug (empty) factory-cascades
attrs (empty) {"category" => "practice"}
description (empty) Test-slowness anti-pattern surfaced by test-prof: a Factory builds one entity that references another that references...
short_description (empty) Test-slowness anti-pattern where factories build a whole object graph per example.
create Build vs Create in Tests concept
kind (empty) concept
name (empty) Build vs Create in Tests
slug (empty) build-vs-create-in-tests
attrs (empty) {"category" => "practice"}
description (empty) Heuristic for factory-based test suites: pick the cheapest factory method that still satisfies the test. Use build_st...
short_description (empty) Prefer build/build_stubbed over create to avoid unnecessary DB hits in tests.
create Aggregate Test Failures concept
kind (empty) concept
name (empty) Aggregate Test Failures
slug (empty) aggregate-test-failures
attrs (empty) {"category" => "practice"}
description (empty) RSpec feature in which a slow example combining several assertions against one expensive endpoint is configured to ag...
short_description (empty) RSpec option letting a slow example record all assertion failures instead of stopping at the first.
create test-prof tool
kind (empty) tool
name (empty) test-prof
slug (empty) test-prof
attrs (empty) {"category" => "library"}
description (empty) Ruby gem by Evil Martians (the speaker notes its name intentionally avoids 'TestProf' branding). Large toolkit of sol...
short_description (empty) Evil Martians toolkit for profiling and speeding up Ruby test suites.
create knapsack_pro tool
kind (empty) tool
name (empty) knapsack_pro
slug (empty) knapsack_pro
attrs (empty) {"category" => "service"}
description (empty) Commercial parallel-test distribution service for Ruby. Uses a server that distributes tests to workers on demand so ...
short_description (empty) Paid server/client solution for evenly distributing parallel RSpec test runs.
create parallel_tests tool
kind (empty) tool
name (empty) parallel_tests
slug (empty) parallel_tests
attrs (empty) {"category" => "library"}
description (empty) Popular free Ruby gem for running tests in parallel on a single machine. Creates isolated environments per process, c...
short_description (empty) Ruby gem running tests across multiple processes on one machine.
create Crystal Ball tool
kind (empty) tool
name (empty) Crystal Ball
slug (empty) crystal-ball
attrs (empty) {"category" => "library"}
description (empty) Ruby gem that records code coverage per test, then on a file change produces a list of tests whose coverage touched t...
short_description (empty) Ruby gem picking tests to run based on code coverage of changed files.
create CircleCI tool
kind (empty) tool
name (empty) CircleCI
slug (empty) circleci
attrs (empty) {"category" => "service"}
description (empty) Commercial hosted CI service. Referenced in the talk as an example of a parallel-test result display and by an audien...
short_description (empty) Hosted continuous integration service.
create GitHub Actions tool
kind (empty) tool
name (empty) GitHub Actions
slug (empty) github-actions
attrs (empty) {"category" => "service"}
description (empty) GitHub's CI/CD platform. Free for public repos; paid for private usage. Supports self-hosted runners — a small script...
short_description (empty) GitHub's hosted CI/CD service with self-hosted runner support.
create GitHub Self-Hosted Runner concept
kind (empty) concept
name (empty) GitHub Self-Hosted Runner
slug (empty) github-self-hosted-runner
attrs (empty) {"category" => "practice"}
description (empty) Pattern: install Docker and a small GitHub-provided script on a machine you own/rent; it registers as a GitHub Action...
short_description (empty) Pattern of running your own CI worker connected to GitHub Actions.
create Hetzner company
kind (empty) company
name (empty) Hetzner
slug (empty) hetzner
attrs (empty) {"industry" => "hosting"}
description (empty) European hosting provider offering cheap bare-metal dedicated and cloud servers. Referenced in the talk as a way to g...
short_description (empty) European bare-metal and cloud hosting provider popular for cheap dedicated servers.
create MySQL Data Directory in RAM takeaway
kind (empty) takeaway
name (empty) MySQL Data Directory in RAM
slug (empty) mysql-data-directory-in-ram
attrs (empty) {"type" => "lesson-learned"}
description (empty) Closing-Q&A dark-art trick: for a project stuck on MySQL because of a tightly-coupled Sphinx search engine, the speak...
short_description (empty) Mounting the MySQL data directory in RAM collapsed a 10-minute test suite to ~1 minute.
create Are you using Crystal Ball? question
kind (empty) question
name (empty) Are you using Crystal Ball?
slug (empty) are-you-using-crystal-ball
attrs (empty) {"answer_summary" => "Speaker hadn't used Crystal Ball; the audience member confirms it helps when CI is the only way...
description (empty) Audience remark/question introducing the Crystal Ball gem, which uses per-test code coverage to select tests relevant...
short_description (empty) Audience introduces Crystal Ball as a way to run only tests affected by changed files.
create How to optimize tests around callbacks without refactoring? question
kind (empty) question
name (empty) How to optimize tests around callbacks without refactoring?
slug (empty) how-to-optimize-tests-around-callbacks-without-refactoring
attrs (empty) {"answer_summary" => "No silver bullet — remove callbacks, observe failures, and replace them with explicit method ca...
description (empty) Audience asks how to apply build-over-create when the existing codebase uses many ActiveRecord callbacks. Hasiński: y...
short_description (empty) Q&A: how to speed up tests using build instead of create when code is callback-heavy.
create Do fixtures beat factories? question
kind (empty) question
name (empty) Do fixtures beat factories?
slug (empty) do-fixtures-beat-factories
attrs (empty) {"answer_summary" => "Speaker lacks direct experience; another attendee notes test-prof can catch factories and use t...
description (empty) Audience asks about using Rails YAML fixtures instead of FactoryBot. Hasiński hasn't used them extensively; his intui...
short_description (empty) Q&A on whether YAML fixtures are faster than FactoryBot for tests.
create Can we teach the community not to shoot themselves with factories? question
kind (empty) question
name (empty) Can we teach the community not to shoot themselves with factories?
slug (empty) can-we-teach-the-community-not-to-shoot-themselves-with-factories
attrs (empty) {"answer_summary" => "Yes — library-level docs and junior-developer materials badly need explicit warnings about Fact...
description (empty) Audience member asks whether the community should improve documentation (e.g. FactoryBot README) to explain the conse...
short_description (empty) Q&A: should FactoryBot docs warn about association performance?
create Is Guard still useful? question
kind (empty) question
name (empty) Is Guard still useful?
slug (empty) is-guard-still-useful
attrs (empty) {"answer_summary" => "Guard watches files and runs relevant tests on save; pairs well with Crystal Ball and pop-up no...
description (empty) Audience remark introducing the Guard gem as another option alongside Crystal Ball: watches files and runs matching t...
short_description (empty) Q&A remark on Guard for auto-running tests on file change.

Edges (61)

create Do fixtures beat factories?asked_atEver shorter feedback loop
context (empty) Asked during the talk's Q&A.
relation (empty) asked_at
source_node_id (empty) 06ebda06-af91-43cc-84f3-eeef8b032a7b
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Do fixtures beat factories?aboutFactoryBot
context (empty) Question contrasts Rails fixtures with FactoryBot.
relation (empty) about
source_node_id (empty) 06ebda06-af91-43cc-84f3-eeef8b032a7b
target_node_id (empty) c5e40976-159e-4c1e-a23c-fe4e19da045d
create Do fixtures beat factories?abouttest-prof
context (empty) Answer notes test-prof can catch factories and reuse them as fixtures.
relation (empty) about
source_node_id (empty) 06ebda06-af91-43cc-84f3-eeef8b032a7b
target_node_id (empty) ad5cb49e-805d-4139-9ad8-859915e0b71e
create Can we teach the community not to shoot themselves with factories?asked_atEver shorter feedback loop
context (empty) Asked during the talk's Q&A.
relation (empty) asked_at
source_node_id (empty) e6ebe8d6-b2f8-4559-a845-338b72a1d125
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Can we teach the community not to shoot themselves with factories?aboutFactoryBot
context (empty) Proposes improving FactoryBot documentation to warn about associations.
relation (empty) about
source_node_id (empty) e6ebe8d6-b2f8-4559-a845-338b72a1d125
target_node_id (empty) c5e40976-159e-4c1e-a23c-fe4e19da045d
create Is Guard still useful?asked_atEver shorter feedback loop
context (empty) Raised as an audience contribution during the talk's Q&A.
relation (empty) asked_at
source_node_id (empty) 91da7b3a-61cc-4a8c-8ba8-8945cfbaca18
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Is Guard still useful?aboutGuard
context (empty) Question is about the Guard file-watcher gem.
relation (empty) about
source_node_id (empty) 91da7b3a-61cc-4a8c-8ba8-8945cfbaca18
target_node_id (empty) 120a09f1-2974-46e8-899f-5b2c40554e78
create Krzysztof Hasińskirecommendstest-prof
context (empty) Recommends test-prof for finding Factory Cascades and auto-swapping create for build.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) ad5cb49e-805d-4139-9ad8-859915e0b71e
update Krzysztof HasińskiauthoredEver shorter feedback loop
context (empty) Delivered this talk at wroclove.rb 2022 as a last-minute replacement for a missing slot.
update Ever shorter feedback looppresented_atwroclove.rb 2022
context (empty) Filled an empty slot at the 2022 edition of wroclove.rb.
create Krzysztof Hasińskiattendedwroclove.rb 2022
context (empty) Speaker at wroclove.rb 2022.
relation (empty) attended
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) cfc5cfd3-25a6-46c2-8b5d-626986c71c24
create Ever shorter feedback loopaboutFeedback Loop
context (empty) The central concept the talk is organized around.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) c4d4680d-5880-4095-b8dd-99d27a728d56
create Ever shorter feedback loopaboutPunch Card Programming
context (empty) Uses the 1960s punch card workflow as the historical baseline for the feedback loop.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 372a41f8-9be1-45d8-b732-c13c0e21bd39
create Ever shorter feedback loopaboutVT100 Terminal
context (empty) Describes 1970s terminal-based editing with ex/vi as the next feedback-loop era.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 13309492-8b55-4efd-b6a2-ff52fe01d9aa
create Ever shorter feedback loopaboutawk
context (empty) Cites awk's authors as pioneers of automated testing in the 1980s to protect developer time.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) d7a301b7-18d1-4e8d-8ee8-4939d2b842f4
create Ever shorter feedback loopaboutExploratory Programming
context (empty) Modern consoles enable stopping, inspecting and modifying running programs.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 6987362f-7757-4963-831e-51bcb0d1d3e4
create Ever shorter feedback loopaboutLive Reload
context (empty) Cited as an example of a near-instant front-end feedback loop.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 4e4cb546-1610-4488-8b3e-d46e229c95e4
create Ever shorter feedback loopaboutMock Third-Party Services Locally
context (empty) Prescribes mocking Stripe, accounting services, etc. instead of blocking local development on test instances.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) d3f76482-f4d3-49b6-8338-a9cfdd7b3517
create Ever shorter feedback loopaboutDevelop in Production
context (empty) Argues that the Rails console on production is appropriate for some performance investigations.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 4cd8f0e5-4cfd-4efb-8b7b-523c9be0719a
create Ever shorter feedback loopaboutPush Often Behind Feature Flags
context (empty) Recommends pushing unfinished work to main behind feature flags rather than long-lived PRs.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) ce8423cc-0634-40a1-a60e-6ed7a404432a
create Ever shorter feedback loopaboutFactory Cascades
context (empty) Discussed as a major source of slow test suites surfaced by test-prof.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 72a47506-abd7-4c2c-afa5-5a8162f29eef
create Ever shorter feedback loopaboutBuild vs Create in Tests
context (empty) Walks through build_stubbed / build / create-without-associations / create as a cost hierarchy.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 2fdd0b94-15fd-4f1a-9e96-ff056da56fdc
create Ever shorter feedback loopaboutAggregate Test Failures
context (empty) Recommends RSpec's aggregate-failures mode for slow request tests with multiple assertions.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 120e3f0b-4bf0-47b5-89a0-6a049091a0db
create Ever shorter feedback loopabouttest-prof
context (empty) Recommends test-prof for finding factory cascades and auto-replacing create with build.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) ad5cb49e-805d-4139-9ad8-859915e0b71e
create Ever shorter feedback loopaboutparallel_tests
context (empty) Discusses parallel_tests as an easy local parallelization option with even-split limitations.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) fe2ba321-db02-4419-b40f-bfd088fbb7b7
create Ever shorter feedback loopaboutknapsack_pro
context (empty) Recommended as a paid server/client solution that distributes tests dynamically across workers.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) d472e6cf-9011-4e1f-a6c1-6dc1a660ea24
create Ever shorter feedback loopaboutCrystal Ball
context (empty) Introduced in Q&A as a way to run only tests whose coverage touches the changed files.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) d4a17817-633f-4ead-9126-714e7c6aef83
create Ever shorter feedback loopaboutGuard
context (empty) Introduced in Q&A as a file-watcher that re-runs tests automatically on save.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 120a09f1-2974-46e8-899f-5b2c40554e78
create Ever shorter feedback loopaboutGitHub Actions
context (empty) Discusses GitHub Actions + self-hosted runners as cheap CI.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) cab3bb4f-ed74-4df5-8a84-0caa6f55601c
create Ever shorter feedback loopaboutGitHub Self-Hosted Runner
context (empty) Recommends self-hosted runners for cheap high-performance CI.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) eec304ba-c739-46d6-82a9-ae0159426b79
create Ever shorter feedback loopaboutHetzner
context (empty) Cited as an example of cheap bare-metal hosting for CI runners.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 7ee0b2f4-04cb-4990-857d-a50c5d9629eb
create Ever shorter feedback loopaboutOVH
context (empty) Mentioned alongside Hetzner as a bare-metal hosting alternative.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 827867c5-253a-485c-846f-21df3ecdcc17
create Ever shorter feedback loopaboutCircleCI
context (empty) Used as the example CI service whose per-runner cost can be beaten by self-hosting.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 0ea323f7-9eff-4f00-a8c0-1c0f42ed9df4
create Ever shorter feedback loopaboutFactoryBot
context (empty) FactoryBot is the site of the Factory Cascades anti-pattern under discussion.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) c5e40976-159e-4c1e-a23c-fe4e19da045d
create Ever shorter feedback loopaboutPaperclip
context (empty) Discussed in Q&A: disabling Paperclip's file conversion cut a test suite from 3.5 minutes to under 30 seconds.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 0beca60d-2b1e-4b91-af46-62bbefeae00e
create Ever shorter feedback loopaboutDocker
context (empty) Recommends Dockerizing exotic dependencies and running self-hosted CI runners in Docker.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create Ever shorter feedback loopaboutMySQL
context (empty) Closing Q&A story: putting MySQL's data directory in RAM cut a test suite from 10 minutes to ~1 minute.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) 289579fa-6259-4a46-8faa-34ed85eb41d4
create Ever shorter feedback loopaboutSQLite
context (empty) Mentioned as also supporting in-RAM storage for fast tests.
relation (empty) about
source_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
target_node_id (empty) a65d4872-7d76-4774-a7d5-e29e615de75a
create test-profrelated_toFactory Cascades
context (empty) test-prof's FactoryProf component profiles and diagnoses Factory Cascades.
relation (empty) related_to
source_node_id (empty) ad5cb49e-805d-4139-9ad8-859915e0b71e
target_node_id (empty) 72a47506-abd7-4c2c-afa5-5a8162f29eef
create Evil Martiansrelated_totest-prof
context (empty) test-prof is maintained by Evil Martians.
relation (empty) related_to
source_node_id (empty) 4f724c14-2ccc-4769-bd4a-0719505d1188
target_node_id (empty) ad5cb49e-805d-4139-9ad8-859915e0b71e
create Shared Hardware Is a 1970s Feedback Loopfrom_talkEver shorter feedback loop
context (empty) Takeaway from the talk's tour of feedback-loop eras.
relation (empty) from_talk
source_node_id (empty) 87c6f32f-c15b-46b0-900f-33d9fdb8f26e
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Buy Faster Hardwarefrom_talkEver shorter feedback loop
context (empty) Takeaway from the talk's 'throw money at the problem' section.
relation (empty) from_talk
source_node_id (empty) 992a1861-f2ba-4c95-ba2b-3f2b7c0e24dd
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Keep Project Setup Simplefrom_talkEver shorter feedback loop
context (empty) Takeaway from the 'run stuff locally' section.
relation (empty) from_talk
source_node_id (empty) 32097753-6041-4723-84b6-4971f1ebaec9
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Dockerize Exotic Dependenciesfrom_talkEver shorter feedback loop
context (empty) Takeaway on making hard-to-install dependencies tractable locally.
relation (empty) from_talk
source_node_id (empty) 64289af0-1971-4a34-ad60-f023e11d9ae8
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Provide Seeds for All Datafrom_talkEver shorter feedback loop
context (empty) Takeaway on keeping local developers willing to reset their DB.
relation (empty) from_talk
source_node_id (empty) 27545ff1-5fd7-4150-96b7-1d251df3e8e9
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Quantify Wasted Time to Convince the Businessfrom_talkEver shorter feedback loop
context (empty) Closing takeaway: translate wasted CI/queue time into dollars.
relation (empty) from_talk
source_node_id (empty) c0040921-bff4-489a-bc75-8b787515cb1c
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Cut Test Suites Under 15 Minutesfrom_talkEver shorter feedback loop
context (empty) Core rule-of-thumb in the test-suite speedup section.
relation (empty) from_talk
source_node_id (empty) f2f735e8-d385-49f4-8924-e2ab75f7f4f6
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Cache Clear Hook Killed a Test Suitefrom_talkEver shorter feedback loop
context (empty) Audience war story shared during Q&A.
relation (empty) from_talk
source_node_id (empty) 3a3f037c-ce09-4e46-90bc-91ab058fbb8b
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Paperclip Disable Convert Trickfrom_talkEver shorter feedback loop
context (empty) Audience contribution from a Paperclip maintainer during Q&A.
relation (empty) from_talk
source_node_id (empty) 12f63d6d-a1fb-4e29-be38-1b1ecb708af9
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create MySQL Data Directory in RAMfrom_talkEver shorter feedback loop
context (empty) Closing audience trick for MySQL/SQLite in-RAM test databases.
relation (empty) from_talk
source_node_id (empty) 99621c87-6be1-4bdd-ab29-8946956b71e9
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Cache Clear Hook Killed a Test Suiteabouttest-prof
context (empty) The contributor used test-prof to identify the RSpec before-each Rails.cache.clear that was the root cause.
relation (empty) about
source_node_id (empty) 3a3f037c-ce09-4e46-90bc-91ab058fbb8b
target_node_id (empty) ad5cb49e-805d-4139-9ad8-859915e0b71e
create Paperclip Disable Convert TrickaboutPaperclip
context (empty) Tip describes a Paperclip configuration option that disables file conversion.
relation (empty) about
source_node_id (empty) 12f63d6d-a1fb-4e29-be38-1b1ecb708af9
target_node_id (empty) 0beca60d-2b1e-4b91-af46-62bbefeae00e
create MySQL Data Directory in RAMaboutMySQL
context (empty) Trick applies to MySQL run via Docker Compose.
relation (empty) about
source_node_id (empty) 99621c87-6be1-4bdd-ab29-8946956b71e9
target_node_id (empty) 289579fa-6259-4a46-8faa-34ed85eb41d4
create MySQL Data Directory in RAMaboutDocker
context (empty) Achieved by adding a single Docker Compose line mounting the data directory in RAM.
relation (empty) about
source_node_id (empty) 99621c87-6be1-4bdd-ab29-8946956b71e9
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create Are you using Crystal Ball?asked_atEver shorter feedback loop
context (empty) Asked during the talk's Q&A.
relation (empty) asked_at
source_node_id (empty) 64c449d3-c91a-4643-a17c-49c282b5620a
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create Are you using Crystal Ball?aboutCrystal Ball
context (empty) Question introduces the Crystal Ball gem to the speaker and audience.
relation (empty) about
source_node_id (empty) 64c449d3-c91a-4643-a17c-49c282b5620a
target_node_id (empty) d4a17817-633f-4ead-9126-714e7c6aef83
create How to optimize tests around callbacks without refactoring?asked_atEver shorter feedback loop
context (empty) Asked during the Q&A after the build-vs-create section.
relation (empty) asked_at
source_node_id (empty) 3e59e031-d84b-4a4b-bee9-14b80f70418e
target_node_id (empty) a8b668d2-42bc-4c3e-a9be-c0a0939e688e
create How to optimize tests around callbacks without refactoring?aboutBuild vs Create in Tests
context (empty) Question is about applying the build-over-create approach on callback-heavy codebases.
relation (empty) about
source_node_id (empty) 3e59e031-d84b-4a4b-bee9-14b80f70418e
target_node_id (empty) 2fdd0b94-15fd-4f1a-9e96-ff056da56fdc
create Krzysztof HasińskirecommendsDocker
context (empty) Recommends Dockerizing exotic dependencies even if the app itself isn't dockerized.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create Krzysztof HasińskirecommendsGitHub Self-Hosted Runner
context (empty) Pushes self-hosted runners as a cheap way to get a powerful CI.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) eec304ba-c739-46d6-82a9-ae0159426b79
create Krzysztof Hasińskirecommendsknapsack_pro
context (empty) Mentions knapsack_pro as a server/client solution that splits tests more evenly than parallel_tests alone.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) d472e6cf-9011-4e1f-a6c1-6dc1a660ea24

Read set

325 nodes

tool GraphQL list_nodes_by_kind+search_nodes tool gRPC list_nodes_by_kind tool Guard list_nodes_by_kind tool gzip list_nodes_by_kind tool Hanami list_nodes_by_kind tool heapy list_nodes_by_kind+search_nodes tool Heckle list_nodes_by_kind tool Heroku list_nodes_by_kind+search_nodes tool Hotwire list_nodes_by_kind tool HTTP/2 list_nodes_by_kind tool ImageMagick list_nodes_by_kind tool image_processing gem list_nodes_by_kind+search_nodes tool interactor list_nodes_by_kind event EmberConf list_nodes_by_kind event KanDDDinsky list_nodes_by_kind event wroclove.rb 2018 list_nodes_by_kind event wroclove.rb 2019 list_nodes_by_kind event wroclove.rb 2022 list_nodes_by_kind event wroclove.rb 2023 list_nodes_by_kind event wroclove.rb 2024 list_nodes_by_kind event wroclove.rb 2025 list_nodes_by_kind event wroclove.rb 2026 list_nodes_by_kind person Aaron Patterson list_nodes_by_kind person Adam Okoń list_nodes_by_kind+search_nodes person Adam Piotrowski list_nodes_by_kind person Adrian Marin list_nodes_by_kind person Agnieszka Małaszkiewicz list_nodes_by_kind person Akira Matsuda list_nodes_by_kind person Alberto Brandolini list_nodes_by_kind person Amelia Walter-Dzikowska list_nodes_by_kind person Andrei Bondarev list_nodes_by_kind person Andrei Kaleshka list_nodes_by_kind person Andrzej Krzywda list_nodes_by_kind person Andrzej Śliwa list_nodes_by_kind person Andy Maleh list_nodes_by_kind person Anita Jaszewska list_nodes_by_kind person Anton Davydov list_nodes_by_kind person Armin Pašalić list_nodes_by_kind person Arturo Herrero list_nodes_by_kind person Ayush Newatia list_nodes_by_kind person Bartosz Blimke list_nodes_by_kind person Bertrand Meyer list_nodes_by_kind person Caio Almeida list_nodes_by_kind person Charles Nutter list_nodes_by_kind person Chikahiro Tokoro list_nodes_by_kind person Claude Lévi-Strauss list_nodes_by_kind person Damir Zekić list_nodes_by_kind person Dan Kubb list_nodes_by_kind person David Halasz list_nodes_by_kind person DHH list_nodes_by_kind person Dimitry Salahutdinov list_nodes_by_kind person Elisabeth Kübler-Ross list_nodes_by_kind person Emiliano Della Casa list_nodes_by_kind person Eric Evans list_nodes_by_kind person Erwin Kroon list_nodes_by_kind person Ethan Garofolo list_nodes_by_kind person Greg Molnar list_nodes_by_kind person Greg Young list_nodes_by_kind person Ismael Celis list_nodes_by_kind person Ivan Nemytchenko list_nodes_by_kind person Jakub Rodzik list_nodes_by_kind person Janko Marohnic list_nodes_by_kind person Joel Drapper list_nodes_by_kind person John Gallagher list_nodes_by_kind person Josef Strzibny list_nodes_by_kind person José Valim list_nodes_by_kind person Julik Tarkhanov list_nodes_by_kind person Karol Szuster list_nodes_by_kind person Koichi Sasada list_nodes_by_kind person Krzysztof Hasiński list_nodes_by_kind person Kuba Suder list_nodes_by_kind person Louis Antonopoulos list_nodes_by_kind person Łukasz Reszke list_nodes_by_kind person Łukasz Szydło list_nodes_by_kind person Maciej Rząsa list_nodes_by_kind person Maciek list_nodes_by_kind person Marco Heimeshoff list_nodes_by_kind person Mariusz Gil list_nodes_by_kind person Markus Schirp list_nodes_by_kind person Martin Gamsjaeger list_nodes_by_kind person Mateusz Nowak list_nodes_by_kind person Matthias Verraes list_nodes_by_kind person Matz list_nodes_by_kind person Michal Matyas list_nodes_by_kind person Michał Młoźniak list_nodes_by_kind person Michał Zajączkowski de Mezer list_nodes_by_kind person Miron Marczuk list_nodes_by_kind person Nathan Ladd list_nodes_by_kind person Nick Sutterer list_nodes_by_kind person Nicolò Rebughini list_nodes_by_kind person Norbert Wójtowicz list_nodes_by_kind person Paweł Dąbrowski list_nodes_by_kind person Paweł Pacana list_nodes_by_kind person Paweł Pokrywka list_nodes_by_kind person Paweł Strzałkowski list_nodes_by_kind person Piotr Solnica list_nodes_by_kind person Radoslav Stankov list_nodes_by_kind person Rafał Cymerys list_nodes_by_kind person Rafał Rothenberger list_nodes_by_kind person Rich Hickey list_nodes_by_kind person Ryan Townsend list_nodes_by_kind person Scott Bell list_nodes_by_kind person Scott Bellware list_nodes_by_kind person Scott Wlaschin list_nodes_by_kind person Sebastian Wilgosz list_nodes_by_kind person Sergey Ivanov list_nodes_by_kind person Sergey Sergyenko list_nodes_by_kind person Seth Horsley list_nodes_by_kind person Sharon Rosner list_nodes_by_kind person Shugo Maeda list_nodes_by_kind person Stefan Wintermeyer list_nodes_by_kind person Stephen Margheim list_nodes_by_kind person Stephen Wolfram list_nodes_by_kind person Steve Ballmer list_nodes_by_kind person Szymon Fiedler list_nodes_by_kind person Szymon Kulec list_nodes_by_kind person Tomasz Donarski list_nodes_by_kind person Victor Shepelev list_nodes_by_kind person Vladimir Dementyev list_nodes_by_kind person Wojtek Wrona list_nodes_by_kind person Yaroslav Shmarov list_nodes_by_kind person Yatish Mehta list_nodes_by_kind person Yehuda Katz list_nodes_by_kind tool Abbrev list_nodes_by_kind tool Action Cable list_nodes_by_kind+search_nodes tool Active Admin list_nodes_by_kind tool activerecord-multi-tenant list_nodes_by_kind tool Active Storage list_nodes_by_kind+search_nodes tool acts_as_api list_nodes_by_kind tool acts_as_tenant list_nodes_by_kind tool aggregate_root list_nodes_by_kind tool Akamai list_nodes_by_kind tool Amazon Elastic Transcoder list_nodes_by_kind tool Amazon S3 list_nodes_by_kind tool Angular list_nodes_by_kind tool Apache HTTP Server list_nodes_by_kind tool Apache Kafka list_nodes_by_kind tool Apartment list_nodes_by_kind tool Apple QuickTime list_nodes_by_kind tool async list_nodes_by_kind tool Avo list_nodes_by_kind tool AWS Lambda list_nodes_by_kind tool Babel list_nodes_by_kind tool BME280 list_nodes_by_kind tool Brotli list_nodes_by_kind tool Browserslist list_nodes_by_kind tool C++ list_nodes_by_kind tool CarrierWave list_nodes_by_kind+search_nodes tool carrierwave_backgrounder list_nodes_by_kind tool carrierwave-video list_nodes_by_kind tool Cassandra list_nodes_by_kind tool Cells list_nodes_by_kind+search_nodes tool Celluloid list_nodes_by_kind tool Clojure list_nodes_by_kind tool ClojureScript list_nodes_by_kind tool Crystal list_nodes_by_kind tool curses list_nodes_by_kind tool DBM / SDBM / GDBM list_nodes_by_kind+search_nodes tool Devise list_nodes_by_kind tool Discourse list_nodes_by_kind tool Distributed Ruby list_nodes_by_kind tool Docker list_nodes_by_kind tool dry-container list_nodes_by_kind tool dry-struct list_nodes_by_kind tool dry-types list_nodes_by_kind tool dry-validation list_nodes_by_kind+search_nodes tool EDN list_nodes_by_kind tool Elasticsearch list_nodes_by_kind tool Electron list_nodes_by_kind tool Elixir list_nodes_by_kind tool Elm list_nodes_by_kind tool Ember.js list_nodes_by_kind tool Entity Store list_nodes_by_kind tool Erlang list_nodes_by_kind tool ESP32 list_nodes_by_kind tool ESP-IDF list_nodes_by_kind tool Ethereum list_nodes_by_kind tool EventMachine list_nodes_by_kind tool Faker list_nodes_by_kind+search_nodes tool Falcor list_nodes_by_kind+search_nodes tool FFmpeg list_nodes_by_kind tool ffprobe list_nodes_by_kind tool file (Unix command) list_nodes_by_kind tool find-slow script list_nodes_by_kind tool flag_shih_tzu list_nodes_by_kind+search_nodes tool Flow list_nodes_by_kind tool FreeRTOS list_nodes_by_kind tool Fulcro list_nodes_by_kind tool Fulcro Inspect list_nodes_by_kind tool git bisect list_nodes_by_kind tool Glimmer list_nodes_by_kind tool Go list_nodes_by_kind tool Grafana list_nodes_by_kind tool Iodine list_nodes_by_kind tool Java list_nodes_by_kind tool JIRA list_nodes_by_kind tool jq list_nodes_by_kind+search_nodes tool JSON API Resources list_nodes_by_kind tool libvips list_nodes_by_kind tool Matrix (Ruby stdlib) list_nodes_by_kind tool methods gem list_nodes_by_kind tool mini_magick list_nodes_by_kind+search_nodes tool MinIO list_nodes_by_kind+search_nodes tool minitest list_nodes_by_kind+search_nodes tool MobX list_nodes_by_kind tool mruby list_nodes_by_kind tool Mutant list_nodes_by_kind tool .NET list_nodes_by_kind tool nginx list_nodes_by_kind tool Node.js list_nodes_by_kind tool Opal list_nodes_by_kind tool OptionParser list_nodes_by_kind tool Outlook list_nodes_by_kind tool Paperclip list_nodes_by_kind+search_nodes tool Pathom list_nodes_by_kind tool Perl list_nodes_by_kind tool PgBouncer list_nodes_by_kind+search_nodes tool Phoenix list_nodes_by_kind tool Plezi list_nodes_by_kind tool PostgreSQL list_nodes_by_kind+search_nodes tool power_assert list_nodes_by_kind+search_nodes tool Preact list_nodes_by_kind tool Prime (Ruby stdlib) list_nodes_by_kind tool Prometheus list_nodes_by_kind tool Protocol Buffers list_nodes_by_kind tool PStore list_nodes_by_kind tool Puma list_nodes_by_kind tool PureScript list_nodes_by_kind tool QEMU list_nodes_by_kind tool Rack list_nodes_by_kind tool Rails 5.2 list_nodes_by_kind tool rails_event_store list_nodes_by_kind tool Rails Event Store Event Browser list_nodes_by_kind tool React list_nodes_by_kind tool RealtimeBoard list_nodes_by_kind+search_nodes tool Redis list_nodes_by_kind tool Redmine list_nodes_by_kind tool Refile list_nodes_by_kind+search_nodes tool Reform list_nodes_by_kind tool RequestStore list_nodes_by_kind tool RSpec list_nodes_by_kind tool Ruby list_nodes_by_kind tool Ruby Browser Detection Gem list_nodes_by_kind+search_nodes tool ruby-contracts list_nodes_by_kind+search_nodes tool Ruby Event Store list_nodes_by_kind tool Ruby on Rails list_nodes_by_kind tool Rust list_nodes_by_kind tool Sequel list_nodes_by_kind+search_nodes tool Shrine list_nodes_by_kind tool Sidekiq list_nodes_by_kind tool Sonic Pi list_nodes_by_kind tool Spring list_nodes_by_kind tool Stimulus list_nodes_by_kind tool streamio-ffmpeg list_nodes_by_kind tool Sync Space VR list_nodes_by_kind+search_nodes tool ThingSpeak list_nodes_by_kind+search_nodes tool Trailblazer list_nodes_by_kind tool TruffleRuby list_nodes_by_kind tool TSort list_nodes_by_kind tool TypeScript list_nodes_by_kind tool Tyrant list_nodes_by_kind tool Unicorn list_nodes_by_kind tool Uppy list_nodes_by_kind tool WebP list_nodes_by_kind tool webpagetest.org list_nodes_by_kind+search_nodes tool Wolfram Language list_nodes_by_kind tool Workspaces list_nodes_by_kind tool Zencoder list_nodes_by_kind+search_nodes talk Ever shorter feedback loop search_nodes+get_node_edges question Phrases to avoid in code review search_nodes concept Embrace The Evented Model search_nodes takeaway AI Will Not Replace Developer-Client Empathy search_nodes takeaway Avoid complexity before fighting it search_nodes talk Development with axioms search_nodes concept Sometimes Nothing Is Enough search_nodes takeaway Event Sourcing Mind Shift Trade-off search_nodes question What will be the JavaScript developer's dream in a year? search_nodes takeaway Adopt TypeScript or Flow for maintainability search_nodes project gemcheck search_nodes talk An Introduction to Test Bench search_nodes question Has Mutant been run against popular Ruby libraries? search_nodes concept Rails Testing Pyramid (Ivan's version) search_nodes talk Methods Gem for Ruby Method References search_nodes talk Testing Randomness search_nodes company Evil Martians search_nodes talk Offline Sandwich Focus Workflow search_nodes company SpaceX search_nodes talk Events events events search_nodes resource Rocket Real-Time Benchmark search_nodes takeaway Time Travel Superpower search_nodes concept Handwritten Incentive List and Action Plan search_nodes takeaway Replay-Based Debugging search_nodes question Local storage for tests search_nodes takeaway Start mutation testing incrementally search_nodes project Petri Nets Performance Prediction Gem search_nodes takeaway Contribute to Arkency aggregates repository search_nodes concept Global Interpreter Lock search_nodes project aggregates repository search_nodes concept Direct Upload to Cloud search_nodes company Transloadit search_nodes project imageflow search_nodes concept On-Upload Processing search_nodes takeaway Sign serverlessforruby.org petition search_nodes project AnyCable search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes concept Fixtures over Factories search_nodes takeaway Prefer fixtures and stubs over factories and mocks search_nodes concept Reactive Programming search_nodes talk Setup and operation of mutation testing in agentic world search_nodes takeaway Mutation testing replaces dumb review questions search_nodes concept Checks, Tests, Reviews and Flags search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes takeaway Use Refinements for Dependency Reduction search_nodes takeaway Switch on HTTP/2 search_nodes talk Fantastic Databases and Where to Find Them search_nodes concept Horizontal Sharding search_nodes concept Database-Level Partitioning search_nodes concept Row-Level Security search_nodes talk From PostgreSQL to SQLite in Rails search_nodes concept Boolean Flags as Implicit State search_nodes takeaway Use state machines instead of boolean flags search_nodes takeaway Act as a perfect tool on reviews search_nodes takeaway Precognition Superpower search_nodes concept Stalling For Time search_nodes concept Cynefin Framework search_nodes

2 edges