James Thompson — At The Intersection of Ruby & AI

JavaScript Can Not Win

Challenge the notion that JavaScript has "won" the programming language competition. This thought-provoking piece argues that there is no competition to win in the first place, examining how diverse languages like COBOL, Python, and Java continue to thrive in their respective domains. Learn why the concept of a single dominant language is misguided, and why treating programming languages as tools rather than champions leads to more pragmatic software development decisions.
Categories: Tech Philosophy, Development Practices

Ask Questions — Even “Bad” Ones

Discover why asking questions is essential for learning and growth, even when you fear appearing vulnerable or uninformed. This article explores three key benefits of questioning: clarifying complex issues, exploring assumptions collaboratively, and facilitating knowledge sharing through guided discovery. Learn practical approaches for overcoming imposter syndrome and using questions strategically to improve team communication and technical understanding.
Categories: Technical Communication, Team Collaboration, Engineering Leadership

Defining Principles for Software Engineering

Explore how foundational principles rather than rigid methodologies drive successful software engineering. This article examines why articulating core values like quality, simplicity, and empathy creates more resilient development teams than prescriptive processes alone. Learn how principle-driven teams maintain consistent direction while adapting to changing requirements, and why shared values foster both innovation and stability in complex software projects.
Categories: Software Architecture, Engineering Leadership, Tech Philosophy

Identifiers in Microservices Systems

Learn essential strategies for managing identifiers in complex microservices architectures. This practical guide explores the critical differences between system-generated and natural identifiers, with real-world examples demonstrating how identifier design impacts data integrity and system evolution. Discover why composite keys often create more problems than they solve, how to implement effective identification strategies across service boundaries, and best practices for maintaining consistent entity relationships in distributed systems.
Categories: Software Architecture, Development Practices

Applying Clean Architecture to Ruby on Rails: Green Fields

Master the application of Clean Architecture principles to Ruby on Rails projects with this practical guide for greenfield development. Learn how to structure your application for long-term maintainability by separating business logic from framework details, creating clear boundaries between system layers, and implementing use cases that reflect real business requirements. Discover concrete code examples that demonstrate how these principles improve testability and make your Rails applications more resistant to the framework decay that plagues many legacy systems.
Categories: Ruby & Rails Development, Software Architecture