
Julia López: Code Tells a Story—Even the White Spaces
02/25/25 • 50 min
How much can legacy code tell us beyond just functionality? Julia López, Senior Software Engineer at Harvest, believes that even small details—such as white spaces, variable names, and formatting choices—can reveal a system’s history.
In this episode, Julia and Robby discuss the importance of refactoring and how a strong engineering culture can make or break a team's ability to maintain and improve software over time. Julia shares her experience leading a multi-year overhaul of Harvest’s billing system, balancing stakeholder expectations while ensuring the rewrite delivered real value.
They explore how refactoring decisions evolve as teams grow, how to mentor newer developers to feel empowered to make changes, and why Julia doesn’t always trust her own estimations (for good reason). She also opens up about the complexities of transitioning a live billing system while supporting customers, finance teams, and engineering operations—all without disrupting payments.
Beyond technical decisions, they also dive into the challenges of communication in remote teams, the value of autonomy in software development, and how teams can make a case for technical debt reduction even when leadership isn’t prioritizing it. If you've ever struggled with refactoring legacy systems or advocating for improvements, this conversation is packed with practical lessons.
💡 Key Topics & Timestamps
- [00:00:22] Meet Julia López – Her background, role at Harvest, and passion for refactoring.
- [00:00:42] What Makes Software Maintainable? – A test suite you can trust and an engineering culture that values refactoring.
- [00:06:31] Leading Harvest’s Billing System Overhaul – Why a full rewrite made more sense than incremental improvements.
- [00:09:54] The Hidden Complexity of Billing Systems – Managing ACH, credit card, and invoice payments.
- [00:14:05] The Fear Factor in Large-Scale Refactoring – Why organizations hesitate and how to push forward.
- [00:18:47] Communication Challenges in Remote Teams – Why documentation and transparency matter beyond GitHub.
- [00:28:30] Finding and Enforcing Engineering Patterns – How teams can encourage consistency in a constantly evolving codebase.
- [00:35:45] Why Autonomy Matters for Developers – Learning through struggle and when to ask for help.
- [00:45:25] Advocating for Refactoring When Leadership Says No – Julia's approach: "Ask for forgiveness, not permission—but estimate higher."
🔗 Resources Mentioned
- Harvest – Julia's company
- Radical Candor by Kim Scott
- The Making of a Manager by Julie Zhuo
- Stripe – The payment processor used in Harvest’s billing system
- Git Blame – A tool for understanding code history
📢 Connect with Julia López
🍇Thanks to Our Sponsor!
Jelly is the simplest, most affordable way to deal with your “contact@...” emails.
Tired of sharing an email login, or CCing colleagues to loop them into conversations? Terrified by the dizzying total cost of big-name “customer support” tools? Jelly is the answer. Whether it's for customer support, community organizing, or even managing band emails, Jelly helps your team share an email inbox and manage your conversations in a simple, elegant way. Use the "I got this” feature to communicate responsibility, and private comments for internal discussions. Jelly is perfect for small teams — because it was built by a small team. And, Jelly is actually affordable —team-based pricing means everyone can pitch in with your team’s conversations with customers, clients and beyond.
Bonus for Maintai...
How much can legacy code tell us beyond just functionality? Julia López, Senior Software Engineer at Harvest, believes that even small details—such as white spaces, variable names, and formatting choices—can reveal a system’s history.
In this episode, Julia and Robby discuss the importance of refactoring and how a strong engineering culture can make or break a team's ability to maintain and improve software over time. Julia shares her experience leading a multi-year overhaul of Harvest’s billing system, balancing stakeholder expectations while ensuring the rewrite delivered real value.
They explore how refactoring decisions evolve as teams grow, how to mentor newer developers to feel empowered to make changes, and why Julia doesn’t always trust her own estimations (for good reason). She also opens up about the complexities of transitioning a live billing system while supporting customers, finance teams, and engineering operations—all without disrupting payments.
Beyond technical decisions, they also dive into the challenges of communication in remote teams, the value of autonomy in software development, and how teams can make a case for technical debt reduction even when leadership isn’t prioritizing it. If you've ever struggled with refactoring legacy systems or advocating for improvements, this conversation is packed with practical lessons.
💡 Key Topics & Timestamps
- [00:00:22] Meet Julia López – Her background, role at Harvest, and passion for refactoring.
- [00:00:42] What Makes Software Maintainable? – A test suite you can trust and an engineering culture that values refactoring.
- [00:06:31] Leading Harvest’s Billing System Overhaul – Why a full rewrite made more sense than incremental improvements.
- [00:09:54] The Hidden Complexity of Billing Systems – Managing ACH, credit card, and invoice payments.
- [00:14:05] The Fear Factor in Large-Scale Refactoring – Why organizations hesitate and how to push forward.
- [00:18:47] Communication Challenges in Remote Teams – Why documentation and transparency matter beyond GitHub.
- [00:28:30] Finding and Enforcing Engineering Patterns – How teams can encourage consistency in a constantly evolving codebase.
- [00:35:45] Why Autonomy Matters for Developers – Learning through struggle and when to ask for help.
- [00:45:25] Advocating for Refactoring When Leadership Says No – Julia's approach: "Ask for forgiveness, not permission—but estimate higher."
🔗 Resources Mentioned
- Harvest – Julia's company
- Radical Candor by Kim Scott
- The Making of a Manager by Julie Zhuo
- Stripe – The payment processor used in Harvest’s billing system
- Git Blame – A tool for understanding code history
📢 Connect with Julia López
🍇Thanks to Our Sponsor!
Jelly is the simplest, most affordable way to deal with your “contact@...” emails.
Tired of sharing an email login, or CCing colleagues to loop them into conversations? Terrified by the dizzying total cost of big-name “customer support” tools? Jelly is the answer. Whether it's for customer support, community organizing, or even managing band emails, Jelly helps your team share an email inbox and manage your conversations in a simple, elegant way. Use the "I got this” feature to communicate responsibility, and private comments for internal discussions. Jelly is perfect for small teams — because it was built by a small team. And, Jelly is actually affordable —team-based pricing means everyone can pitch in with your team’s conversations with customers, clients and beyond.
Bonus for Maintai...
Previous Episode

