Skip to main content
Test Double company logo
Services
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Management
Launch modern product orgs
Legacy Modernization
Renovate legacy software systems
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Technical Assessments
Uncover root causes & improvements
Case Studies
Solutions
Accelerate Quality Software
Software Delivery, DevOps, & Product Delivery
Maximize Software Investments
Product Performance, Product Scaling, & Technical Assessments
Future-Proof Innovative Software
Legacy Modernization, Product Transformation, Upgrade Rails, Technical Recruitment
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say Hello
Test Double logo
Menu
Services
BackGrid of dots icon
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Management
Launch modern product orgs
Legacy Modernization
Renovate legacy software systems
Cycle icon
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Technical Assessments
Uncover root causes & improvements
Case Studies
Solutions
Solutions
Accelerate Quality Software
Software Delivery, DevOps, & Product Delivery
Maximize Software Investments
Product Performance, Product Scaling, & Technical Assessments
Future-Proof Innovative Software
Legacy Modernization, Product Transformation, Upgrade Rails, Technical Recruitment
About
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say hello
Developers
Developers
Developers
Legacy rescue

Tired of outdated gems? Discover gem_dating and simplify your Ruby upgrade

Steve Jackson
Daniel Huss
|
July 23, 2023
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Have you ever wondered just how out of date your dependencies are? Does your bundle not, well, bundle? Well do we have the gem for you!

While Double Agents Steve Jackson and Daniel Huss both dated gems (the happily married guys they are), gem_dating is helpful to spot rough patches in a Ruby upgrade by showing how long it’s been since a gem received any attention.

If you’re interested in the gem, head over to the repo to see the details. If you’re curious about how Test Double’s agents find ways to collaborate, serve our clients, and share with the open source community, read on.

How we work

Recently Steve had a brief stint on “The Bench,” which is where our agents land when we’re between deployment to client engagements. We manage the ebbs and flows of project work so our clients don’t have to staff to the peak. For Double Agents, heading to the bench can mean a great opportunity to take time off to recharge between engagements. Though, not always.

We’re always looking for ways of working that naturally encourage collaboration.

Test Double’s greatest asset is our people, so we don’t lay anyone off between engagements, or force them to take holidays. Instead we value the time between engagements as a chance to grow, learn, and share with the communities we are a part of. That could be sharpening individual skills, contributing to something internally, or collaborating with others to problem solve in an area of interest or expertise.

When our agents are at a client, it can be a challenge to find ways to collaborate with others on different engagements. Sharing knowledge among our team is the biggest hidden perk we offer our clients, who have access to the expertise of our whole team via their deployed agents. We always look for ways of working that naturally encourage collaboration.

The best is when bench time helps our agents’ growth, serves our clients, and contributes to the communities we’re in. It doesn’t always work that way, but the way gem_dating came to be is a great example of how all three can come together.

Screenshot of a Slack thread. Message from Steve: Any chance someone has a tool that will take a Gemfile and print out latest release version with dates? I'm trying to figure out how many gems might be problematic during a ruby upgrade because they haven't been updated in X years.
 

The first thing suggested by other agents was bundle outdated, the bundler command that shows which gems have newer versions available. Unfortunately for this use case, bundle outdated may be misleading if a gem was abandoned years ago, and is technically up to date. If the Gemfile.lock is missing, or has a particularly outdated set of gems that makes bundling very un-fun, that also makes bundle outdated harder to work with. The gemfile may be full of vendored gems, local engines, privately-hosted gems, or other bundle-blockers, which makes it an outright unideal answer.

The Test Double team wasn’t able to come up with an answer for Steve, so he took advantage of his bench time to get the bare bones of gem_dating implemented.

Naturally the easiest part came next: naming the gem!

How to name things?

Screenshot of a Slack thread. Message from Steve: gemage is open. It looks like almost a word. Oh what about a play on how they date rocks
 
Screenshot of a Slack thread. Message from Daniel: radiogenic-isotope-analyses is a bit of a mouthful, but what about rubiogenic
 
Screenshot of a Slack thread. Message from Steve: I can't wait to be responsible for that conversation - "oh there's a library that does this...what was it called? It was a really stupid name"
 

If you’re enjoying the sneak peak of our Slack, and how we talk about software, you might also be interested in this NEAT thing where we talk about naming, as well as all sorts of things not necessarily related to technology.

