Maintainable

Active
Has guests
Robby Russell
Categories
Technology Business Careers
Audience & Performance Metrics
735 - 1.2K listeners Neutral 5.0 rating 49 reviews 211 episodes USA
Monetization Metrics
30s Ad: $25 - $30 60s Ad: $29 - $35 CPM Category: Technology
Socials metrics & links
Podcast Links
Do you feel like you're hitting a wall with your existing software projects? Are you curious to hear how other people are navigating this? You're not alone.

On the Maintainable Software Podcast, Robby speaks with seasoned practitioners who have overcome the technical and cultural problems often associated with software development.

Our guests will share stories in each episode and outline tangible, real-world approaches to software challenges. In turn, you'll uncover new ways of thinking about how to improve your software project's maintainability.

Producers, Hosts, and Production Team

No producer information available yet. Click "Find producers" to search for the production team.

Emails, Phones, and Addresses

Contact Page Emails

Emails
Phone Numbers

No phone numbers found.

Addresses

No addresses found.

Form

No form detected on this page.

General Website Emails

No website emails found.

Externally Sourced Emails

No external emails found.

RSS Emails

Recent Hosts, Guests & Topics

Here's a quick summary of the last 5 episodes on Maintainable.

Hosts

Robby

Previous Guests

Freedom Dumlao
Freedom Dumlao is the Chief Technology Officer (CTO) at Vestmark, where he has two decades of experience in supporting financial systems. He has a strong background in software development, particularly in managing large-scale systems, including a Java monolith that oversees $1.6 trillion in assets. Freedom is known for his innovative approach to software architecture, having led a significant project that consolidated over 70 Java microservices into a single Ruby on Rails application, resulting in increased velocity and ownership among developers. He emphasizes the importance of respecting legacy code and the strategic management of technical debt.
Mercedes Bernard
Mercedes Bernard is a Staff Software Engineer at Kit with over a decade of experience in consulting. She specializes in working with legacy codebases and managing technical debt. Mercedes is known for her thoughtful and practical approach to software development, emphasizing the importance of maintainability and creating inclusive code that is friendly to early-career developers. Her expertise includes auditing and stabilizing older systems, advocating for maintenance work, and navigating incomplete documentation and competing patterns in codebases.
Evan Phoenix
Evan Phoenix is the CEO of Miren, a company focused on creating maintainable software solutions. He is known for his insights into software development practices, particularly the importance of clarity in code and the implications of technical decisions on maintainability. Evan has a background in software engineering and has contributed to discussions on the intersection of programming and artistry, emphasizing the need for developers to learn from various disciplines. He is also an advocate for hiring junior developers to foster growth in the tech industry.
Chris Salvato
Chris Salvato is a Senior Staff Engineer at Shopify, known for his expertise in software development and maintainability. He emphasizes the importance of understanding the problem space before diving into coding solutions. With a focus on team collaboration and effective communication, Chris advocates for mapping out domain boundaries and addressing underlying issues in legacy codebases. His approach involves engaging with various stakeholders to uncover hidden friction points and improve overall productivity. Chris is also interested in the integration of AI-driven coding assistants and how they can enhance development processes when used in well-organized codebases.
Heimir Thor Sverrisson
Heimir Thor Sverrisson is a seasoned software engineer with over four decades of experience in the industry. He has a deep understanding of software architecture and its critical role in long-term maintainability. Throughout his career, Heimir has mentored engineers and tackled various technical challenges, including addressing technical debt and solving large-scale performance issues. He has worked at MojoTech, where he emphasizes the importance of code reviews and team development. Additionally, Heimir is involved in volunteer efforts to design radiation-tolerant software for satellites, showcasing his commitment to both technology and community service.

Topics Discussed

Java services focus software maintenance legacy code technical debt microservices Ruby on Rails AI in software development legacy codebases team culture maintainability early-career developers auditing systems developer experiences architecture patterns performance regressions infrastructure load clarity in code monolith testing open source junior developers developer paradise problem space software maintainability code organization AI coding assistants domain logic team collaboration legacy codebase software architecture performance problems code reviews consulting radiation-tolerant software satellites

