Skip to main content
thoughtbot thoughtbot
  • Live on Twitch!

    thoughtbot is livestreaming

    Work alongside the thoughtbot team as we collaborate with each other and our clients, live. Ask us anything, we're live right now!

  • Case Studies
  • Blog
  • Let’s Talk
Live on Twitch!

thoughtbot is livestreaming

Work alongside the thoughtbot team as we collaborate with each other and our clients, live. Ask us anything, we're live right now!

Let’s get started!
View all Services
Development
  • Ruby on Rails
  • Hotwire
  • AI and Machine Learning
  • Maintenance
  • Mobile
Design
  • Discovery Sprints
  • UX, UI, and Product Design
  • Design Systems
Product
  • MVP
  • Product Management
  • Accessibility
Team and Processes
  • Team Augmentation
  • Fractional Leadership
View all Services
View all Resources
Development
  • Tech Leadership Resources
  • Open Source
  • Books
  • The Bike Shed Podcast
  • Live Streaming on YouTube
  • Conference Talks
The business of great software
  • Playbook
  • Purpose Built
  • Giant Robots Smashing Into Other Giant Robots Podcast
  • Design Sprint Guide
  • Live Streaming on LinkedIn
View all Resources

Good Code Articles

Written by thoughtbot, your expert partner for design and development.

    • All Topics
    • Design
    • Development
    • Product
    • More topics
  1. Booleans and Enums

    Refactor common Boolean smells using enums (union types).

    Joël Quenneville
    September 20, 2017
    • Web
    • Elm
    • Good Code
  2. Spend Your Divergence Wisely

    Complexity makes apps harder to use and harder to maintain. We can avoid that unnecessary complexity by starting with good defaults and from there making informed decisions about where to diverge from them.

    Mason Fischer
    March 2, 2017
    • Good Code
    • Techniques
    • Web
  3. Composition vs Inheritance

    Choose the right tool for the job when building modular software.

    Joël Quenneville
    November 3, 2016
    • Web
    • Ruby
    • Good Code
  4. Building Reusable Object-Oriented Systems: Composition

    Using composition to build modular object-oriented systems.

    Joël Quenneville
    November 2, 2016
    • Web
    • Ruby
    • Good Code
  5. Building Reusable Object-Oriented Systems: Modules

    Solving the combinatorial explosion problem with multiple inheritance.

    Joël Quenneville
    November 1, 2016
    • Web
    • Ruby
    • Good Code
  6. Building Reusable Object-Oriented Systems: Inheritance

    Using inheritance to share common logic.

    Joël Quenneville
    October 31, 2016
    • Web
    • Ruby
    • Good Code
  7. Your Program is a Special and Unique Snowflake

    Simplify and clarify your code by carefully choosing abstractions.

    Joe Ferris
    May 26, 2016
    • Good Code
    • Ruby
  8. My issues with Let

    let can lead to bloat. Be careful.

    Jason Draper
    May 20, 2016
    • Testing
    • Ruby
    • Good Code
    • Web
  9. Refactor Until You Feel Almost Comfortable

    Duplication is cheaper than the wrong abstraction.

    Tute Costa
    December 15, 2015
    • Good Code
  10. Splitting an open source project in two with Git submodules

    How and why we split the doorkeeper project into different rubygems.

    Tute Costa
    June 2, 2015
    • Open Source
    • Good Code
  11. Sign up to receive a weekly recap from thoughtbot

    Looking for even more ways to stay connected?
    RSS feed icon Check out our feeds
« First ‹ Prev 1 2 3 4 5 6 7 8 … Next › Last »

Footer

thoughtbot
  • Services
  • Case Studies
  • Resources
  • Let's Talk
  • Our Company
  • Careers
  • Purpose
  • Blog
  • Sponsor
  • Mastodon
  • Bluesky
  • GitHub
  • YouTube
  • Twitch
  • Feeds
© 2025 thoughtbot, inc.

The design of a robot and thoughtbot are registered trademarks of thoughtbot, inc.

  • US: +1 (877) 9-ROBOTS
  • UK: +44 (0)20 3807 0560
  • Beware of fraudulent thoughtbot job listings Learn more
  • Code of Conduct
  • Accessibility Statement
  • Privacy Policy