Screenshot of a Slack thread. Message from Steve: I do like bundle-dating. I think that makes me think it's a bundler plugin. Which I suppose I can do, but it'll mostly be cheating as my use case is that I don't have a "built bundle." Is that too misleading? gem-dating is also available. I suppose it could be multiple modes as well, like if there's a Gemfile.lock use bundler resolutions, if not fall back to the hack-y way. Message from Josh: I would resist the pressure to engineer something more than what your use case required just because a name pushed you that direction. (Unless it seems like the name uncovers "it really should be that way," and yet, both approaches sound like they're valid in your view.) gem-dating makes sense to me. Message from Ross: Yeah, gem-dating is still good! Message from Steve: gem-dating MVP then bundler-dating after 10M IPO. Got it!
 

Getting any solution to a problem off the ground has a lot of obstacles. A common blocker is the desire to polish to perfection. As tinkerers and professionals, we always want to show off our best work. Striving for our work to be polished on first draft is the antithesis to positive momentum.

If it’s hiding in your private repo, it’s more likely to drift to the background, forgotten. That said, putting the unpolished work out there requires trust. To build collaboration it’s critical to cultivate a space where “expertise” is not synonymous with “always perfect.” While Double Agents are, without a doubt, experts at any variety of tools, technologies, and skills, none of us hold any illusion that we’re infallible and have every single answer.

By talking publicly about his original problem, Steve got confirmation that:

  • this is an interesting problem
  • none of us knew of a solution that fit his needs
  • others of us would find this useful for our clients

Sharing the problem on Slack meant a whole bunch of us got to have fun discussing options, honing in on what the problem was, and opened space to say “I wish this was real.” That caught Steve into a positive momentum loop. Armed with confidence that the problem was novel and warranted a unique solution, Steve chose to make the solution accessible in a public repo. Knowing you’ve got others who are keen to try out a tool you’re building is a great way to get momentum going. In turn, Daniel got caught in the momentum loop by trying the tool out and thinking “I wish this had a command line tool so I could just point it at my gemfile.” So he did!

If you’re facing down a Ruby upgrade, gem_dating may help put texture to the lumpy bits of the process. There’s a whole other blog post waiting to be written about the ways dependencies can make upgrades a whole lot more complex. If that complex upgrade is holding you back, Test Double can help.

If you want to talk about gem_dating, upgrades, or other challenges with Legacy Code, feel free to send Daniel an email!

Related Insights

🔗
Zero downtime Rails upgrades
🔗
Guide to incremental Rails upgrades for smoother transitions
🔗
Why it’s worth outsourcing your Rails upgrades

Explore our insights

See all insights
Leadership
Leadership
Leadership
Why we coach the system, not just the team

Slow delivery isn’t usually about your people—it’s about your system. Shifting focus to incremental improvements in the system helps change not just processes but behaviors for lasting change.

by
Doc Norton
Developers
Developers
Developers
Developer QA checklist for feature releases

Quality Assurance is a mindset integrated throughout development to catch issues early, build user trust, and reduce maintenance costs. These recommended procedures for dev teams without dedicated QA roles establish collective responsibility for ensuring feature stability, functionality, and usability before release.

by
Lee Quarella
Developers
Developers
Developers
From engineer to consultant: The powerful shift from inward to outward focus

What transforms a skilled software engineer into an exceptional consultant? Approach new codebases with respect rather than judgment, embrace constraints as creative boundaries, and prioritize client needs over personal preferences.

by
Dave Mosher
Letter art spelling out NEAT

Join the conversation

Technology is a means to an end: answers to very human questions. That’s why we created a community for developers and product managers.

Explore the community
Test Double Executive Leadership Team

Learn about our team

Like what we have to say about building great software and great teams?

Get to know us
No items found.
Test Double company logo
Improving the way the world builds software.
What we do
Services OverviewSoftware DeliveryProduct ManagementLegacy ModernizationDevOpsUpgrade RailsTechnical RecruitmentTechnical Assessments
Who WE ARE
About UsCulture & CareersGreat CausesEDIOur TeamContact UsNews & AwardsN.E.A.T.
Resources
Case StudiesAll InsightsLeadership InsightsDeveloper InsightsProduct InsightsPairing & Office Hours
NEWSLETTER
Sign up hear about our latest innovations.
Your email has been added!
Oops! Something went wrong while submitting the form.
Standard Ruby badge
614.349.4279hello@testdouble.com
Privacy Policy
© 2020 Test Double. All Rights Reserved.