Day-one talk by Ivan Nemytchenko at wroclove.rb 2018 (part 1 of 2; part 2 delivered the next day). Opens with a survey to collect audience data for part 2. Argues that Rails developers rely on implicit, discipline-heavy habits (no callbacks, no concerns, fat model / skinny controllers) and that the language's power is dangerous without constraints. Ivan (GitLab developer advocate, Rails user since 2006) explains he stopped actively coding in Rails three years ago, recently returned via a freelance project, was dissatisfied with his own results, and attended a workshop by 'another Russian guy' that blew his mind — summarizing the takeaways is his reason for this talk. Proposes three properties of an ideal system: (1) opposes bad code like React does, (2) doesn't fight the framework and uses defaults, (3) offers one canonical way to do a thing. Introduces 'dirt is OK if it doesn't expose to the system'. Critiques five beliefs: (a) flat model structure — instead group models into folders by entity dependencies / aggregation roots (e.g. Article / Comment) from day one; (b) flat controller structure and respond_to abuse — uses REST theory to argue respond_to is not 'different representations', recommends top-level controller namespaces per wave (web, API, RSS feeds, PDF reports); (c) MVC-ignoring — introduces bounded-context-based controller namespaces (e.g. Web::Moderation::ArticlesController) so moderation and editing are separate domains rather than conditional actions; (d) modularity — argues circular dependencies between models, controllers and external services violate MVC, calls out Devise, acts_as_api and current_user globals as MVC violations; (e) confusing application logic, business logic and domain models — persistence is a technical detail, domain models shouldn't depend on Rails, language, or app type. Fighting complexity starts with avoiding it (push back on business requests), then put code into proper abstraction layers. Services should be classes with class methods or single methods, not stateful objects; use dry-container to register stub/real implementations per environment instead of threading adapters through the call stack. Shares an interactor-gem experiment that collapsed into a four-line method. Talk ends with pointers to Ivan's website, email and dual-language Twitter accounts.