Marty Haught: Rethinking Technical Debt—Is It Really Just Drift?
Episode Overview
Marty Haught joins Robby to discuss the sustainability of open-source projects, the challenges of maintaining RubyGems, and why the metaphor of technical debt may not fully capture how software ages. Instead, he suggests thinking of it as drift—the natural misalignment of software with its evolving purpose over time.
They also dig into security challenges in package management, including how Ruby Central worked with Trail of Bits to audit RubyGems. Marty also shares insights on the EU Cyber Resilience Act and how it might affect open-source maintainers worldwide. Finally, they explore how companies can support open-source sustainability through corporate sponsorships and individual contributions.
Topics Discussed
- [00:01:00] The two pillars of maintainable software: good tests and readability.
- [00:02:40] From Perl to Ruby: How readability changed Marty's approach to programming.
- [00:07:20] Is technical debt the right metaphor? Why "drift" might be a better fit.
- [00:11:00] What does it take to maintain RubyGems? Marty's role at Ruby Central.
- [00:14:00] Security in package management: How RubyGems handles vulnerabilities.
- [00:16:40] The role of external audits: Partnering with Trail of Bits for security improvements.
- [00:20:40] EU Cyber Resilience Act: How new regulations might affect open-source projects.
- [00:34:00] Funding open source: Why corporate sponsorships are becoming essential.
- [00:38:20] Processes in distributed teams: Balancing structure with flexibility.
- [00:44:45] Advocating for technical debt work in teams: How to make a compelling case.
Key Takeaways
- Technical debt is often misunderstood. The real issue may not be shortcuts taken in the past, but the way software naturally drifts from its original purpose.
- Security in package management is a growing concern. Open-source ecosystems like RubyGems require continuous investment to remain secure.
- Open source needs sustainable funding. Relying on volunteers is not a long-term solution—companies need to contribute via corporate sponsorships.
- Advocating for code improvements requires strategy. Engineers should frame technical debt discussions around business impact, not just code quality.
Resources Mentioned
- Marty Haught on LinkedIn
- Marty Haught on Twitter
- Ruby Central
- RubyGems
- Auditing the Ruby Ecosystem’s Central Package Repository – Trail of Bits
- EU Cyber Resilience Act Overview
- What the EU's New Software Legislation Means for Developers (GitHub Blog)
- Ruby Central Open Source Program – Get Involved
- Corporate Sponsors Program
- Give and Take by Adam Grant
Connect with Marty
Next Episode

