Skip to main content
thoughtbot thoughtbot
  • We're live 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
We're live 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
  • Healthcare
  • Finance
  • Insurance
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
  • Giant Robots Smashing Into Other Giant Robots Podcast
  • Design Sprint Guide
  • Live Streaming on LinkedIn
View all Resources

Web Articles

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

    • All Topics
    • Design
    • Development
    • Product
    • More topics
  1. Elm's universal pattern

    Want to build a random generator? A JSON decoder? Combine multiple Maybes into a more complex one? Do it all with this one simple trick.

    Joël Quenneville
    January 13, 2017
    • Elm
    • Web
  2. Preloading Nested Associations with Ecto

    A look at how to preload database associations using Elixir’s Ecto library.

    Greg Lazarev
    January 11, 2017
    • Elixir
    • Ecto
    • Web
  3. Lessons Learned: Avoiding Primitives in Elm

    Switching from primitive types to product types can improve confidence in correctness and compiler errors, but not without a cost.

    Josh Clayton
    January 10, 2017
    • Web
    • Elm
    • Haskell
  4. "Tell, Don't Ask" in Elixir: A Story of Pattern-Matching

    Write declarative Elixir code by applying “Tell, Don’t Ask”.

    Josh Clayton
    December 21, 2016
    • Web
    • Phoenix
    • Functional Programming
    • Elixir
  5. Building custom DOM event handlers in Elm

    A step-by-step guide to implementing a custom onChange event in Elm 0.18.

    Joël Quenneville
    November 21, 2016
    • Web
    • Elm
  6. Options for adding a blog to a Rails application

    TL;DR: roll your own.

    Tute Costa
    November 18, 2016
    • Rails
    • Blog
    • Web
  7. Announcing FormLinter

    A tool for making better forms.

    Ben Orenstein
    November 9, 2016
    • Formkeep
    • Design
    • Web
    • News
  8. Composition vs Inheritance

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

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

    Using composition to build modular object-oriented systems.

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

    Solving the combinatorial explosion problem with multiple inheritance.

    Joël Quenneville
    November 1, 2016
    • Web
    • Ruby
    • Good Code
  11. Sign up to receive a weekly recap from thoughtbot

    Looking for even more ways to stay connected?
    RSS feed Check out our feeds
« First ‹ Prev … 16 17 18 19 20 21 22 23 24 … Next › Last »

Footer

thoughtbot
  • Services
  • Case Studies
  • Resources
  • Let's Talk
  • Our Company
  • Careers
  • Purpose
  • Blog
  • Events
  • Sponsor
  • Store
  • Mastodon
  • Bluesky
  • GitHub
  • YouTube
  • Twitch
  • Feeds
© 2026 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
  • Code of Conduct
  • Accessibility Statement
  • Privacy Policy