All blogs / Software / engineering practice
Test Double
Explore our blog for software developers, product managers, and tech leaders. Find favorite tools, quick tutorials, and opinionated hot takes on tech trends.
Software / engineering practiceTesting / QAEngineering management / careersAI / ML
- Posts
- 421 from 12 Nov 2013 to 29 Oct 2026
- Posting
- monthly (15 in the last year)
- Kind
- company blog
2026 14
- Developers Developers Developers Accelerate your understanding of unfamiliar code with AI AI makes exploring unfamiliar code faster than ever, but speed isn't understanding. Discover how to bridge the gap and truly master a new codebase in Part 1 of this 5-part series. River Lynn Bailey
- Developers Developers Developers How did I write this blog post? 4 days, 210 commits, and 17 pull requests - the story of how I wrote this post, and prototyped a new Claude Code skill, lives in these details. River Lynn Bailey AI
- Leadership Leadership Leadership Should you replace Salesforce, or keep paying for it? Todd Kaufman Maximize software investment
- Developers Developers Developers Horizontal Progression for Software Dave Mosher AI
- Developers Developers Developers AI tooling may have solved coding, but not solutions delivery River Lynn Bailey AI
- Developers Developers Developers Defend your downtime to improve agentic output With agentic tools writing code, it feels natural to fill the waiting time by reaching for the next task. Before you do, though, have you considered what you might be losing by trying to parallelize more work? River Bail
- Developers Developers Developers What Feels Easy Might Be Your Greatest Strength We often mistake effort for value. By combining feedback, work history, and AI, James Walker discovered that the work that felt easiest was often what others valued most. James Walker Recruiting & careers
- Developers Developers Developers Agentic Tooling as Accessibility Most organizations expect agentic tooling to greatly increase the speed at which we write code. But there's another benefit in this new world that may not get as much as attention as it deserves: accessibility. River Bailey looks at h
- Leadership Leadership Leadership After the tests pass Engineers are great at testing correctness. Far fewer teams know how to measure whether their code is actually performing well once it's in production. Jed Schneider Accelerate quality software
- Developers Developers Developers Lay the Foundation Before You Reach for Advanced Agentic Tooling Is your code ready for advanced agentic tooling? River Bailey explores the foundational practices that help both humans and AI amplify good work, and avoid repeating the existing problems. River Lynn Ba
- Developers Developers Developers A practical guide to Firebase Emulator for local dev and Cypress testing Setting up Firebase Emulator to work with local dev, Cypress, CI, and Claude Code—what works, what doesn’t, and edge cases to watch out for. Robert Komaromi Software tooling & tips
- Developers Developers Developers AI Should Give Us Our Lives Back, Not Fill Them With More Work What do you do with the time saved using AI? River Bailey explores multiple threads while exploring the possibilities. River Lynn Bailey Software tooling & tips
- Leadership Leadership Leadership Distributed process ownership eliminates team bottlenecks Process ownership concentrated in a few hands creates invisible organizational drag. When distributed across the team, it eliminates bottlenecks, improves delivery, and frees leaders to do higher-value work. S
- AI amplifies everything (including what's broken). Start there.
2025 15
- Anyone can code: Software Is having its Ratatouille moment
- 5 rules to avoid the 95% AI project failure rate
- AI in the workforce: A shifting talent equation
- Build common (virtual) ground with unstructured remote calls
- C# and .NET tools and libraries for the modern developer
- Build with HTMX: Simplify development with a return to fundamentals
- Building software teams that manage mistakes rather than rejecting them
- 16 things you believe about software from Justin Searls' survey
- You build it. You own it. Test Double’s ESOP explained.
- Audentes Fortuna Iuvat: being bold amidst uncertainty
- Developer QA checklist for feature releases
- Developers need more context than you think they do. Here’s why.
- Beyond MVP: Why your most valuable tactic matters
- Think the customer is always right? Think again
- Critical choice, tight deadline? How we deliver speed and quality
2024 17
- Before deploying AI tools to your engineering team: A leadership readiness assessment
- New survey: How AI is already transforming product management
- Should you abstract away third-party vendors in your code?
- 7 big takeaways from CIO Tomorrow that every CIO should know
- Say hello to azure-blob: The new Ruby gem for Azure storage
- Stop shipping features. Start driving impact.
- CapEx vs. OpEx: A guide for VP of Engineering to software budgeting
- DataConnect 2024: Telling the data story
- Consultants aren't as expensive as you think
- Why your organization needs to shift from certainty to clarity
- A developer's review of CoPilot
- Unlock TypeScript conditional types for better code
- 14 tools every Ruby developer will love for performance and debugging"
- Unlock your potential: 5 lessons from a seasoned software consultant
- A plea for lean and efficient software development
- Best practices for remote team collaboration, video calls
- Must-have tools to supercharge your Python development
2023 14
- What the heck is Data as a Product?
- A quick way to automate Ruby releases
- Avoid the hockey stick problem in project management
- Harness your career transition into tech as a superpower
- How to spot and fix common recruitment anti-patterns
- Enhancing meeting productivity with varied agendas
- How we built a new lint rule for React Testing Library
- Creating powerful linting rules for better React code
- The end of legacy code
- How my experience as an engineer made me a better recruiter
- How to tell if AI threatens YOUR job
- How a supportive buddy can transform your remote onboarding experience
- Side project success: 4 tips to stay focused and motivated
- Effective and easy strategies to hate bugs a little less
2022 28
- Avoiding glue gems in Rails upgrades
- How to add deep links to your React Native app
- Building a linkblog with Hugo, Tailwind and Netlify
- Exploring the secrets of effective software consulting
- Lessons learned in type safety: TypeScript, Remix & Prisma
- Double Agent Profile: Eric Newbury
- Simplify your Rails app with email-based passwordless authentication
- Double Agent Profile: Cliff Pruitt
- Double Agent Profile: Pier-Luc Faucher
- Our ultimate reading list for software consultants
- A better way to sort Ruby objects: How our Put gem makes sorting by multiple conditions easy
- Double Agent Profile: Eve Ragins
- How to boost product development through collaboration
- Debugging Ruby on Rails with Visual Studio Code
- Double Agent Profile: Robby Thompson
- Boost performance and cut costs with Elixir and Erlang
- Double Agent Profile: Sukhraj Singh
- Double Agent Profile: James Walker
- How remote work boosts inclusion and equity
- Double Agent Profile: Kyle Adams
- Why I love adversarial testing: turning unit tests into a battle
- Paying it forward
- Boost your development speed with mocking callbacks
- How to create powerful APIs with GraphQL and Elixir
- How to fake time in a Postgres database
- Mastering architecture decision records: your team's secret weapon
- Video Series: End-to-end testing with Cypress
- Ending salary negotiations: A step toward true equity
2021 26
- Double Agent Profile: Justin Schoen
- Estimating software is hard: How, why, don't
- Track campaign analytics without leaving a mess for your users
- Double Agent Profile: Sam Jones
- Take control of your privacy: How to DeGoogle your phone
- Double Agent Profile: Anya Iverova
- Why hiring junior developers can transform your team
- Double Agent Profile: Glenn Harmon
- Discover your path: product engineering vs. consulting
- Double Agent Profile: Viral Patel
- Double Agent Profile: Daniel Flynn
- Double Agent Profile: Steve Jackson
- 4 reasons why being a software consultant is the best career move
- Double Agent Profile: Ali Ibrahim
- Track your Ruby code's time with the new time_up gem
- Double Agent Profile: Minnie Lee
- Double Agent Profile: Joel Helbling
- Double Agent Profile: Jennifer Konikowski
- Double Agent Profile: Neal Lindsay
- Why we switched from DEI to EDI
- Double Agent Profile: Alex Martin
- Double Agent Profile: Marla Brizel Zeschin
- Double Agent Profile: Jessie Puls
- Double Agent Profile: Landon Gray
- The best interview process ever for senior software engineers
- Navigating the build vs. buy dilemma for OAuth in Ruby
2020 7
- Taming deprecations: Rails 6.1's game-changing feature
- Effective pull request reviews boost team collaboration
- Empower your activism: A developer’s guide to making real change
- Debugging React routing
- Boost your productivity with these essential command-line tools
- Thriving in remote work: Tips to boost your team's productivity
- Cypress vs. Capybara
2019 9
- A first look at migrating to GitHub Actions from Travis CI
- Mastering Heroku Postgres backups: your complete guide
- Transform your React apps with the Model View Controller pattern
- 3 keys to upgrading Rails with minimal risk and disruption
- CSS: the visual state machine
- Are you really ready for serverless? Find out now!
- Abusing promises as a locking mechanism in JavaScript
- Why NoOps might be the future
- Building and deploying Node.js projects on Raspberry Pi made easy
2018 3
2017 7
- How to manage conditionals in code effectively
- Agent Dossier: Brittany Moore
- Explore the power of tmux and tmate for teamwork
- Boost your app's accessibility: essential techniques for seamless navigation
- Accessibility benefits everyone: boost usability with simple changes
- Testdouble.js 2.0: JavaScript’s ultimate mocking library just got better
- Crafting an interactive pie graph: The power duo of React and D3
2016 4
2015 3
2014 3
2013 1
Undated 270
- Field report all things ai
- Field report rails world 2025
- Field report rubykaigi
- Field report the final strange loop
- Financial terms every vp of engineering should know
- Finding joy at work
- Forecasting the future
- From engineer to consultant the powerful shift from inward to outward focus
- From resistance to results why agentic coding requires a new mindset
- Functionally zen
- Get in the box illustrated permissions guide to make claude chill
- Ghost engineers root cause fix
- Github actions terraform automation
- Github shortcuts to speed up prs
- Going to eleven
- Good teams ship great products great teams kill bad ones
- Great company cultures hold people accountable
- Guide advanced line graphs in react with mui x charts
- Guide to react component in the mui design system
- Handling herokus new heroku ext schema for postgres extensions
- Happier tdd with testdouble js
- Healthcare software teams keep fixing symptoms real problems run deeper
- How a product leadership transformation drove 3x sales growth
- How an early stage startup engineering team improved the bottom line fast
- How developers ask why are we building this feature
- How i use test doubles
- How id start a legacy modernization project now
- How modern frontend teams approach automated testing
- How product management unlocks business value and maximizes roi
- How standard ruby updates its rules
- How test data speeds up rails tests
- How test doubles interview process improves developer experience
- How to balance software architecture goals with limited resources
- How to build a documentation companion with claude skills six lessons from the field
- How to build a search engine with ruby on rails
- How to completely uninstall and reinstall homebrew postgres
- How to debug dependencies with git bisect
- How to find and remove dead css
- How to jump into new technology roles confidently
- How to launch on aws cloud without devops team
- How to listen well and offer emotional support in crisis
- How to make a gem of a gem
- How to program
- How to recruit the best product talent
- How to run effective retrospectives for teams
- How to scratch an itch
- How to shift focus from symptoms to build stronger healthcare software systems
- How to start speaking at conferences
- How to stop hating your tests
- How to synchronize json date formats for accurate data comparison
- How to test auth flows with playwright and next js
- How to trust again
- How we delivered fast api integration
- Humility in software engineering
- Implementing rubocop consensus building
- Importance of diagrams communicating ideas
- Improving app performance trucking industry
- Improving database schema without downtime
- In the age of ai were in this together
- Indypy talk pydantically perfect in every way
- Integrating rust with unity for better performance
- Intent isnt enough the impact of language in tech
- Interview questions software developer consultants
- Interview them where they are
- Introducing gem dating for ruby upgrades
- Introducing good migrations ruby gem
- Introducing han a research plan and implement plugin without the rails
- Javascript testing tactics
- Javascript testing tactics lightning edition
- Jest timers vs waitfor debounced inputs
- Keep ruby weird again
- Keep your coding agent on task with mutation testing
- Law of demeter explained
- Legacy systems and delivery pressure symptoms healthcare tech teams keep treating
- Lessons from luddites automate with intention
- Lets standardize rails
- Life after nil
- Listening for better tech recruitment
- Llmallard the low key ai chat bot you secretly need
- Looking for failure
- Low code no code platforms guide
- Make ruby great again
- Makefile usability tips for new developers
- Manage rails schema changes easily
- Managing git blame with ignore revs
- Managing legacy code rewrite vs renovate
- Managing ruby hashes and rails upgrades
- Managing ssh authentication with tmux
- Managing technical debt vs credit card debt
- Master pitch writing shape up
- Mastering automated refactoring tools a practical guide
- Mastering macro machine
- Matt jones on elixir and how to help support open source
- Maximizing value conference talks
- Migrating from mongodb to postgresql in rails
- Migrating legacy apis to serverless with aws
- Misconfigured aws s3 security breach prevention
- Mock objects in discovery tests
- Moving from angularjs to angular
- Natural sorting postgres collation
- Necessary sufficient
- Never staff to the peak
- Office politics
- Offshore software consulting risks
- Optimized rails enums with postgres
- Optimizing activerecord migrations for rails
- Optimizing ci cd with circleci for data engineering
- Optimizing code slides for clear presentations in keynote
- Optimizing docker builds for faster cloud deployments
- Optimizing rails forms with tailwind
- Optimizing software adoption lessons from beos
- Organizational observability the ai alignment problem starts upstream
- Outputs are cheap being wrong isnt
- Phoenix liveview without javascript
- Plant your flag reflecting on career growth
- Please dont mock me
- Please mock me
- Podcast an aberrant generation of programmers
- Podcast dont sleep on ruby and rails
- Policy update were still remote
- Power up scripts for rails apps part 3 kubernetes
- Power up with rails scripts part 1 environment setup
- Power up with rails scripts part 2 docker
- Practical security strategies for developers
- Practical tips to improve empathy
- Pragmatic approaches to agentic coding for engineering leaders
- Preparing effective tech conference talks
- Preventing burnout in software consulting
- Pride month learning and sharing lgbtq experiences
- Product leadership challenges networking
- Product management for business growth
- Product management restraint why less delivers more
- Profile river lynn bailey
- Programming flutter book updates and error handling
- Pydantically perfect a beginners guide to pydantic for python type safety
- Pydantically perfect declare rich validation rules
- Pydantically perfect normalize legacy data in python
- Pydantically perfect seamlessly handle non pythonic naming conventions
- Quality you cant generate ai is only as good as your constraints
- Rails 8 0 beta just dropped heres whats new and why it matters
- Rails aws elastic beanstalk setup
- Rails forms non active record objects
- Rails upgrade bug fixes and security support ending soon
- Rails upgrade deprecation warnings guide
- Rails upgrade dual boot docker setup
- Rails upgrade guide to incremental changes
- Rails upgrades hidden costs
- Rails world eileen uchitelle team culture over architecture
- Ransomware attack response turned software innovation
- Ratcheting to zero how incremental constraints eliminate technical debt
- React code style recommendations
- React component conditional rendering tactics
- React context for dependency injection not state management
- React data flow dom integration
- React forms complexity and user experience
- React project structure guide
- React query optimizing state management
- Red green refactor your context
- Refactoring best practices extracting functions
- Reflection on going back home ukraine
- Regular brainstorming for product innovation
- Regulatory compliance leads to high quality software
- Remembering chris seaton ruby community legacy
- Restitching the internet the robots were here the whole time
- Rethink tdd teaching strategies
- Return to office mandates impact
- Ruby standard config
- Rubyconf 2017 nothing new resource list
- Running a business demystified
- Rust unity zero copy ffi guide
- Self hosting vs cloud services comparison
- Setting up a new mac for development
- Shape up vs tdd for project management
- Shared understanding
- Should code review be mandatory non blocking review
- Simplify software setup with nix and devenv
- Simplifying crud operations in elixir with ectorresource
- Smaller development teams efficiency
- Software consulting phases for successful client engagement
- Software engineering and ai finding the plot again
- Software engineers communication skills
- Software innovation and why domain expertise is overrated
- Solving the boolean identity crisis
- Sometimes a controller is just a controller
- Speed is a side effect of making the system work
- Speed up your rails app with upsert all
- Starting your consulting journey at test double
- Stop chasing the perfect jira ticket
- Stop paying tech debts start maintaining code
- Story points alternatives
- Strengths of black business leaders
- Super performant new roc language
- Surgical refactors with suture
- Sustainable learning
- Symptoms to solutions biggest software challenges for healthcare in 2026
- Tame the frontend with elm
- Tech assessment turns uncertainty into roadmap
- Test double consulting roles responsibilities
- Test double las vegas retreat
- Test double poc erg first year achievements
- Test double way building great software teams
- Testdouble vs sinon js comparing javascript testing libraries
- Testing environment variables ruby
- Testing esm with mocha and testdouble js
- Testing json with node functional streams
- Testing logging in node js with tdd
- The anvil of alignment the value of monoliths over microservices
- The arab american story a silent minority
- The business of ai solve real problems for real people
- The human signal is getting lost in recruitment and it matters more than ever
- The impact of ai on software industry economics
- The looming demise of the 10x developer
- The moat is made of people
- The myth of industrializing software engineering
- The parable of the failing test
- The root causes healthcare teams overlook siloed data and misaligned priorities
- The selfish programmer
- The shockingly simple math for why we need test automation
- The slippery slope of docker dev environments
- The social coding contract
- The tldr on rubys new tldr testing framework
- Things i wish i knew before going remote
- This has happened before its happening again
- Three amigos with ai stop building the wrong thing faster
- Thruster vs kamal proxy guide
- Transitioning from javascript to go experiences
- Truth tables in software development
- Turn lagging statistics into leading indicators
- Turning observability into a team strength without a big overhaul
- Type safety at runtime with zod
- Under pressure
- Understanding bikeshedding in tech leadership
- Understanding code boundaries and seams
- Understanding legacy application rewrite vs refactor tradeoffs
- Unrequired love a discussion on javascript and dependency management
- Using cockroachdb with rails
- Using foreman and overmind for efficient web app development
- Virtual machines portability sustainability
- Vs code ruby extension performance tips
- Web vs native mobile apps which is better
- Were about to unwind fifty years of progress
- What does good code even mean now
- What i learned from pairing by default
- What is a meta programmer
- What is legacy software in the age of ai
- What it takes to keep humans in the lead with ai
- What its like to work as a consultant at test double
- What we ask in our equity diversity and inclusion edi interviews
- When code reviews arent mandatory
- When offshore software is cheaper and when its risky
- When playing it safe is the riskiest move
- Why 100 remote works for working parents
- Why edi work is super important to test double
- Why fixed bids fail more equitable approach software consulting contract
- Why hiring more developers costs more than you think
- Why i actually enjoy pr reviews and you should too
- Why its worth outsourcing your rails upgrades
- Why lineman js failed lessons
- Why modern engineering practices make business sense
- Why our hiring process is focused on value alignment
- Why product managers accelerate improve software delivery
- Why product operating model transformations stall and what to do first
- Why quality software is expensive to build
- Why rails upgrades are so important
- Why use git large file storage
- Why we coach the system not just the team
- Why were not chasing the ai hype and what were doing instead
- Write cleaner self documented tests by defining methods in rspec
- Youre holding it wrong the double loop model for agentic coding
- Zero downtime rails upgrades