YouTube Channel

Podcast has no YouTube channel.

Instagram Profile

Instagram

Profile Info

@_maintainable
Maintainable Podcast

Account Stats

Followers: 69
Posts: 153

Account Status

Account Type: Business
Privacy: Public

Biography

Maintainable is a software podcast focused on #legacycode and #technicaldebt.

Episodes

Here's the recent few episodes on Maintainable.

0:00 1:03:19

Freedom Dumlao: What 70 Java Services Taught Me About Focus

Hosts
Robby
Guests
Freedom Dumlao
Keywords
Java services focus software maintenance legacy code technical debt microservices Ruby on Rails AI in software development

Freedom Dumlao (CTO at Vestmark) joins Robby to explore what it means to maintain software at scale—and why teams sometimes need to unlearn the hype.

With two decades of experience supporting financial systems, Freedom shares how his team manages a Java monolith that oversees $1.6 trillion in assets. But what’s most surprising? His story of how a team working on 70+ microservices rebuilt their platform as a single Ruby on Rails monolith—and started shipping faster than ever before.

Episode Highlights

[00:02:00] Why Respecting Legacy Code Matters
Freedom reflects on a lesson he learned at Amazon: "Respect what came before." He discusses the value of honoring the decisions of past developers—especially when their context is unknown.

[00:05:00] How Tests Help (and Where They Don’t)
Freedom discusses how tests can clarify system behavior but not always intent—especially when market logic or business-specific rules come into play.

[00:07:00] The Value of Understudies in Engineering
Freedom shares how his team intentionally pairs subject matter experts with understudies to reduce risk and transfer knowledge.

[00:09:30] Rethinking Technical Debt
He challenges the fear-based framing of technical debt, comparing it instead to a strategic mortgage.

[00:17:00] From 70 Services to 1 Monolith
At FlexCar, Freedom led an unconventional rewrite—consolidating 70 Java microservices into a single Rails app. The result? A dramatic increase in velocity and ownership.

[00:25:00] Choosing Rails Over Phoenix, Laravel, and Django
After evaluating multiple frameworks, Rails' cohesiveness, Hotwire, and quick developer ramp-up made it the clear winner—even converting skeptical team members.

[00:31:00] How Rails Changed Team Dynamics
By reducing dependency handoffs, the new Rails app enabled solo engineers to own complete features. The impact? Faster delivery and more engaged developers.

[00:36:30] Why Rails Still Makes Sense at a 20-Year-Old Company
Even with a large Java codebase, Vestmark uses Rails for rapid prototyping and new product development.

[00:41:00] Using AI to Navigate Legacy Systems
Freedom explains how his team uses retrieval-augmented generation (RAG) to surface relevant code—but also the limitations of AI on older or less common codebases.

[00:51:00] Seek Feedback, Not Consensus
Freedom explains why aiming for alignment slows teams down—and how decision-makers can be inclusive without waiting for full agreement.

Links and Resources

Thanks to Our Sponsor!

Turn hours of debugging into just minutes! AppSignal is a performance monitoring and error-tracking tool designed for Ruby, Elixir, Python, Node.js, Javascript, and other frameworks.

It offers six powerful features with one simple interface, providing developers with real-time insights into the performance and health of web applications.

Keep your coding cool and error-free, one line at a time! 

Use the code maintainable to get a 10% discount for your first year. Check them out!

Subscribe to Maintainable on:

Or search "Maintainable" wherever you stream your podcasts.

Keep up to date with the Maintainable Podcast by joining the newsletter.

0:00 49:27

Mercedes Bernard: Friendly Code Welcomes Everyone In

Hosts
Robby
Guests
Mercedes Bernard
Keywords
legacy codebases technical debt team culture maintainability early-career developers auditing systems developer experiences architecture patterns performance regressions infrastructure load

Mercedes Bernard, Staff Software Engineer at Kit, joins Robby to talk about what it really means to write code that lasts—and who it should be written for.

In this episode of Maintainable, Mercedes shares a thoughtful and practical perspective on working with legacy codebases, managing technical debt, and creating a team culture that values maintainability without fear or shame. Her guiding principle? Well-maintained software is friendly software—code that is understandable and approachable, especially for early-career developers.

