James Thompson — At The Intersection of Ruby & AI

Principles of Software Engineering

Discover key principles that guide effective software engineering beyond specific methodologies or technologies. This thoughtful exploration presents five fundamental values—embracing constraints, prioritizing simplicity, ensuring reliability, practicing empathy, and communicating clearly—that form the foundation of successful software development. Learn how these principles can help you navigate technical decisions, improve team collaboration, and create systems that deliver lasting value regardless of the programming languages or frameworks you use.
Categories: Software Architecture, Tech Philosophy, Engineering Leadership

What is Accidental Software Architecture?

Explore the critical distinction between intentional and accidental software architecture in this thought-provoking analysis. Discover how many systems evolve through unplanned, reactive decisions rather than deliberate design choices, leading to maintenance challenges and technical debt. This article examines how time constraints, organizational politics, and lack of technical leadership contribute to architectural drift, while offering practical strategies for transforming accidental architecture into purposeful design through documentation, refactoring, and improved governance practices.
Categories: Software Architecture, Legacy Code & Maintenance

Give The Talk; Don't Talk About The Talk

Transform your technical presentations with this practical advice for engaging audiences more effectively. Learn why the common mistake of "talking about your talk" diminishes impact and wastes valuable presentation time. This article offers concrete strategies for diving directly into substantive content, structuring presentations for maximum audience retention, and delivering technical information in ways that resonate with both experts and newcomers. Discover how to eliminate unnecessary meta-commentary and create presentations that respect your audience's time and intelligence.
Categories: Technical Communication

The Right Abstraction Matters

Learn why finding the right level of abstraction is crucial for creating maintainable software systems. This article explores the delicate balance between abstracting too little (causing duplication and inconsistency) and abstracting too much (introducing unnecessary complexity). Discover practical techniques for identifying appropriate abstraction boundaries, recognizing when existing abstractions have outlived their usefulness, and evolving your codebase's architecture through incremental refactoring. Includes real-world examples of how proper abstraction decisions can dramatically improve system flexibility and developer productivity.
Categories: Software Architecture, Development Practices, Tech Philosophy

A Rubyist's Perspective on React

Discover what makes React appealing from the perspective of a Ruby developer in this insightful comparison. Learn how React's component-based architecture creates surprising parallels with Ruby's object-oriented design principles, while offering a refreshing approach to frontend development. This article examines specific React features that resonate with Rubyists, including its focus on maintainability, composability, and testability. Whether you're a Ruby developer considering React or simply interested in cross-language design philosophies, this piece offers valuable insights into how different programming paradigms can complement each other.
Categories: Ruby & Rails Development, Development Practices