← 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 2024 → about → Background 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 2024 → about → Performance 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 2024 → about → Performance 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 2024 → presented_at → wroclove.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 Margheim → authored → Performance 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ąsa → authored → Performance 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 Almeida → authored → Performance 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 2024 → about → Partial 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 2024 → about → find_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 2024 → about → Time-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 2024 → about → Connection 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 2024 → about → Pareto 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 2024 → about → Big 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 2024 → about → N+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 2024 → about → Database 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 2024 → about → Tree 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 2024 → about → Bundle 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_at → Performance 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_at → Performance 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_at → Performance 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_at → Performance 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_at → Performance 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_at → Performance 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_at → Performance 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_at → Performance 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_at → Performance 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_at → Performance 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_at → Performance 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 keep → from_talk → Performance 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 doing → from_talk → Performance 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 objects → from_talk → Performance 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 touch → from_talk → Performance 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 leverage → from_talk → Performance 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 code → from_talk → Performance 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 calls → from_talk → Performance 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 Elasticsearch → from_talk → Performance 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 infrastructure → from_talk → Performance 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 instrumentation → from_talk → Performance 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 Margheim → recommends → OHA
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 Margheim → recommends → Vernier
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 Margheim → recommends → SQLite
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ąsa → recommends → Speedscope
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ąsa → recommends → rbspy
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ąsa → recommends → OpenTelemetry
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ąsa → recommends → Prometheus
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ąsa → recommends → Grafana
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 Almeida → recommends → Honeycomb
context Cited as successfully used for GraphQL tracing via OpenTelemetry. → Meedan uses Honeycomb for tracing.
create Caio Almeida → recommends → AWS 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 Almeida → recommends → pganalyze
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 Almeida → recommends → Apollo 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 Almeida → recommends → Grafana
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 Almeida → recommends → Sentry
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 Almeida → recommends → Sidekiq
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 Almeida → works_at → Meedan
context Software engineer at Meedan since 2016. → Speaks from Meedan's Rails + GraphQL experience throughout the panel.
create Performance Panel wroclove.rb 2024 → about → Honeycomb
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 2024 → about → OpenTelemetry
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 2024 → about → Datadog
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 2024 → about → New 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 2024 → about → AWS 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 2024 → about → pganalyze
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 2024 → about → Apollo 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 2024 → about → Grafana
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 2024 → about → Prometheus
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 2024 → about → Sentry
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 2024 → about → Sidekiq
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 2024 → about → SQLite
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 2024 → about → PostgreSQL
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 2024 → about → Elasticsearch
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 2024 → about → AWS 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 2024 → about → OHA
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 2024 → about → Vernier
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 2024 → about → Speedscope
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 2024 → about → rbspy
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 2024 → about → John 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 Vernier → related_to → John 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