Together, they discuss how to audit and stabilize older systems, avoid full rewrites, and create consistent developer experiences in large applications. Mercedes reflects on her decade in consulting and how that shaped her approach to navigating incomplete documentation, missing historical context, and multiple competing patterns in a codebase. She breaks down different types of technical debt, explains why not all of it is inherently bad, and offers strategies for advocating for maintenance work across engineering and product teams.

The conversation also touches on architecture patterns like job fan-out, measuring performance regressions, reducing infrastructure load, and building momentum for improvements even when leadership isn’t actively prioritizing them.

If you’ve ever felt overwhelmed by a messy project or struggled to justify maintenance work, this episode will leave you with a fresh mindset—and a few practical tactics—for making code more sustainable and inclusive.

Episode Highlights

[00:01:08] Defining Well-Maintained Software
Mercedes explains her top metric: software that feels friendly, especially to early-career developers navigating the codebase for the first time.

[00:03:00] What Friendly Code Actually Looks Like
She shares why consistency, discoverability, and light documentation (like class comments or UML snippets) can make a huge difference.

[00:05:00] Assessing Code Like a House Tour
Mercedes introduces her metaphor of giving a house tour to evaluate code: does everything feel like it’s in the right place—or is the stove in the cabinet?

[00:06:53] Consulting Mindset: Being a Guest in the Codebase
With a decade of consulting experience, Mercedes shares how she navigates legacy systems when historical context is long gone.

[00:10:40] Stabilizing a Startup’s Tangled Architecture
She walks through an in-depth case study where she helped a client with multiple abandoned services get back to stability—without a rewrite.

[00:17:00] The Power of a One-Line Fix
Mercedes shares how a missing check caused a job to fan out 30 million no-op background jobs a day—and how one line of code reduced that by 75%.

[00:23:40] Why State Checks Belong Everywhere
She explains how defense-in-depth patterns help avoid job queue flooding and protect system resources early in the fan-out process.

[00:24:59] Reframing Technical Debt
Not all debt is bad. Mercedes outlines three types—intentional, evolutionary, and time-based—and how to approach each one differently.

[00:28:00] Why Teams Fall Behind Without Realizing It
Mercedes and Robby talk about communication gaps between engineers and product stakeholders—and why it’s not always clear when tech debt starts piling up.

[00:34:00] Quantifying Developer Friction
Mercedes recommends expressing technical debt in terms of lost time, slow features, and increased cost rather than vague frustrations.

[00:42:00] Getting Momentum Without Permission
Her advice to individual contributors: start small. Break down your frustrations into bite-sized RFCs or tickets and show the impact.

[00:45:40] Letting the Team Drive Standards
Mercedes encourages team-led conventions over top-down declarations, and explains why having any decision is better than indecision.

[00:47:54] Recommended Reading
She shares a surprising favorite: The Secret Life of Groceries, a systems-thinking deep dive into the grocery industry by Benjamin Lorr.

Resources & Links

Thanks to Our Sponsor!

Turn hours of debugging into just minutes! AppSignal is a performance monitoring and error-tracking tool designed for Ruby, Elixir, Python, Node.js, Javascript, and other frameworks.

It offers six powerful features with one simple interface, providing developers with real-time insights into the performance and health of web applications.

Keep your coding cool and error-free, one line at a time! 

Use the code maintainable to get a 10% discount for your first year. Check them out!

Subscribe to Maintainable on:

Or search "Maintainable" wherever you stream your podcasts.

Keep up to date with the Maintainable Podcast by joining the newsletter.

0:00 1:09:13

Evan Phoenix: The Why of the One Line

Hosts
Robby
Guests
Evan Phoenix
Keywords
maintainability clarity in code monolith technical debt testing open source junior developers

Evan Phoenix (@evanphx), CEO of Miren, joins Robby to explore the subtle but powerful difference between writing code that works and writing code that explains itself. They discuss the role of clarity in maintainable systems, why splitting a monolith can backfire, and what developers can learn from artists and tradespeople alike.