Noémi Ványi: Only Fix Problems That Are Actually Problems
Not every messy piece of code needs a refactor. Noémi Ványi, Senior Software Engineer at Xata, joins Robby to discuss how to develop the intuition to know when refactoring is truly necessary and when it’s just unnecessary churn. She shares her approach to balancing pragmatism and maintainability, how product teams and developers can work better together, and why developer autonomy is key to sustainable software.
Drawing from her experience working on both open-source and closed-source projects, Noémi reflects on the unique challenges each presents—whether it's dealing with unresponsive GitHub issue reporters, handling unanticipated user behaviors, or navigating large-scale refactors in existing systems. She also shares her philosophy on technical debt: not all of it needs to be paid down, and some of it can actually be strategic.
Robby and Noémi also explore the importance of writing meaningful commit messages, the hidden benefits of reviewing open-source pull requests, and why developers should stop waiting for permission to clean up their codebases.
Episode Highlights
- [00:01:00] The characteristics of well-maintained software: modular design, good tests, and observability.
- [00:02:00] Open source vs. closed source software: Why communication matters more than you think.
- [00:04:50] Not all technical debt is worth paying down—how to decide when to refactor.
- [00:06:20] Developing engineering intuition: How experience shapes decision-making.
- [00:11:08] Lessons from refactoring a log processing system at Elastic.
- [00:17:09] Strategies for modernizing legacy systems without unnecessary rewrites.
- [00:19:52] Why maintainability is a business requirement, not an afterthought.
- [00:24:03] Should developers ask for permission to clean up code or just do it?
- [00:27:00] The impact of good commit messages and pull request documentation (GitHub PR Templates).
- [00:30:00] Are issue templates in open source a helpful guardrail or a barrier?
- [00:32:00] How to gain autonomy as a developer and advocate for technical improvements.
- [00:39:00] Noémi’s advice: Only fix problems that are actually problems.
Resources Mentioned
Book Recommendation
Lost in Thought: The Hidden Pleasures of an Intellectual Life by Zena Hitz
🍇Thanks to Our Sponsor!
Jelly is the simplest, most affordable way to deal with your “contact@...” emails.
Tired of sharing an email login, or CCing colleagues to loop them into conversations? Terrified by the dizzying total cost of big-name “customer support” tools? Jelly is the answer. Whether it's for customer support, community organizing, or even managing band emails, Jelly helps your team share an email inbox and manage your conversations in a simple, elegant way. Use the "I got this” feature to communicate responsibility and private comments for internal discussions. Jelly is perfect for small teams — because it was built by a small team. And Jelly is actually affordable —team-based pricing means everyone can pitch in with your team’s conversations with customers, clients, and beyond.
Bonus for Maintainable listeners Get ...
If you like this episode you’ll love
Episode Comments
Generate a badge
Get a badge for your website that links back to this episode
<a href="https://goodpods.com/podcasts/maintainable-333012/julia-l%c3%b3pez-code-tells-a-storyeven-the-white-spaces-86198862"> <img src="https://storage.googleapis.com/goodpods-images-bucket/badges/generic-badge-1.svg" alt="listen to julia lópez: code tells a story—even the white spaces on goodpods" style="width: 225px" /> </a>
Copy