Giant Robots Smashing Into Other Giant Robots
Can’t touch the DOM? Reach for :has() to style any element
Buying Time, Choosing Words: Consulting Through Diplomatic Communication
thoughtbot around the world, meet us at upcoming events
Modeling State Transitions in Postgres
Humid 1.0: React server-side rendering in Rails can be easy!
A prototype is not a product. It's a conversation.
New: The State of Software Delivery in Healthcare
Sign in with Google for React Native
What founders told us about working with AI tools for startups
Join us: Building Secure Healthcare Systems
Upcase has retired, but the learning continues
The Bike Shed Ep 506: The Muppet Software Team
Migrating to native stack navigation, with a surprise from iOS 26
Past and present thoughtbotters at LRUG this Monday
The Bike Shed Ep 505: What is a “principal” or “staff” engineer?
Your vibe coded website is going to get you fined
Roux’s New Component Library
Why we're choosing stewardship over an exit
The Bike Shed Ep 503: Seeing the Graph for the Trees
Announcing Shoulda Matchers 8.0: validate multiple attributes in one line
AI's "overnight" solution for our flaky tests took two weeks to adopt
The Playwright debugging tool Rails devs aren't using
Meet thoughtbot at Brighton Ruby 2026
Giant Robots Podcast Ep 614: AI Code Audits
The mistake I didn't realise I was making when designing workshops
AI crawlers are inflating your view counts
The Bike Shed Ep 502: Apps That Make Our Work Go
Toast: the 2-minute test that reveals how you think about building products
How I Built a Chrome Extension Wrapper (and Everything That Tried to Stop Me)
Enforcing Your Ruby Style Guide on AI-Generated Code
Copy as Markdown: AI-friendly blog posts
The Bike Shed Ep 501: What makes for good technical writing?
The Four Signals of AI Observability
Can you really launch a tech business with a no-code app builder?
This week in #dev (May 15, 2026)
Giant Robots Podcast Ep 612: Do fish drink?
Lost, forgotten, and unfamiliar HTML
Why Duck Typer?
The Bike Shed Ep 500: Celebrating with past hosts
Biometrics authentication for your mobile app
Claude Code + Figma for non-technical designers
Why thoughtbot is joining the Ruby Alliance
Summer Special: We’re Taking London Tech Leaders Outdoors
AI and minority languages
6 key insights from Startup Grind Global 2026
When to use (and not use) CSS shorthand properties
Reflections on my conversation with Lord Chris Holmes MBE
Illusions Of Fluency
The Pace Of Feedback
A Conversation With The Situation
The TEXTSIZE trap: how TDS silently truncates your binary data in Rails
The output must be cleaned (with skill)
Austin Tech Leaders is growing, thoughtfully (and we have the photos to prove it)
Simple, affordable unsupervised agentic coding from my phone with Claude Code in Github Actions
Your carousel might not be accessible: designing for reduced motion
Reviewing Dependabot PRs is boring. Let Claude do it for you.
Retro-driven development
Trimming our CSS with sibling-index() and sibling-count()
Seven commands and the communication layer that emerged
Human vs Machine: the Bug
Let's enable MFA for all Ruby gems
Ship faster: How to unlock development speed in regulated industries
PII filtering for RubyLLM with Top Secret
The AI stack I developed to help me context switch
Giant Robots Podcast Ep 608: Project Updates with Will, Chad and Sami
The age of snarky UI
AI in Focus: A new Claude Skill for Rails code audits
You, too, can make a boilerplate
Sixty-six commits and the commands that didn't survive
Attending and speaking at Haggis Ruby
Enhancing job reliability with Sidekiq Pro's super fetch strategy
How strategic product design reduces risk before you write code
The Opinionated thoughtbotter: Bootstrap is the Superior Front-End Toolkit
Giant Robots Podcast Ep 606: AI layoffs are BS
Meet Duck Typer: your new duck typing friend
I copied a prompt and built a management system in a week
Observability for your LLM-powered apps: OTel Instrumentation for RubyLLM
Introducing Test Budget: a linter for test performance
The Bike Shed Ep 498: Season 2 Recap
How to launch a Lovable MVP in 2026
The Bike Shed Ep 497: Diagrams we love
Claude Skill incoming! Generating Postman collections with AI
Combine Capybara selectors to avoid the sequential timeout trap
The Bike Shed Ep 496: Test suite performance
Your chat bot needs a better rate limit strategy
How to choose and implement an LLM for your healthcare product
The Opinionated thoughtbotter: Linting is Non-Negotiable
48 companies you didn't know were using Rails in 2026
Claude Code skills: Automating FDA-required documentation for software as a medical device
The Bike Shed Ep 495: A shortcut to years of experience
Giant Robots Podcast Ep 603: The product we are going to build
Going beyond vibe coding with ReadySetGo
Going beyond vibe coding with ReadySetGo
Giant Robots Podcast Ep 603: The product we are going to build
A JavaScript developer's guide to Rails: Authorization with Pundit
Our first Tech Leaders Meetup in Bristol, UK
Our first Tech Leaders Meetup in Bristol, UK
A JavaScript developer's guide to Rails: Authorization with Pundit
The Bike Shed Ep 494: Primitive Obsession
The Bike Shed Ep 494: Primitive Obsession
props_template 1.0: A high performance, more opinionated jbuilder replacement
props_template 1.0: A high performance, more opinionated jbuilder replacement
A JavaScript developer's guide to Rails: What is Polymorphic Rails Model?
Claude Code: Production ready code in a two-week sprint
Teach your models to act, not just be
Announcing Michel: A scheduling gem for health tech
A JavaScript developer's guide to Rails: ActiveRecord Fundamentals
The Bike Shed Ep 492: Defining value within your team
What do our workspaces look like? (2026 Edition)
Giant Robots Podcast Ep 601: The thing that makes us human
A JavaScript developer's guide to Rails: What does Composition Over Inheritance mean?
The Bike Shed Ep 491: Influences that shaped our thinking
What Shoulda Matchers Is Actually Doing For You
Giant Robots Podcast Ep 600: The Special One
A JavaScript developer's guide to Rails: Where Does Everything Come From?
Code Audits in the Days of AI
The Bike Shed Ep 490: Large Language Misadventure
This week in #dev (Jan 9, 2026)
Our UK Tech Leader Tour
Giant Robots Podcast Ep 599: Be Bold
A JavaScript Developer's Guide to Rails - Series Introduction
Building programmable QA with AI
Rapid prototyping with Claude Code: How we transformed our design sprint process
The Bike Shed Ep 489: What makes a codebase welcoming
Prevent the Robocalypse with Claude Code and TDD
ChatGPT agent: Experimenting with QA automation
Wrapping up 2025 with our thanks
Your legacy software is a ticking bomb
Working across time zones: When async becomes the default
Your End-of-Year Software Audit Checklist (for Technical Product Teams)
How a £20 mirror solved a £35,000 engineering problem (and why you, a Product Founder, CTO or Head of R&D should care)
How fast can you go?
The Arrange/Act/Assert pattern
Testing is software engineering
How to review AI generated PRs
Giant Robots Podcast Ep 598: Animals and AI Accounting with Sam Landsberg
Turn Any Idea Into a Validated MVP
You cannot not lead
Querying encrypted data in Rails using Deterministic Encryption
Git 3.0 will use main as the default branch
We're a fully-remote company. Why host concurrent In-Person and Remote Summits?
AI in Focus: Pair programming with AI
Giant Robots Podcast Ep 597: Say Yes with Nick Merwin
Presenting at tiny ruby on Friday, November 21, 2025!
How to use LLMs without driving your team mad
My Favorite Mac VoiceOver commands
How to design a join code system
thoughtbot at Just Product 2025
Extending factory_bot with custom strategies at thoughtbot Open Summit
The Bike Shed Ep 480: The President's Doctor with Jared Turner
Rethinking CSS with Roux - debuting at thoughtbot Open Summit
Bridging the gap between Rails and React with Superglue at thoughtbot Open Summit
Announcing the thoughtbot Open Summit 2025 full schedule
Finding Your Niche as a Full Stack Designer
Putting our values to work: rethinking expenses
Giant Robots Podcast Ep 594: AI is Draining with Pablo Curell
Releasing v 1.0 of Administrate LIVE at thoughtbot Open Summit
Fear isn’t the enemy in teamwork — silence is.
New thoughtbot merch store just launched!
thoughtbot’s internal consulting course is now public
What sets thoughtbot designers apart?
🎙️ Free Resource: Product Design Sprint FigJam Template