Episode Highlights

[00:01:30] What Makes Software Maintainable?
Evan defines maintainability as how easily a newcomer can make a change with minimal context.

[00:02:30] Why Business Logic Should Be Obvious
A discussion on domain knowledge leakage and abstracting rules like “can we sell today?”

[00:05:00] Programming 'Mouthfeel' and the Trap of Prefactoring
Evan explains why prematurely optimizing for reuse can lead to unnecessary complexity.

[00:07:00] When to Extract Logic: The Copy/Paste Signal
A practical approach to identifying reusable components by spotting repeated code.

[00:08:00] Technical Debt as a Reflection of Cognitive Load
Why forgetting your own code doesn’t automatically mean it’s “bad” code.

[00:10:30] Testing as Emotional Insurance
How writing even basic checks can build team confidence—especially when test coverage is weak.

[00:13:00] Daily Integration Tests: A Low-Pressure Safety Net
Using nightly integration runs to catch invisible bugs in complex systems.

[00:14:00] Confidence > 100% Test Coverage
Why fast feedback loops matter more than aiming for exhaustive tests.

[00:20:00] Splitting the Monolith: A Cautionary Tale
Evan shares how decoupling apps without decoupling the database created chaos.

[00:22:00] Shared Models, Split Repos, and Hidden Pitfalls
The unexpected bugs that emerge when two apps maintain duplicate models and validations.

[00:23:00] Better Alternatives to Splitting Codebases
How separate deployments and tooling can mimic team separation without architectural debt.

[00:28:00] The Hidden Cost of Diverging Business Domains
When apps evolve independently, business logic begins to drift—undermining consistency.

[00:29:00] Building Miren and Staying Motivated
How Evan approaches early-stage product development with curiosity and detachment.

[00:36:00] How to Know When Your Open Source Project Is “Done”
Reframing “dead” projects as complete—and why stability is often a feature.

[01:01:00] Signals for Trusting Open Source Dependencies
Evan’s mental checklist for evaluating if a library is worth adopting.

[01:07:00] The Importance of Hiring Junior Developers
Why investing in beginners is crucial for the future of our industry.

[01:08:00] Book Recommendations
Evan recommends The Inner Game of Tennis and Snow Crash.

Links and Resources

Book Recommendations

Thanks to Our Sponsor!

Turn hours of debugging into just minutes! AppSignal is a performance monitoring and error-tracking tool designed for Ruby, Elixir, Python, Node.js, Javascript, and other frameworks.

It offers six powerful features with one simple interface, providing developers with real-time insights into the performance and health of web applications.

Keep your coding cool and error-free, one line at a time! 

Use the code maintainable to get a 10% discount for your first year. Check them out!

Subscribe to Maintainable on:

Or search "Maintainable" wherever you stream your podcasts.

Keep up to date with the Maintainable Podcast by joining the newsletter.

0:00 46:31

Chris Salvato: Building Developer Paradise by Sitting in the Problem Space

Hosts
Robby
Guests
Chris Salvato
Keywords
developer paradise problem space software maintainability code organization AI coding assistants domain logic team collaboration legacy codebase

Software isn’t always about rapid iteration. Sometimes, the real challenge lies in carefully assessing the existing environment. Chris Salvato, a Senior Staff Engineer at Shopify, believes that spending time in the “problem space” is vital for any long-lived application. Rather than diving immediately into controllers and tests, he begins by talking to everyone who interacts with the code—engineers, product owners, even directors who oversee strategy. This approach reveals hidden friction points that rarely come to light in larger, more formal meetings.

When code grows organically over years, a range of issues emerges. Small workarounds might accumulate, new features can overlap with older ones, and domain boundaries become murky. Chris suggests mapping these overlaps through in-depth conversations so the team can pinpoint what genuinely obstructs productivity. He emphasizes that many developers may focus on surface fixes—updating a library here, renaming a class there—without acknowledging underlying confusion in the domain model itself. Removing extraneous code, clarifying domain entities, and aligning the team’s understanding can drastically reduce missteps.

