← Extractions

Is the Monolith a Problem? — Chikahiro Tokoro at wroclove.rb 2025

Chikahiro Tokoro argues that the monolith is not the real problem — God objects are. He surveys the monolith-vs-microservices pendulum, recommends the modular monolith, and shows how to refactor God objects using better modeling (DRY understood as knowledge, DDD) plus incremental releases via techniques like Strangler Fig, feature flags, and shadow traffic.

Model
claude-opus-4-7
Ingestion
f3b91182
Input tokens
492,991
fresh
373,463
cached
108,676
cache write
10,852
Output tokens
16,131
Duration
240.5s
Roundtrips
8
Tool calls
32
Cost
$0.00
Nodes/edges extracted
36 / 61
Read set (nodes/edges)
215 / 2

Nodes (36)

create Single Table Inheritance concept
kind (empty) concept
name (empty) Single Table Inheritance
slug (empty) single-table-inheritance
attrs (empty) {"category" => "pattern"}
description (empty) Rails pattern (STI) where several model subclasses share one table and are distinguished by a `type` column. Chikahir...
short_description (empty) Rails pattern of storing multiple subclasses in one table via a type column.
create Toby Lütke person
kind (empty) person
name (empty) Toby Lütke
slug (empty) toby-lutke
description (empty) Co-founder and CEO of Shopify. Chikahiro Tokoro cites his 2023 tweet stating Shopify processed 145 billion requests o...
short_description (empty) Co-founder and CEO of Shopify.
update Chikahiro Tokoro person
description Conference speaker. Conference speaker. Delivered 'Is the monolith a problem?' at wroclove.rb 2025, arguing that God objects — not monoli...
short_description Conference speaker. Ruby/Rails developer speaking on monolith architecture and refactoring.
update Is the monolith a problem talk
attrs {"type" => "talk"} {"date" => "2025-03-14", "type" => "talk"}
description Talk at wroclove.rb 2025. Chikahiro Tokoro's opening talk at wroclove.rb 2025. Challenges the common narrative that monoliths are unscalable, s...
short_description Talk at wroclove.rb 2025. Talk arguing the monolith is fine — the real problem is God objects, fixed via modeling and incremental refactoring.
create God Object concept
kind (empty) concept
name (empty) God Object
slug (empty) god-object
attrs (empty) {"category" => "pattern"}
description (empty) Anti-pattern central to Chikahiro Tokoro's talk. A single object/model that does too much: tightly coupled, poor cohe...
short_description (empty) Anti-pattern: a single class that knows and does too much, tightly coupling a system.
create Modular Monolith concept
kind (empty) concept
name (empty) Modular Monolith
slug (empty) modular-monolith
attrs (empty) {"category" => "architecture"}
description (empty) Architectural style Chikahiro Tokoro predicts will define the next decade. A monolith that keeps the single-deploy si...
short_description (empty) Single-deployment monolith with clear internal module boundaries and high cohesion.
create DRY Principle concept
kind (empty) concept
name (empty) DRY Principle
slug (empty) dry-principle
attrs (empty) {"category" => "principle"}
description (empty) 'Don't Repeat Yourself' — principle from Andy Hunt and Dave Thomas's book The Pragmatic Programmer: 'every piece of k...
short_description (empty) 'Every piece of knowledge must have a single, unambiguous, authoritative representation.'
create The Pragmatic Programmer resource
kind (empty) resource
name (empty) The Pragmatic Programmer
slug (empty) the-pragmatic-programmer
attrs (empty) {"type" => "book"}
description (empty) Classic software-engineering book by Andy Hunt and Dave Thomas. Source of the DRY principle — 'every piece of knowled...
short_description (empty) Andy Hunt and Dave Thomas's classic software-engineering book; source of the DRY principle.
create Dave Thomas person
kind (empty) person
name (empty) Dave Thomas
slug (empty) dave-thomas
description (empty) Co-author, with Andy Hunt, of The Pragmatic Programmer. Chikahiro Tokoro met him in Tokyo ~10 years back and again mo...
short_description (empty) Co-author of The Pragmatic Programmer and co-creator of the DRY principle.
create Andy Hunt person
kind (empty) person
name (empty) Andy Hunt
slug (empty) andy-hunt
description (empty) Co-author, with Dave Thomas, of The Pragmatic Programmer. Cited by Chikahiro Tokoro as one of the originators of the ...
short_description (empty) Co-author of The Pragmatic Programmer.
create Sam Newman person
kind (empty) person
name (empty) Sam Newman
slug (empty) sam-newman
description (empty) Author of Building Microservices (first edition ~2015; second edition cited by Chikahiro Tokoro). Argues that microse...
short_description (empty) Author of Building Microservices; advocates modular monoliths for startups.
create Building Microservices resource
kind (empty) resource
name (empty) Building Microservices
slug (empty) building-microservices
attrs (empty) {"type" => "book", "author" => "Sam Newman"}
description (empty) Sam Newman's book on microservice architecture. Chikahiro Tokoro cites the first edition (~2015) as a landmark alongs...
short_description (empty) Sam Newman's canonical book on designing microservice architectures.
create Packwerk tool
kind (empty) tool
name (empty) Packwerk
slug (empty) packwerk
attrs (empty) {"category" => "library", "language" => "Ruby"}
description (empty) Ruby gem by Shopify used to enforce modular-monolith boundaries inside a Rails application. Essentially a linter: it ...
short_description (empty) Shopify gem enforcing package boundaries inside a Rails monolith via static analysis.
create Strangler Fig Pattern concept
kind (empty) concept
name (empty) Strangler Fig Pattern
slug (empty) strangler-fig-pattern
attrs (empty) {"category" => "pattern"}
description (empty) Incremental migration pattern popularised by Martin Fowler. Instead of a big-bang cut-over, a proxy or routing layer ...
short_description (empty) Incremental migration pattern where a new system gradually replaces pieces of an old one.
create Shadow Traffic concept
kind (empty) concept
name (empty) Shadow Traffic
slug (empty) shadow-traffic
attrs (empty) {"category" => "practice"}
description (empty) Release/validation technique where production traffic is recorded and then replayed (mirrored) against a new module o...
short_description (empty) Recording production traffic and replaying it against a new module to validate behaviour.
create ThoughtWorks company
kind (empty) company
name (empty) ThoughtWorks
slug (empty) thoughtworks
attrs (empty) {"industry" => "software consulting"}
description (empty) Software consultancy, well known for tech leaders and large following. Chikahiro Tokoro cites their most recent macro...
short_description (empty) Consultancy publishing the Technology Radar and annual tech-industry macro-trends reports.
update Netflix company
attrs {"industry" => "video streaming"} {"industry" => "streaming"}
description Streaming company. Mentioned as the originator of the Falcor data-fetching library, which addresses similar problems ... Streaming giant cited by Chikahiro Tokoro as the canonical example of successful microservices adoption (~10 years ag...
short_description Streaming company; originator of Falcor. Streaming company famed for its large-scale microservices architecture.
create Twitter company
kind (empty) company
name (empty) Twitter
slug (empty) twitter
attrs (empty) {"industry" => "social media"}
description (empty) Social-media platform. Cited by Chikahiro Tokoro as one of the first major applications built on Ruby on Rails (~2006...
short_description (empty) Social-media platform originally bootstrapped on Rails (2006) and later migrated to Scala.
update Facebook company
description Social network company. In 2012, Mark Zuckerberg declared betting on HTML5 over native 'the biggest mistake we've mad... Social-media company cited by Chikahiro Tokoro as an example of a very large application with extremely fast deployme...
short_description Social network whose 2012 HTML5 retreat shaped hybrid-app perception. Social-media company cited for releasing a new version every 75 minutes.
create Amazon company
kind (empty) company
name (empty) Amazon
slug (empty) amazon
attrs (empty) {"industry" => "e-commerce, cloud"}
description (empty) Retailer and cloud provider. Chikahiro Tokoro cites the famous leaked 2002 internal mandate moving Amazon from a mono...
short_description (empty) E-commerce and cloud giant that moved from monolith to service-oriented architecture in 2002.
create Amazon Prime Video Monolith Migration resource
kind (empty) resource
name (empty) Amazon Prime Video Monolith Migration
slug (empty) amazon-prime-video-monolith-migration
attrs (empty) {"type" => "article", "year" => "2023"}
description (empty) Engineering write-up published by Amazon Prime Video (~2023) describing how they moved their audio/video quality moni...
short_description (empty) Publicised 2023 case study of Amazon Prime Video moving audio/video monitoring from microservices/serverless back to ...
create Kubernetes tool
kind (empty) tool
name (empty) Kubernetes
slug (empty) kubernetes
attrs (empty) {"category" => "platform"}
description (empty) Container-orchestration platform. Chikahiro Tokoro notes Kubernetes was published (~2015) alongside Sam Newman's Buil...
short_description (empty) Open-source container-orchestration platform; typical infrastructure for microservices.
create SOAP concept
kind (empty) concept
name (empty) SOAP
slug (empty) soap
attrs (empty) {"category" => "protocol"}
description (empty) XML-based RPC protocol evolving from XML-RPC (published 1998). Became the foundational technology for Service-Oriente...
short_description (empty) XML-based RPC protocol foundational to Service-Oriented Architecture.
create Service-Oriented Architecture concept
kind (empty) concept
name (empty) Service-Oriented Architecture
slug (empty) service-oriented-architecture
attrs (empty) {"category" => "architecture"}
description (empty) Enterprise architectural style popular in the early 2000s, built around SOAP/XML-RPC. Chikahiro Tokoro places SOA ~19...
short_description (empty) Enterprise architectural style composing systems from networked, contract-defined services.
create Circuit Breaker Pattern concept
kind (empty) concept
name (empty) Circuit Breaker Pattern
slug (empty) circuit-breaker-pattern
attrs (empty) {"category" => "pattern"}
description (empty) Resilience pattern for inter-service communication. Chikahiro Tokoro cites it alongside retry logic as evidence of th...
short_description (empty) Resilience pattern that stops calls to a failing downstream service to avoid cascading failure.
create Mice of the Modulith talk
kind (empty) talk
name (empty) Mice of the Modulith
slug (empty) mice-of-the-modulith
attrs (empty) {"type" => "talk"}
description (empty) Talk delivered at Rails World 2024 by a Shopify engineer ('Shopifyan'). Chikahiro Tokoro recommends it and borrows he...
short_description (empty) Rails World 2024 talk by a Shopify engineer on modular-monolith realities.
create Refactor with clear business merit takeaway
kind (empty) takeaway
name (empty) Refactor with clear business merit
slug (empty) refactor-with-clear-business-merit
attrs (empty) {"type" => "recommendation"}
description (empty) Chikahiro Tokoro's practical advice for tackling God objects: don't refactor for refactoring's sake and don't do big-...
short_description (empty) Tie every refactor to a business need and slice features — never a big-bang rewrite.
create Monolith is not the problem — God objects are takeaway
kind (empty) takeaway
name (empty) Monolith is not the problem — God objects are
slug (empty) monolith-is-not-the-problem-god-objects-are
attrs (empty) {"type" => "insight"}
description (empty) Core message of Chikahiro Tokoro's wroclove.rb 2025 talk. The complaints people level at monoliths (not scalable, slo...
short_description (empty) Complaints about monolith scalability/maintainability usually reflect God objects, not the monolith itself.
create Knowledge, not code, is what DRY is about takeaway
kind (empty) takeaway
name (empty) Knowledge, not code, is what DRY is about
slug (empty) knowledge-not-code-is-what-dry-is-about
attrs (empty) {"type" => "lesson-learned"}
description (empty) Takeaway from the customer/invoice/receipt STI example. Code that looks similar today may represent different domain ...
short_description (empty) Apply DRY to duplicated domain knowledge only — not to coincidentally similar code.
create Prefer delegation over inheritance takeaway
kind (empty) takeaway
name (empty) Prefer delegation over inheritance
slug (empty) prefer-delegation-over-inheritance
attrs (empty) {"type" => "recommendation"}
description (empty) Drawn from Q&A. Chikahiro Tokoro agrees with Sandi Metz that inheritance is limited — textbook animal/cat/dog example...
short_description (empty) Inheritance rarely fits real domains; prefer delegation or extraction.
create Enforce domain boundaries dynamically via ActiveRecord hooks takeaway
kind (empty) takeaway
name (empty) Enforce domain boundaries dynamically via ActiveRecord hooks
slug (empty) enforce-domain-boundaries-dynamically-via-activerecord-hooks
attrs (empty) {"type" => "recommendation"}
description (empty) Audience-member technique shared in Q&A. Packwerk enforces package boundaries statically but can't catch dynamic obje...
short_description (empty) Wrap save/update at runtime to reject cross-domain writes that skip public APIs.
create How to display heterogeneous documents after splitting a God model? question
kind (empty) question
name (empty) How to display heterogeneous documents after splitting a God model?
slug (empty) how-to-display-heterogeneous-documents-after-splitting-a-god-model
attrs (empty) {"answer_summary" => "Separate read from write concerns. Keep the modeling clean per domain; satisfy cross-document r...
description (empty) Audience question: splitting a document God object into separate Invoice and Receipt models is good in principle, but...
short_description (empty) If invoice and receipt become separate models, how do we paginate/sort/search them together?
create Metrics for refactoring impact on the business question
kind (empty) question
name (empty) Metrics for refactoring impact on the business
slug (empty) metrics-for-refactoring-impact-on-the-business
attrs (empty) {"answer_summary" => "No definitive answer. Candidate metrics: time to implement new features and bug rate. Speaker i...
description (empty) Audience question about whether there are measurable metrics proving a refactor or modeling change improves the busin...
short_description (empty) Are there metrics showing a modeling refactor actually delivered business value?
create Are God objects a consequence of inheritance? question
kind (empty) question
name (empty) Are God objects a consequence of inheritance?
slug (empty) are-god-objects-a-consequence-of-inheritance
attrs (empty) {"answer_summary" => "Inheritance is only one contributor and rarely fits real domains. Prefer delegation; banning in...
description (empty) Audience question: do God objects emerge specifically because of inheritance, and would banning inheritance in a proj...
short_description (empty) Would forbidding inheritance prevent God objects from forming?
create How to educate the team on modularity boundaries? question
kind (empty) question
name (empty) How to educate the team on modularity boundaries?
slug (empty) how-to-educate-the-team-on-modularity-boundaries
attrs (empty) {"answer_summary" => "Hard problem with no clean answer. Grows from making mistakes, reflecting, and continuing to le...
description (empty) Audience question about teaching teammates to see module boundaries consistently. Chikahiro admits he also struggles ...
short_description (empty) Getting a team aligned on what is one module vs another is hard — any advice?
create Enforcing boundaries with Packwerk given Rails dynamic calls question
kind (empty) question
name (empty) Enforcing boundaries with Packwerk given Rails dynamic calls
slug (empty) enforcing-boundaries-with-packwerk-given-rails-dynamic-calls
attrs (empty) {"answer_summary" => "Packwerk can't catch it; instead wrap ActiveRecord mutation methods at runtime to reject cross-...
description (empty) Audience question: when splitting a Rails monolith into Packwerk-enforced domains, static analysis can stop direct co...
short_description (empty) How to prevent cross-domain Ruby object calls that Packwerk's static analysis misses?

Edges (61)

create Andy HuntauthoredThe Pragmatic Programmer
context (empty) Co-author with Dave Thomas.
relation (empty) authored
source_node_id (empty) 33d44bbc-a0fd-4f5c-a822-ab839c7a0ab4
target_node_id (empty) 45a77c3c-c8da-4184-873a-46e64382a366
create Is the monolith a problemaboutCircuit Breaker Pattern
context (empty) Cited as part of the essential complexity microservices add (retry + circuit breakers).
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) f07c0537-1af7-4005-ad9c-ba9cac61ec62
create DRY Principlerelated_toThe Pragmatic Programmer
context (empty) DRY is defined in The Pragmatic Programmer.
relation (empty) related_to
source_node_id (empty) 0264fec6-ee10-4d8c-aba4-eb9650ba7ffc
target_node_id (empty) 45a77c3c-c8da-4184-873a-46e64382a366
create Dave ThomasauthoredThe Pragmatic Programmer
context (empty) Co-author with Andy Hunt.
relation (empty) authored
source_node_id (empty) 557713d8-5db8-4627-8cbe-7eddcea06c31
target_node_id (empty) 45a77c3c-c8da-4184-873a-46e64382a366
update Chikahiro TokoroauthoredIs the monolith a problem
context (empty) Chikahiro delivered this talk as the opening speaker at wroclove.rb 2025.
update Is the monolith a problempresented_atwroclove.rb 2025
context (empty) First talk of the conference, 2025-03-14.
create Is the monolith a problemaboutGod Object
context (empty) Central anti-pattern the talk blames for the complaints people usually blame on monoliths.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) a4dd14f8-53b5-478b-81a8-e586b0ed28c5
create Is the monolith a problemaboutModular Monolith
context (empty) Talk predicts the modular monolith era and recommends it over microservices for most teams.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) d2aa5163-748e-4b3b-bec2-f13ac41d6e57
create Is the monolith a problemaboutDistributed Monolith
context (empty) Chikahiro warns that migrating a God-object-laden monolith to microservices produces a distributed monolith.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) a3f89459-620c-477b-8cc5-8f0ea99f603e
create Is the monolith a problemaboutDRY Principle
context (empty) Uses DRY-as-knowledge to explain how God objects emerge from over-eager de-duplication.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 0264fec6-ee10-4d8c-aba4-eb9650ba7ffc
create Is the monolith a problemaboutDomain-Driven Design
context (empty) Recommends DDD alongside DRY for better modeling.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 6e2f88bd-e521-41a3-91d4-aeb5f8fd2486
create Is the monolith a problemaboutStrangler Fig Pattern
context (empty) Recommended incremental release technique for refactoring toward a modular monolith.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) c7744de4-2c57-4377-9a3a-930596ba999d
create Is the monolith a problemaboutShadow Traffic
context (empty) Mentioned as an incremental-release technique, crediting an earlier conference talk.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 36b94356-b32b-4b67-9581-9b085998d709
create Is the monolith a problemaboutSingle Table Inheritance
context (empty) STI is the example of how applying DRY to coincidental duplication creates a God object.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 1d94be8e-1e01-4d60-a207-9653b0418820
create Is the monolith a problemaboutConway's Law
context (empty) Cited when explaining why microservices are often a solution to organizational autonomy rather than technical problems.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 97af1782-f2e0-4641-9b10-37c21478bb8f
create Is the monolith a problemaboutPackwerk
context (empty) Recommended for enforcing modular boundaries inside a Rails monolith.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) f4e165b1-6b40-4bdb-85db-bd5541b8c7e3
create Is the monolith a problemaboutRuby on Rails
context (empty) Talk is framed around Rails applications and Rails-specific refactoring techniques.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create Is the monolith a problemaboutRails Engine
context (empty) Chikahiro's SSO refactor used a Rails engine with a separate database to extract user responsibilities.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Is the monolith a problemaboutMice of the Modulith
context (empty) Chikahiro explicitly recommends this Rails World 2024 Shopify talk.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 1a8c03c3-74b6-4307-87fb-89d525e81e47
create Is the monolith a problemaboutAmazon Prime Video Monolith Migration
context (empty) Cited as a dramatic recent example of moving from microservices back to a monolith.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 71293f7a-1c2b-4507-a50f-6f189b5f9bf2
create Is the monolith a problemaboutService-Oriented Architecture
context (empty) Used as a historical data point in the monolith-vs-services pendulum.
relation (empty) about
source_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
target_node_id (empty) 1dc39c86-a040-4ea4-bda1-39b24e4003e5
create Sam NewmanauthoredBuilding Microservices
context (empty) First and second editions, both referenced in the talk.
relation (empty) authored
source_node_id (empty) 8c2d1047-f307-45db-acb1-6f18333ba370
target_node_id (empty) 8d27832b-9d92-4b50-a95f-bf61d81d270d
create Building MicroservicesaboutModular Monolith
context (empty) Second edition argues microservices are wrong for startups and that the modular monolith is underestimated.
relation (empty) about
source_node_id (empty) 8d27832b-9d92-4b50-a95f-bf61d81d270d
target_node_id (empty) d2aa5163-748e-4b3b-bec2-f13ac41d6e57
create Martin FowlerauthoredStrangler Fig Pattern
context (empty) Chikahiro attributes the Strangler Fig pattern to Martin Fowler.
relation (empty) authored
source_node_id (empty) 33f22dea-eae4-4b70-969f-4d51b3c8924c
target_node_id (empty) c7744de4-2c57-4377-9a3a-930596ba999d
create Packwerkrelated_toModular Monolith
context (empty) Packwerk is the Shopify gem used to enforce modular-monolith boundaries in Rails apps.
relation (empty) related_to
source_node_id (empty) f4e165b1-6b40-4bdb-85db-bd5541b8c7e3
target_node_id (empty) d2aa5163-748e-4b3b-bec2-f13ac41d6e57
create Shopifyworks_onPackwerk
context (empty) Packwerk is a Shopify-maintained gem.
relation (empty) works_on
source_node_id (empty) 934a1185-4a30-4c56-b417-b26f0ad00133
target_node_id (empty) f4e165b1-6b40-4bdb-85db-bd5541b8c7e3
create Toby Lütkeworks_atShopify
attrs (empty) {"role" => "co-founder and CEO"}
context (empty) Co-founder and CEO.
relation (empty) works_at
source_node_id (empty) 4f5bead7-0043-428b-ba63-682f7107f4e2
target_node_id (empty) 934a1185-4a30-4c56-b417-b26f0ad00133
create Toby Lütkerelated_toIs the monolith a problem
context (empty) Chikahiro quotes Toby's Black Friday 2023 tweet (145B requests, 60M req/min peak) as evidence monoliths can scale.
relation (empty) related_to
source_node_id (empty) 4f5bead7-0043-428b-ba63-682f7107f4e2
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Mice of the Modulithpresented_atRails World
context (empty) Delivered at Rails World 2024 by a Shopify engineer.
relation (empty) presented_at
source_node_id (empty) 1a8c03c3-74b6-4307-87fb-89d525e81e47
target_node_id (empty) 995d3589-e398-404e-ac4e-2966ec89fd80
create Mice of the ModulithaboutModular Monolith
context (empty) Argues modular monoliths don't automatically solve problems — they need high cohesion.
relation (empty) about
source_node_id (empty) 1a8c03c3-74b6-4307-87fb-89d525e81e47
target_node_id (empty) d2aa5163-748e-4b3b-bec2-f13ac41d6e57
create SOAPrelated_toService-Oriented Architecture
context (empty) SOAP (evolved from XML-RPC) was the foundational technology for SOA.
relation (empty) related_to
source_node_id (empty) ac58bea7-7b56-49ea-a886-91f0bb2aa3b0
target_node_id (empty) 1dc39c86-a040-4ea4-bda1-39b24e4003e5
create AmazonusesService-Oriented Architecture
context (empty) Moved from monolith to SOA in 2002; the resulting API discipline later became AWS.
relation (empty) uses
source_node_id (empty) d32c5f3a-c097-4768-bd79-450e48b10c06
target_node_id (empty) 1dc39c86-a040-4ea4-bda1-39b24e4003e5
create TwitterusesRuby on Rails
context (empty) Bootstrapped on Rails ~2006 before migrating to Scala ~2008–2009.
relation (empty) uses
source_node_id (empty) e927525e-92be-47ed-9348-27c6341502e6
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create GitHubusesRuby on Rails
context (empty) Founded in 2008 on Ruby on Rails.
relation (empty) uses
source_node_id (empty) 7b9aabd6-7e21-48b6-b87d-8c99d99c3b34
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create ShopifyusesRuby on Rails
context (empty) Shopify runs on a Rails monolith; cited for 145B Black Friday requests and 30–40 deploys/day.
relation (empty) uses
source_node_id (empty) 934a1185-4a30-4c56-b417-b26f0ad00133
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create NetflixusesService-Oriented Architecture
context (empty) Early and prominent microservices adopter, ~2015; also popularised chaos engineering and testing in production.
relation (empty) uses
source_node_id (empty) 0d0d2abf-08d3-4a9a-8cec-1052c9284aa3
target_node_id (empty) 1dc39c86-a040-4ea4-bda1-39b24e4003e5
create ThoughtWorksrecommendsModular Monolith
context (empty) Their macro-trends report states 'modular monolith rises again'.
relation (empty) recommends
source_node_id (empty) ca8056b4-9636-4fea-a7b5-14d286d2bc2e
target_node_id (empty) d2aa5163-748e-4b3b-bec2-f13ac41d6e57
create Chikahiro TokororecommendsModular Monolith
context (empty) Core recommendation of the talk: the next decade will be the era of the modular monolith.
relation (empty) recommends
source_node_id (empty) ff9ba4c3-53dd-4578-b19c-52f29da4fb28
target_node_id (empty) d2aa5163-748e-4b3b-bec2-f13ac41d6e57
create Chikahiro TokororecommendsPackwerk
context (empty) Recommended as a linter for enforcing module boundaries inside Rails apps.
relation (empty) recommends
source_node_id (empty) ff9ba4c3-53dd-4578-b19c-52f29da4fb28
target_node_id (empty) f4e165b1-6b40-4bdb-85db-bd5541b8c7e3
create Chikahiro TokororecommendsStrangler Fig Pattern
context (empty) Recommended for gradually rolling out a refactor without big-bang risk.
relation (empty) recommends
source_node_id (empty) ff9ba4c3-53dd-4578-b19c-52f29da4fb28
target_node_id (empty) c7744de4-2c57-4377-9a3a-930596ba999d
create Chikahiro TokororecommendsDomain-Driven Design
context (empty) Recommended alongside DRY-as-knowledge for better modeling.
relation (empty) recommends
source_node_id (empty) ff9ba4c3-53dd-4578-b19c-52f29da4fb28
target_node_id (empty) 6e2f88bd-e521-41a3-91d4-aeb5f8fd2486
create Chikahiro TokororecommendsMatthias Verraes
context (empty) Points attendees to Matthias's DDD blog posts as a simple, helpful introduction.
relation (empty) recommends
source_node_id (empty) ff9ba4c3-53dd-4578-b19c-52f29da4fb28
target_node_id (empty) 0b7a2c6c-ff2c-42f4-8dc2-bb37db51c405
create Chikahiro TokororecommendsBuilding Microservices
context (empty) Cites Sam Newman's second edition on modular monolith being underestimated and microservices being bad for startups.
relation (empty) recommends
source_node_id (empty) ff9ba4c3-53dd-4578-b19c-52f29da4fb28
target_node_id (empty) 8d27832b-9d92-4b50-a95f-bf61d81d270d
create Chikahiro TokororecommendsMice of the Modulith
context (empty) Recommends the Rails World 2024 Shopify talk on modular-monolith realities.
relation (empty) recommends
source_node_id (empty) ff9ba4c3-53dd-4578-b19c-52f29da4fb28
target_node_id (empty) 1a8c03c3-74b6-4307-87fb-89d525e81e47
create God Objectrelated_toDistributed Monolith
context (empty) Migrating a God-object-laden monolith to microservices leads to a distributed monolith.
relation (empty) related_to
source_node_id (empty) a4dd14f8-53b5-478b-81a8-e586b0ed28c5
target_node_id (empty) a3f89459-620c-477b-8cc5-8f0ea99f603e
create Modular Monolithrelated_toMajestic Monolith
context (empty) Both name the same trend of well-structured single-deployment applications.
relation (empty) related_to
source_node_id (empty) d2aa5163-748e-4b3b-bec2-f13ac41d6e57
target_node_id (empty) 6296ae9b-a4fd-4612-8afc-fccd2535f00a
create Refactor with clear business meritfrom_talkIs the monolith a problem
context (empty) Chikahiro's practical advice on how to justify and sequence refactors.
relation (empty) from_talk
source_node_id (empty) 239b4881-41a4-4351-86ab-05e976ecbedf
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Monolith is not the problem — God objects arefrom_talkIs the monolith a problem
context (empty) The talk's headline message.
relation (empty) from_talk
source_node_id (empty) f5e1b9dd-6a14-4334-b962-bd036deb199b
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Knowledge, not code, is what DRY is aboutfrom_talkIs the monolith a problem
context (empty) Lesson from the customer/invoice/receipt STI example.
relation (empty) from_talk
source_node_id (empty) 591fdab3-c5f7-4ad1-8dfa-5bce90917644
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Prefer delegation over inheritancefrom_talkIs the monolith a problem
context (empty) From Q&A about whether inheritance causes God objects.
relation (empty) from_talk
source_node_id (empty) 4f6a126d-698a-4807-a940-d2697066e3f0
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Enforce domain boundaries dynamically via ActiveRecord hooksfrom_talkIs the monolith a problem
context (empty) Audience-contributed technique in the Q&A for Packwerk's dynamic-calls blind spot.
relation (empty) from_talk
source_node_id (empty) 2f73ab98-089b-4ff3-b990-46f88fcdac24
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create How to display heterogeneous documents after splitting a God model?asked_atIs the monolith a problem
context (empty) First audience question.
relation (empty) asked_at
source_node_id (empty) 8d0e925f-bf5a-4966-af84-99295e3fcc11
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Metrics for refactoring impact on the businessasked_atIs the monolith a problem
context (empty) Second audience question.
relation (empty) asked_at
source_node_id (empty) 4e59c9b3-0684-4a23-8f61-c1806965098b
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Are God objects a consequence of inheritance?asked_atIs the monolith a problem
context (empty) Third audience question.
relation (empty) asked_at
source_node_id (empty) cb3a734a-031b-4af3-8d10-4243aa6b71c0
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create How to educate the team on modularity boundaries?asked_atIs the monolith a problem
context (empty) Fourth audience question.
relation (empty) asked_at
source_node_id (empty) b8cf8396-fb31-4262-b4ec-ecd482d7a19e
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Enforcing boundaries with Packwerk given Rails dynamic callsasked_atIs the monolith a problem
context (empty) Final audience question, with follow-up from another attendee about active-record boundary hooks.
relation (empty) asked_at
source_node_id (empty) 8ecd84d8-17cc-4df0-93ef-8cef4c9f0985
target_node_id (empty) 24934ed8-5e5f-4357-ac8f-80e1b0f18cf4
create Enforcing boundaries with Packwerk given Rails dynamic callsaboutPackwerk
context (empty) Asks about the limits of Packwerk's static analysis.
relation (empty) about
source_node_id (empty) 8ecd84d8-17cc-4df0-93ef-8cef4c9f0985
target_node_id (empty) f4e165b1-6b40-4bdb-85db-bd5541b8c7e3
create Are God objects a consequence of inheritance?aboutGod Object
context (empty) Asks whether inheritance causes God objects.
relation (empty) about
source_node_id (empty) cb3a734a-031b-4af3-8d10-4243aa6b71c0
target_node_id (empty) a4dd14f8-53b5-478b-81a8-e586b0ed28c5
create How to display heterogeneous documents after splitting a God model?aboutGod Object
context (empty) About the practical cost of splitting a document God model.
relation (empty) about
source_node_id (empty) 8d0e925f-bf5a-4966-af84-99295e3fcc11
target_node_id (empty) a4dd14f8-53b5-478b-81a8-e586b0ed28c5
create Metrics for refactoring impact on the businessaboutGod Object
context (empty) About measuring the business value of refactoring God objects.
relation (empty) about
source_node_id (empty) 4e59c9b3-0684-4a23-8f61-c1806965098b
target_node_id (empty) a4dd14f8-53b5-478b-81a8-e586b0ed28c5
create How to educate the team on modularity boundaries?aboutModular Monolith
context (empty) About teaching teammates to see modular boundaries.
relation (empty) about
source_node_id (empty) b8cf8396-fb31-4262-b4ec-ecd482d7a19e
target_node_id (empty) d2aa5163-748e-4b3b-bec2-f13ac41d6e57

Read set

215 nodes

person Chikahiro Tokoro search_nodes+get_node_edges project monolith framework search_nodes concept Majestic Monolith search_nodes resource Painless Rails search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes talk Better ActiveRecord IRB Output Gem Lightning Talk search_nodes event Rails World search_nodes resource Rails Architect Master Class search_nodes takeaway Tooling Never Forced Your Monolith search_nodes project granite search_nodes concept Monolith as Data Model search_nodes concept Distributed Monolith search_nodes takeaway Don't modularise with microservices or engines search_nodes concept Hexagonal Architecture search_nodes question Risk of misidentifying domains during legacy re-architecture search_nodes question Distributed or majestic monolith? search_nodes takeaway Layered DDD is junior-friendly and estimation-friendly search_nodes concept CQRS search_nodes concept Null Object Pattern search_nodes takeaway Prefer class-method services over stateful service objects search_nodes concept respond_to Anti-Pattern search_nodes takeaway Complexity Grows Inward in Service Objects search_nodes takeaway Silver Bullet Anti-Pattern search_nodes concept Aggregate Root Anti-Pattern search_nodes talk Doctrine of Useful Objects Separate Fact from Fiction in OOD search_nodes concept Boolean Flags as Implicit State search_nodes question Over-engineering risk of inventing layers search_nodes concept Useful Objects search_nodes tool Ruby on Rails search_nodes concept Cynefin Framework search_nodes tool Ember.js search_nodes resource Woman on Rails search_nodes tool Rack search_nodes tool merb search_nodes takeaway Ruby as a Data Management Language search_nodes tool Discourse search_nodes company Shopify search_nodes tool Bootsnap search_nodes tool Tapioca search_nodes tool graphql-batch search_nodes talk Scaling an Open Source E-Commerce Framework search_nodes tool Webpacker search_nodes tool Klaviyo search_nodes project rails_event_store/ecommerce search_nodes tool cssbundling-rails search_nodes tool Jumpstart Pro search_nodes person Martin Fowler search_nodes resource Patterns of Enterprise Application Architecture search_nodes concept MVC Modularity Violations search_nodes resource Domain-Driven Design: Patterns, Principles and Practices search_nodes concept DDD Whirlpool search_nodes concept Saga Pattern search_nodes concept Data-Dictated Development search_nodes concept Dependency Injection search_nodes concept Opaque Dependencies search_nodes takeaway Don't Store Sensitive Data Yourself search_nodes resource Clean Code search_nodes resource Practical Object-Oriented Design in Ruby search_nodes takeaway Prefer conventions over custom code search_nodes concept Rubber Duck Debugging search_nodes resource awesome-ddd search_nodes resource Object-Oriented Software Construction search_nodes takeaway Rails Way vs Design Way search_nodes concept Structural Physics of Software search_nodes concept Conway's Law search_nodes concept Distance From The Main Sequence search_nodes concept Chesterton's Fence search_nodes takeaway Avoid complexity before fighting it search_nodes question How to detect coupling in a large existing project? search_nodes concept Application Logic vs Business Logic search_nodes talk Ever shorter feedback loop search_nodes takeaway Every commit must be an improvement, atomic, and deployable search_nodes concept Domain-Driven Design search_nodes resource Implementing Domain-Driven Design search_nodes talk Might & Magic of Domain-Driven Design search_nodes talk The pillars of Domain Driven Design search_nodes question Does DDD require object-oriented programming? search_nodes resource Domain-Driven Rails search_nodes question How to apply DDD when the client refuses to learn ubiquitous language? search_nodes takeaway DDD Is More Than Aggregates search_nodes takeaway Risks of DDD: Hierarchy, Perfectionism, Constraints search_nodes talk Building uls for microservices search_nodes takeaway Bounded Contexts Are Natural Microservice Seams search_nodes takeaway Bounded Contexts Are Not Microservices search_nodes concept Service Autonomy search_nodes takeaway Microservices Were Never About HTTP search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2018 search_nodes talk Performance Panel wroclove.rb 2024 search_nodes talk It is not so bad, after all search_nodes talk Rewrite with confidence search_nodes talk Is the monolith a problem search_nodes+get_node_edges question What's the most complex performance problem you've solved? search_nodes question Engines vs namespaces for splitting a growing monolith search_nodes tool Speaker Deck search_nodes tool ChatGPT search_nodes takeaway Name Things To Find Their Properties search_nodes tool langchainrb search_nodes tool macOS say command search_nodes concept AI Agent search_nodes concept Retrieval Augmented Generation search_nodes takeaway Spoken Test Feedback with say + iTerm Triggers search_nodes project Check search_nodes takeaway Gradual migration via steps search_nodes takeaway Don't Cram Eventide Into Legacy Apps search_nodes tool Amazon Elastic Transcoder search_nodes tool Litestream search_nodes takeaway Event Sourcing Mind Shift Trade-off search_nodes question How to migrate legacy data into an event-sourced system? search_nodes concept Event-Driven CRUD Hybrid search_nodes takeaway Eventual Consistency Trade-off search_nodes tool AWS Lambda search_nodes tool Docker search_nodes tool Amazon ECS search_nodes tool Docker Compose search_nodes takeaway Dockerize Exotic Dependencies search_nodes question Scaling Sidekiq Elastically search_nodes talk Kamal is not harder than your PaaS search_nodes takeaway Sign serverlessforruby.org petition search_nodes tool Honeycomb search_nodes tool Prometheus search_nodes tool knapsack_pro search_nodes concept Class Constructor as Convenience Interface search_nodes concept Ruby Module Customization Mechanics search_nodes takeaway Prefer Prepend Over Inheritance For Jobs search_nodes concept Flat Query Structure search_nodes resource 99 Bottles of OOP search_nodes takeaway Be kind and build useful things search_nodes takeaway Stop delegating decisions to popular library authors search_nodes concept Architecture Drivers search_nodes talk How wroclove.rb impacts developers and companies search_nodes question How to do DDD remotely? search_nodes talk Development with axioms search_nodes project Trezy search_nodes project Nerds and Threads search_nodes takeaway Buy Faster Hardware search_nodes concept Scaffolding Before Features search_nodes tool YJIT search_nodes company Pragmatic Bookshelf search_nodes person Robert C. Martin search_nodes concept Developer vs Programmer search_nodes resource Grokking Simplicity search_nodes person Matthias Verraes search_nodes person DHH search_nodes question Including Unavailable Domain Experts search_nodes tool SXG Validator search_nodes tool activerecord-multi-tenant search_nodes tool acts_as_tenant search_nodes concept Active Record search_nodes takeaway Don't reinvent multi-tenancy — use existing gems search_nodes tool Apartment search_nodes question Is the WHERE-clause leak risk real with acts_as_tenant? search_nodes concept ActiveRecord Encryption search_nodes talk Nightmare neighbours caveats of Rails based mutlitenancy search_nodes concept Fixtures over Factories search_nodes tool acts_as_paranoid search_nodes takeaway Replay-Based Debugging search_nodes resource Rocket Real-Time Benchmark search_nodes concept Bounded Context search_nodes concept Namespace-Based Folder Hierarchy search_nodes takeaway Give Each Kind of Work Its Own Shelf search_nodes concept Context Map search_nodes takeaway Introduce bounded-context controller namespaces search_nodes concept Bundle Size Audit search_nodes tool left-pad search_nodes concept xkcd Dependency / Nebraska Problem search_nodes tool Release Drafter search_nodes tool RealtimeBoard search_nodes talk Offline Sandwich Focus Workflow search_nodes concept Push Often Behind Feature Flags search_nodes takeaway Collect data before enabling risky features search_nodes concept Selective MFA Rollout search_nodes tool flag_shih_tzu search_nodes concept Optional Gradual Typing search_nodes takeaway Act as a perfect tool on reviews search_nodes concept Introduce Explaining Variable search_nodes takeaway Narrow the Blocker by Comparing Environments search_nodes resource Refactoring (book) search_nodes talk To Refine or Not to Refine search_nodes takeaway Trailblazer tracing saves thousands of debugging hours search_nodes concept Refinements search_nodes tool Requestly search_nodes concept Waterfall Analysis search_nodes takeaway Sorbet fits big refactorable codebases, not greenfield search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes concept Rails Engine search_nodes question Packaging a Rails engine that uses Webpacker search_nodes concept Pre-Compile Engine Assets at Build Time search_nodes talk How To Package A Rails Engine Generation To Automation search_nodes tool ViewComponent search_nodes question Real large apps using this pattern search_nodes takeaway Give Unto Rails That Which Is Rails search_nodes takeaway Pre-compile engine assets to shield host apps search_nodes talk Toolbelt of a Seasoned Bug Hunter search_nodes talk Multi-region data governance in Rails application search_nodes talk Counterintuitive Rails pt. 1 search_nodes talk How to Be Top 10% in Ruby Lightning Talk search_nodes talk Better WebPerformance with Rails search_nodes company Rails Foundation search_nodes company GitHub search_nodes resource The Rails and Hotwire Codex search_nodes talk Mentoring the Rails World Website Lightning Talk search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes question What is an enterprise Rails application? search_nodes tool Amazon S3 search_nodes tool Amazon Route 53 search_nodes tool Amazon Web Services search_nodes tool AWS DataSync search_nodes tool AWS CloudWatch search_nodes tool AWS Elastic Load Balancer search_nodes

2 edges