At our May Code, Craft, Community (C3) meetup, we explored a challenge that felt increasingly relevant in today's AI-assisted development landscape: how do developers recognize good code when the tests already pass?
Using Emily Bache's Tennis Refactoring Kata, attendees worked through a realistic consulting scenario where the implementation technically worked, but still contained code smells, maintainability concerns, and opportunities for improvement. Rather than focusing on shipping features as quickly as possible, the evening centered on reading carefully, communicating clearly, and collaboratively improving an inherited codebase.
The Kata: Refactoring Beyond "Working Code"
The Tennis Refactoring Kata gave participants a deliberately imperfect application with an existing test suite already in place. The challenge wasn't to build something from scratch, but rather it was to evaluate someone else's decisions and determine how to safely improve the design without breaking functionality.
Participants paired up and worked in small groups to:
- Identify code smells and areas of technical debt
- Discuss tradeoffs around readability and maintainability
- Refactor safely while keeping the test suite green
- Compare approaches and explain design decisions
- Practice communication skills commonly needed during code review
The exercise naturally led to conversations about naming, duplication, conditionals, separation of concerns, and the balance between "clever" solutions and maintainable ones.
Why This Matters in the Age of AI
One of the biggest themes of the night was that passing tests doesn't automatically equal quality software.
As AI-generated code becomes more common, developers are increasingly expected to evaluate code critically rather than simply produce it. Many of the code smells participants uncovered during the kata mirrored patterns often found in AI-assisted implementations:
- Overly complex conditional logic
- Duplication hidden behind slightly different implementations
- Naming that technically works but obscures intent
- Designs that pass tests while remaining difficult to understand or extend
Importantly, this meetup was intentionally AI-free.
Rather than using AI tools directly, the focus was on strengthening the human skills needed to responsibly review, critique, and improve generated code. The evening reinforced an important idea: the more code generation becomes automated, the more valuable engineering judgment becomes.
Better Together
As with previous C3 meetups, collaboration mattered more than arriving at a single "correct" answer.
Developers with different levels of experience paired together to compare strategies, discuss tradeoffs, and reflect on how small design decisions affect long-term maintainability. Some groups focused on simplifying logic. Others emphasized readability and intent-revealing names. Several teams discovered entirely different approaches that still preserved the behavior of the application.
The discussions throughout the evening often became more valuable than the code itself.
Participants talked about:
- When refactoring effort is worth the investment
- How to communicate feedback constructively during code review
- The relationship between technical debt and business priorities
- How teams can build confidence when modifying unfamiliar systems
- Why maintainability is difficult to measure but impossible to ignore
Practicing the Craft
One of the recurring ideas behind C3 is that developers rarely get dedicated time to practice.
Much like musicians' rehearsing scales or athletes running drills, software developers benefit from intentionally practicing skills outside the pressure of production deadlines. The Tennis Refactoring Kata providedan opportunity to slow down and focus on craftsmanship, communication, and collaborative problem solving.
A huge thank you to Emily Bache for creating and sharing the Tennis Refactoring Kata and thank you to everyone who joined us for another evening focused on code, craft, and community.
We also announced an upcoming scheduling change for C3 meetups. Going forward, C3 will now meet on the 4th Wednesday of each month to better coordinate with other Ingage-hosted meetups and community events throughout the month.
If you'd like to stay informed about future meetups, announcements, and event details, follow the C3 Meetup group here: https://www.meetup.com/c3-code-craft-community/ or join our Discord server.
We hope to see you at a future session as we continue practicing, discussing, and improving together.