An interesting aspect of Chris’s method is his view of “developer paradise.” A codebase reaches this state when new contributors can navigate it with minimal help. Instead of sifting through endless documentation or complex wikis, they can figure out how classes, modules, and services connect simply by reading the code. Chris notes that achieving this often involves pruning unnecessary files or responsibilities. The end result is software that “self-documents,” easing onboarding and reducing reliance on external explanations.

The conversation also touches on how large language models (LLMs) fit into the puzzle. Many organizations see AI-driven coding assistants as a way to accelerate development. Chris agrees they have potential, yet highlights a critical requirement: the code must be well-organized. If the system is sprawling and inconsistent, these tools may only add confusion. Lean, carefully segmented projects let both people and AI more effectively track what’s happening under the hood.

Reducing code bloat leads naturally to discussions about prioritizing. Chris encourages teams not to tackle every annoyance at once. He references the importance of framing a unifying question, such as “Which feature or aspect of the app causes the greatest confusion among team members?” Spending too little time on this question, he warns, results in half-hearted improvements that eventually revert back to chaos. By contrast, devoting a few dedicated sprints—guided by thoughtful one-on-one interviews—can create lasting changes that set the entire codebase on a better trajectory.

One intriguing theme is how personal growth ties into organizational impact. Chris acknowledges that developers often switch companies every few years, which might discourage them from investing deeply in a legacy codebase they won’t maintain long-term. Yet taking the lead in clarifying domain logic or reorganizing outdated sections is a skill-building opportunity. Future employers also notice engineers who can transform messy architectures into clear, future-friendly systems. In that sense, there’s a mutual benefit: the company gains maintainable software, while the developer acquires project leadership experience.

The idea of “sitting in the problem space” resonates throughout Chris’s remarks. He encourages engineers to resist the reflex to propose solutions too early. Instead, they should keep asking why a particular annoyance or bug persists. Is it a symptom of a misaligned feature set, or is it rooted in limited domain knowledge among contributors? By reframing those frustrations as questions about responsibilities, the team often discovers simpler fixes than a heavy-handed rewrite. Conversely, where deeper rewrites are indeed warranted, Chris believes it’s best for the team to see that direction as unanimous rather than dictated from the top.

Long-standing software also carries emotional baggage. People might have strong feelings about how something “ought” to be done, or they may have encountered recurring hurdles. Chris advocates using one-on-one conversations to let these concerns surface naturally, free from the pressure of group settings where quieter voices might hold back. Once everyone’s perspective is heard, common threads become clearer, enabling the team to converge on a smaller list of genuinely important tasks. When the group reconvenes, the sense of shared purpose helps unify efforts in a way that scattered brainstorming rarely achieves.

The conversation also highlights resourceful domain modeling, which draws some inspiration from the microservices world but doesn’t necessarily require the code to be broken up into tiny services. Instead, Chris suggests that well-defined boundaries within a monolith can deliver comparable clarity—if the team respects those boundaries. He points to examples like Stripe or reading materials on Domain-Driven Design to show how cohesive object structures can help avoid big architectural hurdles.

His closing thoughts revolve around long-term sustainability. Even if an engineer isn’t planning to remain on a project indefinitely, they can leave a meaningful legacy by clarifying crucial parts of the code, championing simpler naming conventions, and encouraging more open dialogue among team members. The impact, Chris notes, goes beyond the immediate project: every person who touches that code later benefits from these improvements, often for years to come.

Time-Stamped Highlights

[00:00:00] Welcome and Well-Maintained Software:
Robby opens by asking Chris about foundational traits of dependable, long-lasting codebases.

[00:00:58] Defining “Well Maintained”:
They explore how clear conventions and minimal bloat not only reduce confusion but also prolong the life of a system.

[00:01:28] LLMs and Context Windows:
Chris delves into why large codebases challenge AI-driven coding assistants—and how trim, well-modeled systems sidestep this pitfall.

[00:02:00] Joining Shopify and Facing Legacy Systems:
Chris recalls his early days at Shopify, realizing that older Rails apps demanded a more structured method of discovery.

