More Code with Jason episodes

318 - Adam Dawkins, CTO of Dragon Drop thumbnail

318 - Adam Dawkins, CTO of Dragon Drop

Published 9 Apr 2026

Duration: 00:52:59

Scaling Ruby on Rails projects faces challenges from rigid conventions that hinder flexibility, requiring intentional architecture, refactoring, and modular design to counter pitfalls like short-term solutions, poor testing, and overreliance on inheritance, while promoting collaboration through shared terminology and practical strategies.

Episode Description

In this episode I talk with Adam Dawkins, CTO of Dragon Drop, about building internal tools using Ruby on Rails, the challenges of growing codebases,...

Overview

The podcast discusses the development and challenges of internal software tools, focusing on Adam Dawkins' UK-based company, Drag and Drop, which builds customized internal platforms (e.g., CRMs) for clients seeking solutions beyond standard SaaS offerings. The company relies on Ruby on Rails for its projects, emphasizing its utility in early-stage development but highlighting its limitations as projects scale. Key challenges include Rails opinionated framework structure, which can lead to rigid codebases with "fat models" or controllers, and its tendency to prioritize quick fixes over intentional architectural design. The discussion critiques how frameworks like Rails can obscure deeper design considerations, prompting a need for deliberate software architecture to manage complexity as systems grow.

A central theme revolves around the importance of design in software development, arguing that frameworks alone cannot address scalability and maintainability. The podcast explores strategies to improve design skills, such as building non-web Ruby programs to confront abstraction challenges and learning Ruby independently of Rails to distinguish core language features from framework conveniences. It also emphasizes the shift from prioritizing immediate functionality to fostering code that is easy to understand and modify. Practical examples include refactoring domain logic into isolated classes for testability and using behavioral abstractions (e.g., "CalculatesCommission") over real-world object modeling. Critiques of traditional OO design, inheritance, and OOP tutorials are presented, advocating for abstractions defined by behavior rather than tangible entities.

The discussion also delves into code maintenance, testing, and the cultural challenges in agencies, such as balancing client demands with long-term technical debt. It critiques common misconceptions about testing, emphasizing that tests should define specifications rather than merely verify correctness. The podcast concludes with a broader philosophy on software design, framing it as an ongoing process of iterative refinement rather than a static goal. Concepts like "dull blades" (inefficient code) and the necessity of shared vocabulary in design are highlighted as practical tools for managing complexity, maintaining code quality, and fostering collaboration.

Recent Episodes of Code with Jason

1 Jul 2026 323 - David Yanacek on 20 Years of Innovation at AWS

Modern software development practices emphasize TDD and spec-driven methods, address AI code generation challenges with tools like Kero, explore advanced testing techniques, service architectures, and DevOps strategies, stressing automation balance, observability, and tool refinement for reliability.

16 Jun 2026 322 - Joe Masilotti

AI transforms developer and consulting roles by commoditizing coding, pushing focus toward strategic guidance and app optimization, while challenging solo founders and consultants to adapt beyond code delivery, highlighting AI's strengths in execution over design and the growing need for human-centric, opinionated content and personal branding.

3 Jun 2026 321 - Uncle Bob Martin

Explores software modeling complexities, AI's reliance on statistical prediction versus explanatory knowledge, the balance of elegance and accuracy, abstraction's role in managing entropy and disorder, and the evolution of programming principles like test-driven development and object-oriented design.

More Code with Jason episodes