← Extractions

Performance Panel at wroclove.rb 2024

A panel discussion at wroclove.rb 2024 with Stephen Margheim, Maciej Rząsa, and Caio Almeida covering typical Rails performance problems, how to triage them, tools for monitoring/profiling, heuristics for when to stop optimizing, and handling large filterable index endpoints. Themes: partials are often slower than queries, understand what frameworks do, set SLAs/budgets, pick low-hanging fruit, and don't prematurely reach for Elasticsearch when Postgres with good indexes suffices.

Model
claude-opus-4-7
Ingestion
c53fb85b
Input tokens
584,703
fresh
491,833
cached
74,296
cache write
18,574
Output tokens
18,806
Duration
292.4s
Roundtrips
5
Tool calls
25
Cost
$0.00
Nodes/edges extracted
38 / 75
Read set (nodes/edges)
419 / 0

Nodes (38)

create Performance Panel wroclove.rb 2024 talk
kind (empty) talk
name (empty) Performance Panel wroclove.rb 2024
slug (empty) performance-panel-wroclove-rb-2024
attrs (empty) {"date" => "2024-03-22", "type" => "panel"}
description (empty) Panel discussion at wroclove.rb 2024 with Stephen Margheim, Maciej Rząsa, and Caio Almeida as panelists and an unname...
short_description (empty) Panel on diagnosing and fixing Rails performance problems with Margheim, Rząsa, and Almeida.
create Partial Rendering Overhead concept
kind (empty) concept
name (empty) Partial Rendering Overhead
slug (empty) partial-rendering-overhead
attrs (empty) {"category" => "practice"}
description (empty) Performance observation surfaced by Stephen Margheim: ActionView itself is very fast, but calling out to a partial is...
short_description (empty) Rails ActionView partials are far slower than direct view rendering due to file lookup and compilation.
create find_each vs each concept
kind (empty) concept
name (empty) find_each vs each
slug (empty) find_each-vs-each
attrs (empty) {"category" => "practice"}
description (empty) Common Rails optimization noted by Caio Almeida: replacing `each` with `find_each` changes five letters but processes...
short_description (empty) Swap ActiveRecord each for find_each to paginate large result sets into memory batches.
create Background Job Serialization Overhead concept
kind (empty) concept
name (empty) Background Job Serialization Overhead
slug (empty) background-job-serialization-overhead
attrs (empty) {"category" => "practice"}
description (empty) Warning raised by Caio Almeida: moving slow work to background jobs is not always faster. If you serialize a big obje...
short_description (empty) Serializing large objects into background jobs can make them slower than inline execution.
create Performance SLA concept
kind (empty) concept
name (empty) Performance SLA
slug (empty) performance-sla
attrs (empty) {"category" => "practice"}
description (empty) An explicit agreement between engineering, product, and business on what 'acceptable' performance looks like per page...
short_description (empty) Service-level agreement defining acceptable performance targets for features/pages.
create Time-Boxed Performance Exploration concept
kind (empty) concept
name (empty) Time-Boxed Performance Exploration
slug (empty) time-boxed-performance-exploration
attrs (empty) {"category" => "practice"}
description (empty) Heuristic advocated by Stephen Margheim and Maciej Rząsa. Rather than diving into a full fix, take 10–30 minutes to e...
short_description (empty) Spend 10–30 minutes scouting where an optimization hour would yield the biggest win.
create OHA tool
kind (empty) tool
name (empty) OHA
slug (empty) oha
attrs (empty) {"category" => "tool"}
description (empty) HTTP load-testing tool Stephen Margheim uses for simple response-time measurements. Described by Stephen as 'pretty s...
short_description (empty) Rust HTTP load-testing CLI; described as 'fancy curl'.
create Vernier tool
kind (empty) tool
name (empty) Vernier
slug (empty) vernier
attrs (empty) {"category" => "tool", "language" => "Ruby"}
description (empty) New Ruby profiler created by John Hawthorne from the Rails core team. Spelled v-e-r-n-i-e-r. John was scheduled to ta...
short_description (empty) New Ruby profiler by John Hawthorne from the Rails core team.
create Speedscope tool
kind (empty) tool
name (empty) Speedscope
slug (empty) speedscope
attrs (empty) {"category" => "tool"}
description (empty) Interactive flamegraph viewer Maciej Rząsa recommends for Ruby profiling. Pairs with Ruby profilers to produce detail...
short_description (empty) Interactive flamegraph viewer used to analyze Ruby profiler output.
create rbspy tool
kind (empty) tool
name (empty) rbspy
slug (empty) rbspy
attrs (empty) {"category" => "tool", "language" => "Ruby"}
description (empty) Ruby profiler Maciej Rząsa mentioned (transcribed as 'arpr') as a great option from the Ruby community, alongside Spe...
short_description (empty) Sampling Ruby profiler used to produce detailed method-time breakdowns.
create pganalyze tool
kind (empty) tool
name (empty) pganalyze
slug (empty) pganalyze
attrs (empty) {"category" => "service"}
description (empty) Postgres performance analysis service (transcribed 'PG analyzer') Caio Almeida's team at Meedan uses to generate insi...
short_description (empty) PostgreSQL performance analysis SaaS generating actionable insights.
create Apollo GraphQL Platform tool
kind (empty) tool
name (empty) Apollo GraphQL Platform
slug (empty) apollo-graphql-platform
attrs (empty) {"category" => "service"}
description (empty) GraphQL platform Meedan uses to generate per-field performance data for their Rails + GraphQL API. Caio Almeida refer...
short_description (empty) GraphQL client and server platform with per-field performance metrics.
create Tree Shaking concept
kind (empty) concept
name (empty) Tree Shaking
slug (empty) tree-shaking
attrs (empty) {"category" => "practice"}
description (empty) Build-time technique for shrinking JavaScript bundles by removing code that isn't actually used. Caio Almeida recomme...
short_description (empty) Front-end build optimization eliminating unused module code from bundles.
create Bundle Size Audit concept
kind (empty) concept
name (empty) Bundle Size Audit
slug (empty) bundle-size-audit
attrs (empty) {"category" => "practice"}
description (empty) Practice of auditing front-end dependencies so you don't ship 100KB for a single function. Caio Almeida raised this a...
short_description (empty) Auditing front-end dependencies and payload to keep bundles small.
create Connection Pool Contention from External Calls concept
kind (empty) concept
name (empty) Connection Pool Contention from External Calls
slug (empty) connection-pool-contention-from-external-calls
attrs (empty) {"category" => "pattern"}
description (empty) Performance pattern Caio Almeida debugged during Brazil's 2022 elections project at Meedan. A Rails API connected to ...
short_description (empty) HTTP requests inside open DB transactions starve the connection pool while the external call is in flight.
create Pareto Filter Combinations concept
kind (empty) concept
name (empty) Pareto Filter Combinations
slug (empty) pareto-filter-combinations
attrs (empty) {"category" => "practice"}
description (empty) Insight Stephen Margheim offered for handling an index endpoint with 20+ combinable filters: despite a theoretical co...
short_description (empty) Only a small set of filter combinations is actually used; index those hot paths.
create Big Data Is Usually Smaller Than You Think concept
kind (empty) concept
name (empty) Big Data Is Usually Smaller Than You Think
slug (empty) big-data-is-usually-smaller-than-you-think
attrs (empty) {"category" => "practice"}
description (empty) Heuristic from Stephen Margheim: the number someone has in mind for 'big data' is usually much smaller than what mode...
short_description (empty) Hundreds of GB is small for Postgres; don't prematurely reach for Elasticsearch.
create What are typical Rails performance problems? question
kind (empty) question
name (empty) What are typical Rails performance problems?
slug (empty) what-are-typical-rails-performance-problems
attrs (empty) {"answer_summary" => "Partials/views, misunderstood framework calls (each vs find_each), big serialized objects in jo...
description (empty) First question of the panel. Stephen: database bottlenecks get the attention but ActionView partials are often the hi...
short_description (empty) Opening panel question on the most common performance problems in Rails applications.
create Do wide models with many columns hurt performance? question
kind (empty) question
name (empty) Do wide models with many columns hurt performance?
slug (empty) do-wide-models-with-many-columns-hurt-performance
attrs (empty) {"answer_summary" => "Usually not a big problem; focus on context and pragmatics. Load on demand, consider counter ca...
description (empty) Moderator follow-up on wide models (e.g. User class with 57 columns) combined with many joins for sophisticated pages...
short_description (empty) Follow-up asking whether 57-column models and many joins damage performance.
create How to triage performance problems? question
kind (empty) question
name (empty) How to triage performance problems?
slug (empty) how-to-triage-performance-problems
attrs (empty) {"answer_summary" => "Talk to business, pick easy wins above a 1-second threshold, time-box exploration, check every ...
description (empty) Second panel question. Maciej: talk to the business — fix what causes pain — and keep a personal heuristic of investi...
short_description (empty) Which performance issues to fix first.
create What's the biggest issue with complex data pages — data, SQL, or rendering? question
kind (empty) question
name (empty) What's the biggest issue with complex data pages — data, SQL, or rendering?
slug (empty) what-s-the-biggest-issue-with-complex-data-pages-data-sql-or-rendering
attrs (empty) {"answer_summary" => "Loading too much data — often because pagination was skipped to ship a ticket faster."}
description (empty) Moderator follow-up to Maciej. Answer: most commonly the team is loading too much data — often because pagination was...
short_description (empty) Where the cost really lies when pages are slow and complex.
create How do you handle a timing-out page for expensive enterprise customers? question
kind (empty) question
name (empty) How do you handle a timing-out page for expensive enterprise customers?
slug (empty) how-do-you-handle-a-timing-out-page-for-expensive-enterprise-customers
attrs (empty) {"answer_summary" => "Combine load testing (OHA), monitoring, Rails console exploration, and Ruby Benchmark to iterat...
description (empty) Moderator's hypothetical: a page times out for specific expensive enterprise customers threatening to quit. Stephen a...
short_description (empty) Real urgency — important page timing out for high-value customers threatening to leave.
create Which tools do you use to monitor, triage, and fix performance problems? question
kind (empty) question
name (empty) Which tools do you use to monitor, triage, and fix performance problems?
slug (empty) which-tools-do-you-use-to-monitor-triage-and-fix-performance-problems
attrs (empty) {"answer_summary" => "Honeycomb, OpenTelemetry, CloudWatch, pganalyze, Apollo, Grafana, Datadog/New Relic, custom ins...
description (empty) Third panel question. Caio: Honeycomb, CloudWatch, pganalyze for DB insights, Apollo for GraphQL, Grafana. Maciej: Op...
short_description (empty) Asking for concrete tooling for performance work.
create What about CPU, memory, IO, network, and large DOM profilers? question
kind (empty) question
name (empty) What about CPU, memory, IO, network, and large DOM profilers?
slug (empty) what-about-cpu-memory-io-network-and-large-dom-profilers
attrs (empty) {"answer_summary" => "Speedscope + rbspy for Ruby profiling; tree-shaking + bundle audits + Sentry for front-end; Ver...
description (empty) Follow-up question. Stephen: no clever answer — hasn't done a lot of that optimization. Maciej: Ruby profilers — Spee...
short_description (empty) Tools for lower-level and front-end performance concerns.
create When should performance optimization end? question
kind (empty) question
name (empty) When should performance optimization end?
slug (empty) when-should-performance-optimization-end
attrs (empty) {"answer_summary" => "Define and renegotiate performance budgets/SLAs with product and business; when absent, use cra...
description (empty) Fourth panel question. Stephen: define performance budgets via conversations with product/business (every page <300ms...
short_description (empty) Heuristics for stopping optimization — 50% good-enough vs endless perfection.
create How do you negotiate performance with uneducated stakeholders who 'want it fast now'? question
kind (empty) question
name (empty) How do you negotiate performance with uneducated stakeholders who 'want it fast now'?
slug (empty) how-do-you-negotiate-performance-with-uneducated-stakeholders-who-want-it-fast-now
attrs (empty) {"answer_summary" => "No shortcut — build a mature team culture through education and set expectations early, even at...
description (empty) Moderator follow-up to Caio. Caio: there's no easy answer — it comes down to team culture and education. It takes tim...
short_description (empty) Negotiation when business has no notion of SLAs or budgets.
create What's the most complex performance problem you've solved? question
kind (empty) question
name (empty) What's the most complex performance problem you've solved?
slug (empty) what-s-the-most-complex-performance-problem-you-ve-solved
attrs (empty) {"answer_summary" => "Maciej killed prod via over-sanitization; Stephen's SQLite-in-production work; Caio debugged co...
description (empty) Maciej: he killed production once. During a REST→GraphQL migration behind a feature flag at 10% traffic, he over-sani...
short_description (empty) War stories from panelists.
create How to handle a 20+ filter index endpoint with big datasets? question
kind (empty) question
name (empty) How to handle a 20+ filter index endpoint with big datasets?
slug (empty) how-to-handle-a-20-filter-index-endpoint-with-big-datasets
attrs (empty) {"answer_summary" => "Start with Postgres/SQLite + proper indexes, load-test, find Pareto-hot filter combinations, ad...
description (empty) Final audience question. Maciej: silver bullets only — kidding; depends on data size. Often Postgres or SQLite with p...
short_description (empty) Final audience question on combinable filters and large datasets.
create Extract a partial only when it earns its keep takeaway
kind (empty) takeaway
name (empty) Extract a partial only when it earns its keep
slug (empty) extract-a-partial-only-when-it-earns-its-keep
attrs (empty) {"type" => "lesson-learned"}
description (empty) From Stephen Margheim's panel contribution: because Rails has to find and compile each partial file, introducing a si...
short_description (empty) Every partial adds significant rendering overhead; don't extract one lightly.
create Understand what the framework is actually doing takeaway
kind (empty) takeaway
name (empty) Understand what the framework is actually doing
slug (empty) understand-what-the-framework-is-actually-doing
attrs (empty) {"type" => "lesson-learned"}
description (empty) From Caio Almeida: Ruby and Rails read like pseudocode, but every line is doing real work. Critical-minded reading of...
short_description (empty) High-level Ruby/Rails code hides real work — five-letter changes (each→find_each) can prevent memory explosions.
create Pass IDs to background jobs, not objects takeaway
kind (empty) takeaway
name (empty) Pass IDs to background jobs, not objects
slug (empty) pass-ids-to-background-jobs-not-objects
attrs (empty) {"type" => "recommendation"}
description (empty) Caio Almeida's rule: pass numeric IDs (or simple scalar values) into background jobs and reload the object inside, ra...
short_description (empty) Serializing big objects into jobs can be slower than reloading from the database.
create Investigate any sub-1-second request you touch takeaway
kind (empty) takeaway
name (empty) Investigate any sub-1-second request you touch
slug (empty) investigate-any-sub-1-second-request-you-touch
attrs (empty) {"type" => "recommendation"}
description (empty) Maciej Rząsa's triage heuristic: if he's working on a part of the application and encounters a request slower than a ...
short_description (empty) Maciej's personal heuristic: requests over 1s deserve at least a look.
create Time-box performance exploration to find leverage takeaway
kind (empty) takeaway
name (empty) Time-box performance exploration to find leverage
slug (empty) time-box-performance-exploration-to-find-leverage
attrs (empty) {"type" => "recommendation"}
description (empty) Stephen Margheim's recommendation: get good at taking 10–30 minutes to pop into a performance problem and get a sense...
short_description (empty) 10–30 minutes of scouting beats diving straight into an optimization of unknown value.
create The best code is no code takeaway
kind (empty) takeaway
name (empty) The best code is no code
slug (empty) the-best-code-is-no-code
attrs (empty) {"type" => "insight"}
description (empty) Caio Almeida shared his team's mantra: the best code is no code. Focus on deleting code rather than writing it. A slo...
short_description (empty) Sometimes the right performance fix is deleting the feature.
create Release DB connections around external HTTP calls takeaway
kind (empty) takeaway
name (empty) Release DB connections around external HTTP calls
slug (empty) release-db-connections-around-external-http-calls
attrs (empty) {"type" => "lesson-learned"}
description (empty) Lesson from Caio Almeida's Brazil elections war story: a Rails API opened a DB transaction (and thus held a DB connec...
short_description (empty) Don't let idle DB connections sit inside open transactions while waiting on external services.
create Default to Postgres with good indexes before reaching for Elasticsearch takeaway
kind (empty) takeaway
name (empty) Default to Postgres with good indexes before reaching for Elasticsearch
slug (empty) default-to-postgres-with-good-indexes-before-reaching-for-elasticsearch
attrs (empty) {"type" => "recommendation"}
description (empty) Consensus recommendation from the panel, especially Stephen and Caio: before adopting Elasticsearch for a big-dataset...
short_description (empty) Proper indexes and a well-designed schema handle most filterable index endpoints.
create Reuse existing observability infrastructure takeaway
kind (empty) takeaway
name (empty) Reuse existing observability infrastructure
slug (empty) reuse-existing-observability-infrastructure
attrs (empty) {"type" => "recommendation"}
description (empty) Maciej Rząsa's caution to Stephen's idea of publishing a custom SQLite-backed metrics endpoint: if your infra team al...
short_description (empty) If infra already runs Prometheus/Grafana, publish your metrics there instead of rolling your own.
create ActiveSupport Notifications as cheap built-in instrumentation takeaway
kind (empty) takeaway
name (empty) ActiveSupport Notifications as cheap built-in instrumentation
slug (empty) activesupport-notifications-as-cheap-built-in-instrumentation
attrs (empty) {"type" => "recommendation"}
description (empty) Stephen Margheim's observation for smaller apps: Rails is already heavily instrumented via ActiveSupport Notification...
short_description (empty) Rails ships rich instrumentation; subscribe to ActiveSupport Notifications before buying a SaaS.

Edges (75)

create Performance Panel wroclove.rb 2024aboutBackground Job Serialization Overhead
context (empty) Caio warned that serializing big objects into jobs can be slower than foreground execution.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) ae79c371-927c-429e-a4f6-42efdc5959ca
create Performance Panel wroclove.rb 2024aboutPerformance SLA
context (empty) Stephen and Caio argued SLAs/budgets are prerequisite to sensible optimization; Maciej acknowledged they're rare.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 46b7db9d-0777-4cca-a263-2bf7d770a2a0
create Performance Panel wroclove.rb 2024aboutPerformance Time Budget
context (empty) Stephen advocated formal performance budgets; Maciej said he's only seen them 'in the zoo, not in the wild'.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 0135bc8b-2f02-48cb-b758-d8a8cdb37557
create Performance Panel wroclove.rb 2024presented_atwroclove.rb 2024
context (empty) Panel held at wroclove.rb 2024 on 2024-03-22.
relation (empty) presented_at
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 748e0524-a102-41d4-97dc-575881583d91
create Stephen MargheimauthoredPerformance Panel wroclove.rb 2024
attrs (empty) {"role" => "panelist"}
context (empty) Panelist — represented the SQLite/small-app perspective and the view-layer angle.
relation (empty) authored
source_node_id (empty) f8314bba-5263-4bd3-9174-6613ee5fef9e
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Maciej RząsaauthoredPerformance Panel wroclove.rb 2024
attrs (empty) {"role" => "panelist"}
context (empty) Panelist — represented large analytical apps (Chattermill background) with stories about GraphQL optimization.
relation (empty) authored
source_node_id (empty) 91d5cc3c-2a2b-4740-84a2-367dbb35e814
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Caio AlmeidaauthoredPerformance Panel wroclove.rb 2024
attrs (empty) {"role" => "panelist"}
context (empty) Panelist — represented Meedan's Rails + GraphQL experience, including the Brazil elections war story.
relation (empty) authored
source_node_id (empty) 8e94e35e-1e33-48c7-ac3e-b72e4e1c8c9e
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Performance Panel wroclove.rb 2024aboutPartial Rendering Overhead
context (empty) Stephen explained how ActionView partials are the hidden Rails performance cost.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 41125b40-39b1-4cc2-ac91-6245659c7667
create Performance Panel wroclove.rb 2024aboutfind_each vs each
context (empty) Caio gave find_each as his canonical example of understanding what Rails is actually doing.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 0432f0cc-5118-4e6b-be93-5f1e5cfbdb9f
create Performance Panel wroclove.rb 2024aboutTime-Boxed Performance Exploration
context (empty) Stephen and Maciej both recommended time-boxing optimization work.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) e921a69d-aaae-4824-b7f6-0cbc1924d398
create Performance Panel wroclove.rb 2024aboutConnection Pool Contention from External Calls
context (empty) Caio's Brazil 2022 elections war story about Rails holding DB connections during synchronous Lambda calls.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 00069c67-47b8-4acc-b29b-304aa49c9573
create Performance Panel wroclove.rb 2024aboutPareto Filter Combinations
context (empty) Stephen explained how hot filter clusters follow the Pareto distribution in practice.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) a9241baa-74c2-4b23-8735-f2bb962761bb
create Performance Panel wroclove.rb 2024aboutBig Data Is Usually Smaller Than You Think
context (empty) Stephen pushed back on premature Elasticsearch adoption.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 72980d28-cd70-4a77-8ec8-fd96c0dfface
create Performance Panel wroclove.rb 2024aboutN+1 Queries
context (empty) Database bottlenecks were flagged as the stereotypical starting point.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) ee033151-443a-4285-aa68-fbc2e9755d06
create Performance Panel wroclove.rb 2024aboutDatabase Indexes
context (empty) Panel emphasized proper indexing as the first answer for big filterable endpoints.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 6985ed7e-5155-4334-8bd8-8c77cddb369a
create Performance Panel wroclove.rb 2024aboutTree Shaking
context (empty) Caio highlighted bundle size and tree-shaking as underappreciated front-end performance levers.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 29da6f11-3a69-48b0-9445-e7a7c42148b9
create Performance Panel wroclove.rb 2024aboutBundle Size Audit
context (empty) Caio recalled a Togo deployment where bundle size dominated load time on poor networks.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 1b1aa688-49fa-4d64-b68f-2effe64641d7
create What are typical Rails performance problems?asked_atPerformance Panel wroclove.rb 2024
context (empty) Opening moderator question.
relation (empty) asked_at
source_node_id (empty) 9dd98200-c758-407f-8704-e8528308d242
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Do wide models with many columns hurt performance?asked_atPerformance Panel wroclove.rb 2024
context (empty) Follow-up from moderator on 57-column User models.
relation (empty) asked_at
source_node_id (empty) dd7368c8-8a7b-441d-a10d-efc2e93043da
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create How to triage performance problems?asked_atPerformance Panel wroclove.rb 2024
context (empty) Second main panel question.
relation (empty) asked_at
source_node_id (empty) debfd102-831f-46e9-8889-a573ea87167f
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create What's the biggest issue with complex data pages — data, SQL, or rendering?asked_atPerformance Panel wroclove.rb 2024
context (empty) Moderator follow-up to Maciej on complex analytical pages.
relation (empty) asked_at
source_node_id (empty) db346291-3057-4ef2-ae93-16c2fcb7d9bf
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create How do you handle a timing-out page for expensive enterprise customers?asked_atPerformance Panel wroclove.rb 2024
context (empty) Moderator hypothetical about enterprise customer churn risk.
relation (empty) asked_at
source_node_id (empty) 9ce24787-0ae6-4497-bc06-8e230a9d386c
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Which tools do you use to monitor, triage, and fix performance problems?asked_atPerformance Panel wroclove.rb 2024
context (empty) Third main panel question on tooling.
relation (empty) asked_at
source_node_id (empty) 4263d327-5db3-453a-ad30-34ca1846a8a8
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create What about CPU, memory, IO, network, and large DOM profilers?asked_atPerformance Panel wroclove.rb 2024
context (empty) Moderator follow-up on other performance dimensions.
relation (empty) asked_at
source_node_id (empty) 254c17ef-5df1-4faa-8f44-a8b57a48e099
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create When should performance optimization end?asked_atPerformance Panel wroclove.rb 2024
context (empty) Fourth main panel question on stopping heuristics.
relation (empty) asked_at
source_node_id (empty) 9b0657b9-ebd5-4663-9ee2-177f3c9971c1
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create How do you negotiate performance with uneducated stakeholders who 'want it fast now'?asked_atPerformance Panel wroclove.rb 2024
context (empty) Moderator hypothetical about dealing with business without SLA vocabulary.
relation (empty) asked_at
source_node_id (empty) 586db688-c50d-4520-920d-7391a342a7ad
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create What's the most complex performance problem you've solved?asked_atPerformance Panel wroclove.rb 2024
context (empty) War-story panel question.
relation (empty) asked_at
source_node_id (empty) 2028f73e-46d1-438c-a81f-fdd0421d119a
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create How to handle a 20+ filter index endpoint with big datasets?asked_atPerformance Panel wroclove.rb 2024
context (empty) Final audience question.
relation (empty) asked_at
source_node_id (empty) 96944839-1836-4aab-a769-ee700ac0f1c4
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Extract a partial only when it earns its keepfrom_talkPerformance Panel wroclove.rb 2024
context (empty) Stephen's 40%-slowdown benchmark lesson.
relation (empty) from_talk
source_node_id (empty) 58f5caff-2cfb-40da-a093-053c94fbc390
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Understand what the framework is actually doingfrom_talkPerformance Panel wroclove.rb 2024
context (empty) Caio's critical-minded framework reading advice.
relation (empty) from_talk
source_node_id (empty) 0505b1d8-9a7f-49d0-baad-11ec9495adba
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Pass IDs to background jobs, not objectsfrom_talkPerformance Panel wroclove.rb 2024
context (empty) Caio's rule for avoiding serialization overhead.
relation (empty) from_talk
source_node_id (empty) 0c72d7ad-ed62-4159-95ae-e67efbc1b8a2
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Investigate any sub-1-second request you touchfrom_talkPerformance Panel wroclove.rb 2024
context (empty) Maciej's personal triage heuristic.
relation (empty) from_talk
source_node_id (empty) 32798987-8034-4da9-b4f4-60c126350632
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Time-box performance exploration to find leveragefrom_talkPerformance Panel wroclove.rb 2024
context (empty) Stephen's 10–30 minute exploration recommendation.
relation (empty) from_talk
source_node_id (empty) 754fc303-6b02-4310-a81e-fdef84de0a83
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create The best code is no codefrom_talkPerformance Panel wroclove.rb 2024
context (empty) Caio's team mantra for feature-deprecation-as-fix.
relation (empty) from_talk
source_node_id (empty) c51a16ff-e0cf-4907-9524-1dd40357aff9
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Release DB connections around external HTTP callsfrom_talkPerformance Panel wroclove.rb 2024
context (empty) Lesson from Caio's Brazil elections debugging story.
relation (empty) from_talk
source_node_id (empty) d7ec6d4e-deaa-4c95-a2d4-02d080fa63b0
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Default to Postgres with good indexes before reaching for Elasticsearchfrom_talkPerformance Panel wroclove.rb 2024
context (empty) Consensus response to the 20+ filter endpoint question.
relation (empty) from_talk
source_node_id (empty) 8c9740d3-c5cb-4d43-a74d-033c626a0767
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Reuse existing observability infrastructurefrom_talkPerformance Panel wroclove.rb 2024
context (empty) Maciej's counter to Stephen's custom metrics endpoint idea.
relation (empty) from_talk
source_node_id (empty) af4cc702-2421-4e10-8f2c-c33dafae6b52
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create ActiveSupport Notifications as cheap built-in instrumentationfrom_talkPerformance Panel wroclove.rb 2024
context (empty) Stephen's recommendation for apps that can't afford SaaS APM.
relation (empty) from_talk
source_node_id (empty) ae04c6da-cf14-49f9-a825-8725f2c696a6
target_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
create Stephen MargheimrecommendsOHA
context (empty) Recommended OHA as a simple load-testing tool ('fancy curl').
relation (empty) recommends
source_node_id (empty) f8314bba-5263-4bd3-9174-6613ee5fef9e
target_node_id (empty) 910dd75a-a1eb-482d-881a-98cece5e75fb
create Stephen MargheimrecommendsVernier
context (empty) Shouted out Vernier as a new profiler worth knowing about.
relation (empty) recommends
source_node_id (empty) f8314bba-5263-4bd3-9174-6613ee5fef9e
target_node_id (empty) 5a041b5b-732e-4a31-b45e-a7878353729d
update Stephen MargheimrecommendsSQLite
context Entire talk recommends SQLite as a production database engine for Rails apps. Suggested SQLite as a reasonable place to stash app-local analytics/notifications for small projects.
create Maciej RząsarecommendsSpeedscope
context (empty) Recommended Speedscope for visualizing Ruby profiler output.
relation (empty) recommends
source_node_id (empty) 91d5cc3c-2a2b-4740-84a2-367dbb35e814
target_node_id (empty) bd5a6fdd-5085-4278-b4d1-00cff0ed84f2
create Maciej Rząsarecommendsrbspy
context (empty) Recommended rbspy for detailed method-level profiling.
relation (empty) recommends
source_node_id (empty) 91d5cc3c-2a2b-4740-84a2-367dbb35e814
target_node_id (empty) 5b4e3f60-2a00-4c29-9504-6a6dbda72a12
create Maciej RząsarecommendsOpenTelemetry
context (empty) Recommended OpenTelemetry for vendor-neutral instrumentation.
relation (empty) recommends
source_node_id (empty) 91d5cc3c-2a2b-4740-84a2-367dbb35e814
target_node_id (empty) 39ce1c2f-63e7-4a8d-859f-40e7f1bd6d4b
create Maciej RząsarecommendsPrometheus
context (empty) Recommended reusing Prometheus if infra already runs it.
relation (empty) recommends
source_node_id (empty) 91d5cc3c-2a2b-4740-84a2-367dbb35e814
target_node_id (empty) 4afe605c-464c-4dfe-8493-fada9935e1d0
create Maciej RząsarecommendsGrafana
context (empty) Paired with Prometheus for dashboards and alerting.
relation (empty) recommends
source_node_id (empty) 91d5cc3c-2a2b-4740-84a2-367dbb35e814
target_node_id (empty) 4df60298-9aa7-49dd-b487-47dbc09379f0
update Caio AlmeidarecommendsHoneycomb
context Cited as successfully used for GraphQL tracing via OpenTelemetry. Meedan uses Honeycomb for tracing.
create Caio AlmeidarecommendsAWS CloudWatch
context (empty) Meedan uses CloudWatch for alerting and uptime monitoring across regions.
relation (empty) recommends
source_node_id (empty) 8e94e35e-1e33-48c7-ac3e-b72e4e1c8c9e
target_node_id (empty) a2a3a19e-767f-42a8-8776-c2fcf62c6397
create Caio Almeidarecommendspganalyze
context (empty) Meedan uses pganalyze for Postgres performance insights.
relation (empty) recommends
source_node_id (empty) 8e94e35e-1e33-48c7-ac3e-b72e4e1c8c9e
target_node_id (empty) 51068d1d-4f83-4d3d-81d1-fc1ac0244e4f
create Caio AlmeidarecommendsApollo GraphQL Platform
context (empty) Used for GraphQL-specific performance data at Meedan.
relation (empty) recommends
source_node_id (empty) 8e94e35e-1e33-48c7-ac3e-b72e4e1c8c9e
target_node_id (empty) 91d5572d-c6bc-4465-8089-5746da1c8bc7
create Caio AlmeidarecommendsGrafana
context (empty) Mentioned Grafana as one of their stack pieces.
relation (empty) recommends
source_node_id (empty) 8e94e35e-1e33-48c7-ac3e-b72e4e1c8c9e
target_node_id (empty) 4df60298-9aa7-49dd-b487-47dbc09379f0
create Caio AlmeidarecommendsSentry
context (empty) Meedan uses Sentry heavily across front-end and back-end for error catching and performance debugging.
relation (empty) recommends
source_node_id (empty) 8e94e35e-1e33-48c7-ac3e-b72e4e1c8c9e
target_node_id (empty) 9b81df6c-7817-4cd8-91a1-bfeefb7fbce8
create Caio AlmeidarecommendsSidekiq
context (empty) Noted Sidekiq's built-in insights interface is a good free starting point.
relation (empty) recommends
source_node_id (empty) 8e94e35e-1e33-48c7-ac3e-b72e4e1c8c9e
target_node_id (empty) 2365c22d-c83e-4553-b865-ec22d0b5b225
update Caio Almeidaworks_atMeedan
context Software engineer at Meedan since 2016. Speaks from Meedan's Rails + GraphQL experience throughout the panel.
create Performance Panel wroclove.rb 2024aboutHoneycomb
context (empty) Caio named Honeycomb as a layered observability tool Meedan uses.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 9fe05a75-6726-4be8-b578-0058603267a6
create Performance Panel wroclove.rb 2024aboutOpenTelemetry
context (empty) Maciej described writing OTLP logs and swapping metric backends without code changes.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 39ce1c2f-63e7-4a8d-859f-40e7f1bd6d4b
create Performance Panel wroclove.rb 2024aboutDatadog
context (empty) Maciej mentioned prior use of Datadog with pricing caveats.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 1ac68a55-87d0-4b79-93cf-cbdb1e49d853
create Performance Panel wroclove.rb 2024aboutNew Relic
context (empty) Mentioned alongside Datadog as an expensive APM option.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) b2dde7fa-893a-4245-b62b-d459b700062f
create Performance Panel wroclove.rb 2024aboutAWS CloudWatch
context (empty) Caio uses CloudWatch for alerting/uptime and multi-region checks.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) a2a3a19e-767f-42a8-8776-c2fcf62c6397
create Performance Panel wroclove.rb 2024aboutpganalyze
context (empty) Caio highlighted pganalyze for DB insights.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 51068d1d-4f83-4d3d-81d1-fc1ac0244e4f
create Performance Panel wroclove.rb 2024aboutApollo GraphQL Platform
context (empty) Caio's GraphQL-specific performance tooling.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 91d5572d-c6bc-4465-8089-5746da1c8bc7
create Performance Panel wroclove.rb 2024aboutGrafana
context (empty) Mentioned as dashboard layer alongside Prometheus/Honeycomb.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 4df60298-9aa7-49dd-b487-47dbc09379f0
create Performance Panel wroclove.rb 2024aboutPrometheus
context (empty) Maciej advocates publishing metrics via existing Prometheus infra.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 4afe605c-464c-4dfe-8493-fada9935e1d0
create Performance Panel wroclove.rb 2024aboutSentry
context (empty) Caio praised Sentry for carrying parameter values that let the team reproduce bugs locally.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 9b81df6c-7817-4cd8-91a1-bfeefb7fbce8
create Performance Panel wroclove.rb 2024aboutSidekiq
context (empty) Cited for its solid out-of-the-box insights UI.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 2365c22d-c83e-4553-b865-ec22d0b5b225
create Performance Panel wroclove.rb 2024aboutSQLite
context (empty) Stephen's gem-in-progress stores ActiveSupport Notifications in SQLite for local analytics.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) a65d4872-7d76-4774-a7d5-e29e615de75a
create Performance Panel wroclove.rb 2024aboutPostgreSQL
context (empty) Recommended as the default for big filterable endpoints.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create Performance Panel wroclove.rb 2024aboutElasticsearch
context (empty) Maciej's fallback for secondary indexes once Postgres is outgrown.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 6d70c627-3da5-4e74-8424-e42de1e4ed59
create Performance Panel wroclove.rb 2024aboutAWS Lambda
context (empty) Caio's war story involved a Python ML service running on AWS Lambda.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) d11fe053-58e7-42b9-9353-57fa0e9c8aa3
create Performance Panel wroclove.rb 2024aboutOHA
context (empty) Stephen's recommended load-testing tool.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 910dd75a-a1eb-482d-881a-98cece5e75fb
create Performance Panel wroclove.rb 2024aboutVernier
context (empty) Stephen plugged Vernier as a new Rails-core profiler.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 5a041b5b-732e-4a31-b45e-a7878353729d
create Performance Panel wroclove.rb 2024aboutSpeedscope
context (empty) Maciej recommended Speedscope.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) bd5a6fdd-5085-4278-b4d1-00cff0ed84f2
create Performance Panel wroclove.rb 2024aboutrbspy
context (empty) Maciej recommended rbspy.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) 5b4e3f60-2a00-4c29-9504-6a6dbda72a12
create Performance Panel wroclove.rb 2024aboutJohn Hawthorne
context (empty) Stephen namechecked John Hawthorne as author of Vernier and scheduled RailsConf speaker.
relation (empty) about
source_node_id (empty) 6d0195f5-022f-4c04-b433-dab80d81d47f
target_node_id (empty) a152aac4-6552-4577-94ff-bd4cabed366b
create Vernierrelated_toJohn Hawthorne
context (empty) John Hawthorne is the author of Vernier.
relation (empty) related_to
source_node_id (empty) 5a041b5b-732e-4a31-b45e-a7878353729d
target_node_id (empty) a152aac4-6552-4577-94ff-bd4cabed366b

Read set

419 nodes

tool Sidekiq search_nodes takeaway Prefer Small Sidekiq Jobs search_nodes concept Sidekiq Batches search_nodes takeaway Delay mutations to background jobs search_nodes takeaway Keep Sidekiq Job Parameters Simple search_nodes question Scaling Sidekiq Elastically search_nodes question Application-Level Back Pressure For Sidekiq search_nodes question Wrapper Job vs Logic In Job search_nodes project Solid Queue search_nodes question Generate code once vs instruct LLM per request search_nodes company Meedan search_nodes company SpaceX search_nodes project Check search_nodes concept AI Agent search_nodes tool Midjourney search_nodes project Nerds and Threads search_nodes concept Retrieval Augmented Generation search_nodes company Transloadit search_nodes event Advent of Code list_nodes_by_kind event Brighton Ruby list_nodes_by_kind event EmberConf list_nodes_by_kind event Eventide Summit 2023 list_nodes_by_kind event Hacktoberfest list_nodes_by_kind event KanDDDinsky list_nodes_by_kind event Rails World list_nodes_by_kind event wroclove.rb 2018 list_nodes_by_kind+search_nodes event wroclove.rb 2019 list_nodes_by_kind+search_nodes event wroclove.rb 2022 list_nodes_by_kind+search_nodes event wroclove.rb 2023 list_nodes_by_kind+search_nodes event wroclove.rb 2024 list_nodes_by_kind+search_nodes event wroclove.rb 2025 list_nodes_by_kind+search_nodes event wroclove.rb 2026 list_nodes_by_kind+search_nodes person Aaron Patterson list_nodes_by_kind person Adam Okoń list_nodes_by_kind 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 Albert Einstein list_nodes_by_kind person Alberto Brandolini list_nodes_by_kind person Amanda 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 Andrew Kane list_nodes_by_kind person Andrey Sitnik list_nodes_by_kind person Andrzej Krzywda list_nodes_by_kind person Andrzej Śliwa list_nodes_by_kind person Andy Kroll 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 Ben Johnson 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 Chris Oliver 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 Eric Normand list_nodes_by_kind person Erwin Kroon list_nodes_by_kind person Ethan Garofolo list_nodes_by_kind person Galileo Galilei list_nodes_by_kind person Garry Kasparov list_nodes_by_kind person G.K. Chesterton list_nodes_by_kind person Gottfried Wilhelm Leibniz list_nodes_by_kind person Greg Molnar list_nodes_by_kind person Greg Navis list_nodes_by_kind person Greg Young list_nodes_by_kind person Isaac Newton 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 Jan list_nodes_by_kind person Janko Marohnic list_nodes_by_kind person Jared list_nodes_by_kind person Joel Drapper list_nodes_by_kind person John Gallagher list_nodes_by_kind person John Hawthorne 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 Lucian Ghinda 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 Magnus Carlsen 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 Mark Zuckerberg list_nodes_by_kind person Martin Fowler list_nodes_by_kind person Martin Gamsjaeger list_nodes_by_kind person Masahiro Nakagawa 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 Max Howell list_nodes_by_kind person Michał Bronikowski list_nodes_by_kind person Michał (Helpling) 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 Mike Dalessio list_nodes_by_kind person Mike Perham list_nodes_by_kind person Miron Marczuk list_nodes_by_kind person Nate Berkopec list_nodes_by_kind person Nathan Ladd list_nodes_by_kind person Nick Schwaderer 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 Pavo 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 Peter Solnica list_nodes_by_kind person Piotr Solnica list_nodes_by_kind person Radoslav Stankov list_nodes_by_kind person Rafael Zamaris list_nodes_by_kind person Rafał Cymerys list_nodes_by_kind person Rafał Rothenberger list_nodes_by_kind person René Descartes list_nodes_by_kind person Rich Hickey list_nodes_by_kind person Robert C. Martin list_nodes_by_kind person Romeu Moura list_nodes_by_kind person Ryan Townsend list_nodes_by_kind person Sandi Metz 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 Sean Schofield 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 Shona list_nodes_by_kind person Shugo Maeda list_nodes_by_kind person Stefan Wintermeyer list_nodes_by_kind person Stephan Schmidt 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 Xavier Noria 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 talk 10 Things You Never Wanted To Know About Reform 3 list_nodes_by_kind talk 18 months of using hotwire and viewcomponent in production list_nodes_by_kind talk Accidentally building a neural network — A Ruby product recommendation journey list_nodes_by_kind talk Adventures in durable execution list_nodes_by_kind+search_nodes talk An Introduction to Test Bench list_nodes_by_kind talk Applying CQRS & Event Sourcing on Rails applications list_nodes_by_kind talk Better ActiveRecord IRB Output Gem Lightning Talk list_nodes_by_kind+search_nodes talk Better WebPerformance with Rails list_nodes_by_kind+search_nodes talk Beyond the current state Time travel to the rescue! list_nodes_by_kind talk Building a Production-Ready AI App: MCP & OAuth on Rails list_nodes_by_kind talk Building Beautiful UIs with Ruby A Rails-Native Approach list_nodes_by_kind talk Building LLM powered applications in Ruby list_nodes_by_kind talk Building on Bluesky's AT Protocol with Ruby list_nodes_by_kind talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web list_nodes_by_kind talk Building uls for microservices list_nodes_by_kind talk Build Your Own Internal CLI Tools Lightning Talk list_nodes_by_kind talk Business logic in Ruby list_nodes_by_kind talk Cables! Cables! Cables! list_nodes_by_kind talk Chess for Programmers Lightning Talk list_nodes_by_kind talk Code Golfing in Ruby Lightning Talk list_nodes_by_kind talk Component Driven UI with ViewComponent list_nodes_by_kind talk Configuration Again Lightning Talk list_nodes_by_kind talk Counterintuitive Rails pt. 1 list_nodes_by_kind talk Counterintuitive Rails pt. 2 list_nodes_by_kind talk Data Management With Ruby list_nodes_by_kind talk Dealing With A Project's Complexity In A Changing Environment list_nodes_by_kind talk Debug like a scientist list_nodes_by_kind talk Developer, Programmer, and AI list_nodes_by_kind talk Development with axioms list_nodes_by_kind talk Devise pitfalls and way to tighten security list_nodes_by_kind talk Doctrine of Useful Objects Separate Fact from Fiction in OOD list_nodes_by_kind talk Enterprise Rails Panel list_nodes_by_kind+search_nodes talk Ethereum Smart Contracts Lightning Talk list_nodes_by_kind talk Event-Driven Rails Discussion Panel list_nodes_by_kind talk Events events events list_nodes_by_kind talk Event Sourcing and Actor model in Ruby list_nodes_by_kind talk Event Sourcing Anti Patterns and Failures list_nodes_by_kind talk Ever shorter feedback loop list_nodes_by_kind talk Extracting logic from templates with Hanami Views list_nodes_by_kind talk FaaS for Ruby Lightning Talk list_nodes_by_kind+search_nodes talk Fantastic Databases and Where to Find Them list_nodes_by_kind+search_nodes talk Fix Production Bugs 20x Faster list_nodes_by_kind talk Forms Are Dead: Building Agentic Workflows in Ruby list_nodes_by_kind talk From open source to IPO list_nodes_by_kind talk From PostgreSQL to SQLite in Rails list_nodes_by_kind talk Functional Programming as Naming Lightning Talk list_nodes_by_kind talk Game Hunter JRuby Roguelike Lightning Talk list_nodes_by_kind talk Gaming With Ruby and VMs Lightning Talk list_nodes_by_kind talk Gregorian Calendar list_nodes_by_kind talk Grokking FP For The Practicing Rubyist list_nodes_by_kind talk Handling file uploads for modern developer list_nodes_by_kind talk How (and why) to run SQLite in production list_nodes_by_kind talk How I brought LCP down to under 350 ms list_nodes_by_kind talk How to Be Top 10% in Ruby Lightning Talk list_nodes_by_kind talk How To Ensure Systems Do What We Want And Take Care Of Themselves list_nodes_by_kind talk How to hijack list_nodes_by_kind talk How To Package A Rails Engine Generation To Automation list_nodes_by_kind talk How wroclove.rb impacts developers and companies list_nodes_by_kind talk International cooperation in IT teams list_nodes_by_kind talk Introducing Sorbet into your Ruby codebase list_nodes_by_kind talk Introduction To Event Sourcing How To Use It With Ruby list_nodes_by_kind talk Is the monolith a problem list_nodes_by_kind talk iTerm Triggers and say Command Lightning Talk list_nodes_by_kind talk It is not so bad, after all list_nodes_by_kind talk JavaScript and Frontend Panel list_nodes_by_kind talk JRuby: Professional-Grade Ruby list_nodes_by_kind talk Kamal is not harder than your PaaS list_nodes_by_kind talk LATERAL Joins Rails Performance Lightning Talk list_nodes_by_kind+search_nodes talk Lightning Talk on Email Leaks and Senior Developer Titles list_nodes_by_kind talk Mentoring the Rails World Website Lightning Talk list_nodes_by_kind talk Message Bus Decoupling Lightning Talk list_nodes_by_kind talk Methods Gem for Ruby Method References list_nodes_by_kind talk Might & Magic of Domain-Driven Design list_nodes_by_kind talk Multi-region data governance in Rails application list_nodes_by_kind talk Mutant on steroids list_nodes_by_kind talk Mutation testing workshop wroclove.rb 2019 list_nodes_by_kind talk MVCC for Ruby developers list_nodes_by_kind talk My core skill never was the typing list_nodes_by_kind talk Native apps are dead, long live native apps list_nodes_by_kind talk Next Token! list_nodes_by_kind talk Nightmare neighbours caveats of Rails based mutlitenancy list_nodes_by_kind talk No-build Utopia: Modern User Experiences with Rails & Web Standards list_nodes_by_kind talk No 'Pundit' Intended list_nodes_by_kind talk Offline Sandwich Focus Workflow list_nodes_by_kind talk One machine please, make it Turing list_nodes_by_kind talk On the tasteful journey to Yippee list_nodes_by_kind talk Optimistic ul list_nodes_by_kind talk Optimizing performance in Rails apps with GraphQL layer list_nodes_by_kind talk Orchestrating video transcoding in ruby list_nodes_by_kind talk Outdated Browser Detection list_nodes_by_kind talk Performance of Distributed Applications list_nodes_by_kind talk Phantom Migrations Gem Lightning Talk list_nodes_by_kind talk Prevent account sharing list_nodes_by_kind talk Procrastination and Fish Shell Aliases Lightning Talk list_nodes_by_kind talk Reforging (or rather rebrewing) the support for open-source list_nodes_by_kind talk Removing Code with Breadth-First Search list_nodes_by_kind talk Rewrite with confidence list_nodes_by_kind talk Rubyana Gems and the Ractorous Rubetta Stones! list_nodes_by_kind talk Ruby Archaeology list_nodes_by_kind talk Ruby has literally always had types list_nodes_by_kind talk Ruby on a $4 Computer list_nodes_by_kind talk Ruby Packer Lightning Talk list_nodes_by_kind talk Ruby Rendezvous Method Call, Proc, and Beyond list_nodes_by_kind talk Ruby Standard Library Hidden Gems Lightning Talk list_nodes_by_kind talk Scaling an Open Source E-Commerce Framework list_nodes_by_kind talk Scientific Ruby Lightning Talk list_nodes_by_kind+search_nodes talk Securing Rails applications list_nodes_by_kind talk Setup and operation of mutation testing in agentic world list_nodes_by_kind talk Sidekiq Batches Lightning Talk list_nodes_by_kind talk Sonic Pi Music Performance list_nodes_by_kind+search_nodes talk Spice up your life with eql list_nodes_by_kind talk Strategic Domain Event Design Lightning Talk list_nodes_by_kind talk SUPER AIN'T SUPER From OOP To FP and Beyond! list_nodes_by_kind talk Testing Randomness list_nodes_by_kind talk The Curse of Service Object list_nodes_by_kind talk The good, the bad and the remote — collaborative domain modeling with EventStorming list_nodes_by_kind talk The pillars of Domain Driven Design list_nodes_by_kind talk Toolbelt of a Seasoned Bug Hunter list_nodes_by_kind+search_nodes talk To Refine or Not to Refine list_nodes_by_kind talk Towards the post framework future list_nodes_by_kind talk Typical DDDomains In Rails Apps list_nodes_by_kind talk Understanding coupling list_nodes_by_kind talk Under The Hood And On The Surface Of Sidekiq list_nodes_by_kind+search_nodes talk UringMachine — High Performance Concurrency for Ruby Using io_uring list_nodes_by_kind talk Webmock unmocked list_nodes_by_kind talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails list_nodes_by_kind talk Why I Like Mentoring Lightning Talk list_nodes_by_kind talk Working with RailsEventStore in Cashflow Management System list_nodes_by_kind talk Write a Blog Lightning Talk list_nodes_by_kind talk Writing a Game in Ruby on Rails Lightning Talk list_nodes_by_kind tool Honeycomb search_nodes tool OpenTelemetry search_nodes resource Rocket Real-Time Benchmark search_nodes tool Grafana search_nodes tool Prometheus search_nodes concept Distributed Monolith search_nodes concept Nested GraphQL query bottleneck search_nodes takeaway Replay-Based Debugging search_nodes tool Datadog search_nodes tool Sentry search_nodes tool AppSignal search_nodes concept Expected vs Unexpected Errors search_nodes takeaway Don't kill your team — alert only on unexpected errors search_nodes tool PagerDuty search_nodes tool New Relic search_nodes takeaway Trailblazer tracing saves thousands of debugging hours search_nodes takeaway Replay events to reproduce bugs search_nodes tool Apollo GraphQL search_nodes tool PgHero search_nodes project Petri Nets Performance Prediction Gem search_nodes tool test-prof search_nodes tool heapy search_nodes takeaway Port Python Libraries With ChatGPT search_nodes concept Waterfall Analysis search_nodes tool TruffleRuby search_nodes tool YJIT search_nodes takeaway Upgrade Ruby version for free speed search_nodes tool Ruby Packer search_nodes concept Performance Time Budget search_nodes concept RAIL Performance Model search_nodes concept Page Load Time Budget search_nodes takeaway Set a page-load time budget search_nodes takeaway Make performance a team mindset search_nodes concept Ruby undef_method performance search_nodes resource High Performance Browser Networking search_nodes concept Crawler Budget search_nodes tool AWS CloudWatch search_nodes takeaway Sign serverlessforruby.org petition search_nodes tool Elasticsearch search_nodes concept Vector Database search_nodes question How do you search across millions of events for top items? search_nodes tool Litestream search_nodes takeaway Dockerize Exotic Dependencies search_nodes tool langchainrb search_nodes concept Database Indexes search_nodes concept Vector Embeddings search_nodes tool ClickHouse search_nodes tool PostgreSQL search_nodes resource Postgres for Everything search_nodes concept EXPLAIN / EXPLAIN ANALYZE search_nodes tool PgBouncer search_nodes takeaway Learn to Read EXPLAIN search_nodes project estimate_count gem search_nodes tool Citus search_nodes tool Sequel search_nodes tool SQLite search_nodes concept Branch-Specific SQLite Databases search_nodes tool sqlite3-ruby search_nodes question Is starting with SQLite a lock-in if I later need Postgres? search_nodes takeaway Add enhanced-sqlite3-adapter for production SQLite on Rails search_nodes question Isn't embedding the database in your app process a security regression? search_nodes tool webpagetest.org search_nodes tool Requestly search_nodes tool parallel_tests search_nodes takeaway Switch on HTTP/2 search_nodes tool Codecov search_nodes concept Flame Graphs search_nodes concept ActiveSupport Core Extensions search_nodes concept TracePoint API search_nodes concept ActiveSupport CurrentAttributes search_nodes concept Rails Reload-Safe ES Configuration search_nodes takeaway Prefer a simple top-to-bottom worker search_nodes tool rails_event_store search_nodes concept ObjectSpace heap dumps search_nodes tool Dependency search_nodes tool AWS Lambda search_nodes tool Amazon Route 53 search_nodes concept Static Page Caching via nginx search_nodes concept N+1 Queries search_nodes question Aren't query optimizations a better first step than caching? search_nodes concept destroy_all vs delete_all search_nodes takeaway Prefer SQL Window Functions over Ruby Aggregation search_nodes tool graphql-preload search_nodes question Denormalization vs graphql-batch / graphql-preload search_nodes concept Default scope for region preview search_nodes takeaway Reset session parameters under Rails connection pooling search_nodes tool Python search_nodes concept Function as a Service search_nodes resource serverlessforruby.org Petition search_nodes question Scaling receivers vs implementing idempotency search_nodes company Planuj Wesele search_nodes tool RealtimeBoard search_nodes concept Database-Level Partitioning search_nodes concept Schema-Level Partitioning search_nodes concept Row-Level Partitioning search_nodes concept Partitioning search_nodes concept Horizontal Sharding search_nodes question Cross-tenant aggregation with row-level multi-tenancy search_nodes takeaway Default to row-level partitioning search_nodes concept Bucketing search_nodes concept Sharding search_nodes project Solid Cache search_nodes concept Russian Doll Caching search_nodes concept Cache Preheating search_nodes takeaway Keep cache keys simple search_nodes tool graphql-ruby-fragment-cache search_nodes question Does caching still help for complex apps with many models? search_nodes concept HTTP Caching with ETag and Last-Modified search_nodes tool Bootsnap search_nodes takeaway Rate-limit login forms with a skip path search_nodes question Handling third-party APIs without idempotency keys search_nodes concept GraphQL query timeout search_nodes takeaway Don't kill dependencies — use backoff search_nodes takeaway Negotiate for idempotency-key support search_nodes concept Exponential Backoff search_nodes concept Idempotency Key search_nodes