[00:03:08] Concept of “Developer Paradise”:
He shares his perspective on how removing unneeded documentation and extraneous complexity makes daily development more enjoyable.

[00:05:32] Framework for Tackling Old Code:
Chris outlines his signature approach: booking numerous 1-on-1 meetings to gather honest feedback from stakeholders before touching the code.

[00:07:15] Finding High-Leverage Problems:
Robby and Chris discuss distilling this feedback into a shortlist of real bottlenecks that the team can tackle together.

[00:15:00] From Problem Space to Solutions:
They spotlight the value of framing a single unifying question—like “How do we reduce confusion?”—to keep everyone working toward the same outcome.

[00:20:07] Balancing Personal Goals and Company Needs:
Chris underlines how aligning individual ambitions with business objectives fosters commitment to sustained improvement.

[00:32:00] Long-Term Value and Leadership:
Closing out, Robby and Chris consider how short-tenure engineers can leave a lasting impact by helping a team focus on its biggest pain points.

Resources & Mentions

🍇 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 20% off your first year at letsjelly.com/maintainable.

Subscribe to Maintainable on:

Or search "Maintainable" wherever you stream your podcasts.

Keep up to date with the Maintainable Podcast by joining the newsletter.

0:00 40:58

Heimir Thor Sverrisson: Architecture First, Tech Debt Second

Hosts
Robby
Guests
Heimir Thor Sverrisson
Keywords
software architecture maintainability technical debt performance problems code reviews consulting radiation-tolerant software satellites

Heimir Thor Sverrisson joins Robby to discuss the importance of software architecture in long-term maintainability. With over four decades in the industry, Heimir has witnessed firsthand how poor architectural decisions can set teams up for failure. He shares his experiences mentoring engineers, tackling technical debt, and solving large-scale performance problems—including one bank’s misguided attempt to fix system slowness by simply adding more CPUs.

Heimir also discusses his work at MojoTech, the value of code reviews in consulting, and his volunteer efforts designing radiation-tolerant software for satellites.

Episode Highlights

  • [00:01:12] Why architecture is the foundation of maintainability – Heimir explains why starting with the wrong architecture dooms software projects.
  • [00:02:20] Upfront design vs. agile methodologies – The tension between planning and iterative development.
  • [00:03:33] When architecture becomes the problem – How business pivots can render initial designs obsolete.
  • [00:05:06] The rising demand for rapid software delivery – Why modern projects have less time for deep architectural planning.
  • [00:06:15] Defining technical debt in practical terms – How to clean up code without waiting for permission.
  • [00:09:56] The rewrite that never launched – What happens when a company cancels a multi-million-dollar software project.
  • [00:12:43] How a major bank tackled system slowness the wrong way – Adding CPUs didn’t solve their performance problems.
  • [00:15:00] Performance tuning as an ongoing process – Why fixing one bottleneck only reveals the next.
  • [00:22:34] How MojoTech mentors instead of manages – Heimir explains how their consultancy approaches team development.
  • [00:27:54] Building software for space – How AMSAT develops radiation-resistant software for satellites.
  • [00:32:52] Staying relevant after four decades in tech – The power of curiosity in a constantly changing industry.
  • [00:34:26] How AI might (or might not) help maintainable software – Heimir shares his cautious optimism.
  • [00:37:14] Non-technical book recommendation – The Man Who Broke Capitalism and its relevance to the tech industry.

Resources & Links

Book Recmmendations

🍇 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 20% off your first year at letsjelly.com/maintainable.

💡 Enjoyed this episode? Share it with someone who cares about maintainable architecture and technical debt management!

Subscribe to Maintainable on:

Or search "Maintainable" wherever you stream your podcasts.

Keep up to date with the Maintainable Podcast by joining the newsletter.

Ratings

Global:
5.0 rating 49 reviews

USA

5.0 ratings 32 reviews

UK

5.0 ratings 6 reviews

Canada

5.0 ratings 4 reviews

Australia

5.0 ratings 4 reviews

Ireland

5.0 ratings 1 reviews

New Zealand

5.0 ratings 1 reviews

South Africa

5.0 ratings 1 reviews

Singapore

0.0 ratings 0 reviews