4.1 Determining What to Extract: Bottom-Up4.2 Refactoring: Extract Domain Gem—Predictor4.2.1 Fixing Inside-Out: Making AppComponent Work Again4.2.2 Last Step: Ensure That the App Works4.2.3 Summary of Bottom-Up Component Extractions4.3 Determining What to Extract: Top-Down4.3.1 Unclear Dependency Direction4.3.2 Not Everything Needs Predictor4.3.3 Implications of the First Set of Extractions4.3.4 Problem with the Current Solution4.3.5 Reducing Needed Dependencies4.4 Refactoring: Pulling Up a UI Component—TeamsAdmin, GamesAdmin, PredictionUI, WelcomeUI4.4.1 Generate4.4.2 Move4.4.3 Fix, Part 1: Reusing Test Helpers4.4.4 Fix, Part 2: Routing Issues4.4.5 Fix, Part 3: The Container Application4.4.6 An Explicitly Contracted Global Navigation4.5 Refactoring: Pushing Down a Model Component—Teams, Games4.5.1 Getting Away with Less4.5.2 Fixing Teams Tests4.5.3 Fixing Everything Else4.6 Refactoring: Improve Naming of Component—AppComponent to WebUI4.6.1 Whatever Happened to AppComponent?4.6.2 Refactoring Component Names4.6.3 Refactoring a Component Name Throughout the Application4.6.4 An Even More Mechanical Approach4.7 More Component Refactoring Patterns4.7.1 Splitting One Component in Two: Disentangling Unrelated Concepts4.7.2 API Component4.7.3 Third-Party Service Adapter4.7.4 Common Functionality Component