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

Articles by Joël Quenneville

View other authors

  1. Pipeline Decoders in Elm

    What’s the difference between Elm’s classical and pipeline JSON decoders?

    Joël Quenneville
    May 19, 2021
    • Elm
    • Functional Programming
    • Web
  2. Running Out of Maps

    What happens when you need a bigger mapN?

    Joël Quenneville
    May 12, 2021
    • Elm
    • Web
    • Functional Programming
  3. Classical Reasoning and Debugging

    Classical philosophy offers us multiple reasoning strategies for dealing with tricky bugs.

    Joël Quenneville
    April 30, 2021
    • Debugging
    • Debugging Series 2021
  4. Debugging: Listing Your Assumptions

    Kick-start your debugging process by turning implicit assumptions into explicit ones.

    Joël Quenneville
    April 16, 2021
    • Debugging
    • Debugging Series 2021
  5. Simplifying Tests by Extracting Side-Effects

    Test-driven development, object-oriented design, and functional programming converge on some similar ideas.

    Joël Quenneville
    February 18, 2021
    • Web
    • Ruby
    • TDD
    • Testing
    • Functional Programming
    • Good Code
  6. Testing Objects with a Functional Mindset

    Some ideas from functional programming can help us improve the unit tests for our object-oriented code.

    Joël Quenneville
    January 19, 2021
    • Web
    • Functional Programming
    • Testing
    • Good Code
    • Ruby
  7. Conference Talk Proposal Examples

    Opening up the archives! All of Joël Quenneville’s conference talk proposals, both accepted and rejected.

    Joël Quenneville
    February 6, 2020
    • Conferences
    • Writing
  8. Best resources to upskill your technical team

    Tried and tested techniques to keep your Ruby on Rails or React Native team up to date.

    Joël Quenneville
    December 23, 2019
    • Teams
    • Culture
    • Code Review
    • Pair Programming
    • Playbook
    • Ruby On Rails
    • People Management
  9. Addressing technical debt

    Discover strategies for addressing technical debt and improving code quality through refactoring and collaboration.

    Joël Quenneville
    November 4, 2019
    • Ruby On Rails
    • Technical Debt
    • Refactoring
    • Code Audit
  10. Chaining Async Functions like a Boss

    A look at syntactic sugar for chaining async functions in multiple languages.

    Joël Quenneville
    November 1, 2019
    • Web
    • Elm
    • Scala
    • Haskell
    • JavaScript
« First ‹ Prev 1 2 3 4 5 6 7 8 9 10 11 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