No Compromises - podcast cover

No Compromises

Joel Clermont and Aaron Sarayshow.nocompromises.io
Two seasoned salty programming veterans talk best practices based on years of working with Laravel SaaS teams.
Last refreshed:
Follow this podcast in the Metacast mobile app to refresh it and see new episodes.
Download Metacast podcast app
Podcasts are better in Metacast mobile app
Don't just listen to podcasts. Learn from them with transcripts, summaries, and chapters for every episode. Skim, search, and bookmark insights. Learn more

Episodes

Finding a code-review style that fits your brain

Joel and Aaron compare two very different ways to tackle pull-requests—reviewing them commit-by-commit or scanning the whole thing at once. They dig into when each approach shines, how “atomic” commits can help (or hurt) reviewers, and why understanding how your teammate’s brain works is a super-power. Along the way they share practical tips for leaving yourself notes, spotting hidden changes, and keeping large refactors under control. (00:00) - The “gift” of a pull request and the pain of huge ...

Jul 19, 202516 minEp. 131

Never take hostages: give clients control from day one

Joel and Aaron explain why every project should start in the client’s own GitHub organization—even when the client has never heard of Git. They share scripts, onboarding tips, and war-stories that show how small setup shortcuts turn into big headaches later. You’ll learn a repeatable way to protect both your reputation and your client’s code base. (00:00) - Intro & episode setup (01:15) - Create the repo in their org (02:15) - Quick hack versus right process (03:30) - Project-setup technical...

Jul 05, 202511 minEp. 130

Balancing test coverage without chasing 100 percent

Joel and Aaron unpack how they use code-coverage numbers as a starting signal rather than a finish line. They discuss realistic thresholds, choosing the right tool for each test layer, and why coverage metrics can double as negotiation leverage inside big organizations. Listen in for practical ways to decide what to test—and when to stop. (00:00) - Testing passion vs. shipping work (01:00) - Coverage tells you what’s missing (03:45) - Picking a baseline metric that grows (06:15) - Draw the line ...

Jun 21, 202516 minEp. 129

Exploratory coding when requirements are fuzzy

Joel and Aaron unpack a recent client project where the only spec was “make these two systems talk.” They share how console-level prototypes helped them clarify data mapping, test tricky scenarios, and keep the client looped in without over-building a UI. If you’ve ever had to code first and document later, this one’s for you. (00:00) - Bridging two APIs with minimal specs (03:30) - Choosing an exploratory workflow over full UI (06:00) - Console closures for quick, testable steps (09:15) - Hand-...

Jun 07, 202515 minEp. 128

Understanding how Stringable works inside Blade views

Joel and Aaron dig into Laravel’s `Stringable` class and uncover how it can silently skip Blade’s automatic HTML escaping. They explain why that’s both a convenient feature and a potential security pitfall if user input isn’t properly sanitized. You’ll hear practical ways to keep your views safe without losing the API’s fluency. (00:00) - Stringable can sidestep Blade escaping (03:45) - Dangers of outputting unsanitized HTML (05:45) - Defensive strategies for safe rendering (08:45) - Silly bit S...

May 24, 202511 minEp. 127

Finishing up our discussion on not having time

Picking up where last week’s “Why ‘no time’ really means ‘no priority’” left off, Joel and Aaron tackle the next hurdle: what to do once the benefits are crystal‑clear but you (or your team) still hesitate. They unpack the hidden frictions—fear of discomfort, stakeholder pushback, or sheer inertia—that keep valuable tasks on the back burner. You’ll hear a quick mental exercise for elevating true priorities and concrete tactics for transforming “someday” into forward motion today. (00:00) - “No t...

May 10, 202512 minEp. 126

Why “no time” really means “no priority”

Joel and Aaron tackle the common objection, “We don’t have time,” and show why it usually hides a priority problem. They discuss how to convey the true payoff of process improvements by sharing honest before‑and‑after stories instead of vague promises. You’ll leave with practical ideas for getting buy‑in—whether you’re pitching tests, planning habits, or any other change. (00:00) - “No time” excuse versus priorities (01:45) - Selling the value of improvements (03:45) - Sharing real before‑and‑af...

Apr 26, 202511 minEp. 125

When validation can protect your app's performance

Joel and Aaron show how ignoring GET request validation can cause performance issues and open your application to abuse. They highlight the importance of bounding pagination and share tips for using form requests to handle unexpected user input. Now go check out the best/only Laravel validation book (00:00) - Quiz on Laravel’s default pagination limit (01:00) - Performance concerns with large datasets (03:20) - Validating per-page requests in controllers (05:45) - Why you should block negative p...

Apr 12, 202512 minEp. 124

Stick with conventions and avoid overengineering your Laravel app

Joel and Aaron explore why pushing too many layers of abstraction can backfire in a Laravel application. They highlight the benefits of sticking to the framework’s conventions for long-term maintainability and simpler handoff to future developers. (00:00) - Why framework paradigms really matter (01:00) - When extra abstractions become burdens (03:00) - Balancing creativity with Laravel’s conventions (05:15) - Keeping code easy to revisit (06:45) - silly bit Need help digging your project out of ...

Mar 29, 20259 minEp. 123

When to bring in outside help

Joel and Aaron explore the decision-making process behind hiring or consulting an expert for technical challenges. They discuss examples like adding tests to a large codebase and understanding what questions you need to ask. They also reveal how coaching can help teams avoid common pitfalls and reach solutions faster. (00:00) - Determining why you need outside expertise (02:15) - Pinpointing the real problem (skill gap or strategy) (05:00) - Deciding between hands-on help or coaching (08:30) - L...

Mar 15, 202511 minEp. 122

Why two databases are better than one

Joel and Aaron discuss the benefits of having distinct databases for testing and local development. They share how this approach ensures a reliable test suite and avoids conflicts with day-to-day dev work. In the process, they reveal a simpler workflow for setting up new environments and keeping projects stable. (00:00) - Why separate dev and test databases (02:15) - Automating database setup with seeders (05:00) - Avoiding flaky tests and migration pitfalls (09:00) - Reimagining old habits with...

Mar 01, 202515 minEp. 121

Dealing with being a beginner again

In this episode, Joel and Aaron discuss the struggles of learning new technology on a late-night side project. They share tips for handling frustration and managing expectations. (00:00) - Late-night MicroPython struggles and revelations (02:15) - Overcoming complex hardware and language hurdles (05:15) - Balancing side projects with realistic expectations (10:30) - Silly bit Don't be a stranger. Check out the Mastering Laravel community ....

Feb 15, 202514 minEp. 120

Making short demo videos count

Joel and Aaron explore the value of using concise video demos instead of long emails or scattered screenshots. They discuss which clients benefit from quick visuals and when text is still best. Want to see us on camera? Join the Mastering Laravel community for our live dev calls. (00:00) - Recording brief Loom demos for updates (02:15) - Considering audience and communication style (05:00) - Video calls vs. text-based explanations (07:45) - Silly bit...

Feb 01, 202510 minEp. 119

Examining test layering in multi-tenant requests

Joel and Aaron debate how to structure multi-tenant API requests and tests. They explore the interplay between authentication, tenant headers, and different levels of validation. In the end, they reminisce about old infomercial freebies and wonder if they still exist. (00:00) - Debating authentication vs. tenant header priority (02:15) - Handling unusual requirements in request tests (05:00) - Navigating multi-layer middleware concerns (08:30) - Balancing thoroughness and test coverage (12:00) -...

Jan 18, 202514 minEp. 118

When to step outside of Eloquent's comfort zone

Joel and Aaron explore the nuances of when to venture beyond Eloquent in Laravel applications. They discuss specific scenarios where using lower-level database tools might be necessary, while emphasizing the importance of not abandoning Eloquent entirely. The conversation provides practical insights into balancing framework features with performance needs. (00:00) - Exploring when to step outside framework defaults (02:30) - Handling complex sorting with related tables (05:25) - Balancing Eloque...

Jan 04, 202512 minEp. 117

Feature flags: Temporary tool or permanent solution?

Joel and Aaron dive into a friendly debate about the true nature of feature flags in software development. Drawing from their varied experiences across different programming languages and environments, they explore whether feature flags should always be temporary or can serve permanent purposes. The discussion evolves from a simple disagreement into deeper insights about different architectural approaches. (00:00) - Newsletter tips undergo careful peer review process (02:15) - Debating if featur...

Dec 21, 202410 minEp. 116

Deciding when to use a new piece of technology

Ooh, something new was just announced. And I have this project coming up. It could be perfect! But should I use it? On today's episode of No Compromises, Aaron and Joel share a conversation they had along these lines on a recent client project and considering the new Flux library from the creator of Livewire. (00:00) - Discussing potential Flux adoption in Bootstrap project (01:00) - Flux explained: Livewire-based UI component library (04:45) - Risk assessment of adding new technologies (06:00) ...

Dec 07, 202414 minEp. 115

Taking liberties with value objects

Programmers love geeking out and creating specialized terms and vocabulary. Well I can do that too. In today's episode, we talk about "value objects", put our own special definition on it, and discuss when we might use these in a Laravel project. (00:00) - What I mean by "value object" (03:00) - Nicer to do in newer PHP versions (04:00) - Main use case for value objects (05:30) - Use them for everything then? (09:00) - A second reason to use a value object (10:45) - Silly bit Sign up for our new...

Nov 23, 202412 minEp. 114

How to deal with things outside your control on a dev project

Have you ever struggled working with a third party on one of your developer projects? How do you handle that, keeping it professional and also still able to meet your commitments? In today's episode of No Compromises, Aaron and Joel discuss what happened on a recent project and how they think about handling those kinds of difficulties while still having boundaries. And if you're looking for help on your Laravel project, get in touch !...

Nov 09, 202410 minEp. 113

Should we use a JSON field for this?

JSON fields can be very useful, but when is a good time to include them in your database design? In today's episode of No Compromises, Aaron and Joel use a couple examples from recent projects to talk through reasons they would and would not use a JSON field. (00:00) - Debating JSON fields in database design (03:06) - Configuration options: JSON vs. relational tables (07:05) - Real-world example: label customization dilemma (11:30) - Silly bit Want a place to ask any question related to Laravel ...

Oct 29, 202414 minEp. 112

A balanced approach to static analysis in Laravel apps

Static types and tooling have increased the quality of our apps, but sometimes certain features in your Laravel app don't play nicely with static analysis. In today's episode, we talk about how we approach the tradeoffs around making a tool happy without changing how you write code. (00:00) - Our approach to static analysis in a Laravel app (01:30) - Using PHPDoc inline (03:00) - When Laravel doesn't quite give you the type you want (05:00) - A different approach than inline types (06:30) - Are ...

Oct 15, 202412 minEp. 111

Why do we like testing so much?

I write a lot about testing in the Mastering Laravel newsletter. Ever wonder why it's a topic I care so much about? In today's episode, we discuss that question and come up with a few different reasons. (00:00) - Why do we like testing so much? (01:20) - Looking back at how we learned (02:30) - Making it easier to join a project (05:45) - Tests make you more productive (07:45) - Shifting your thinking (10:10) - Silly bit Let us help you add tests to your project ....

Oct 01, 202412 minEp. 110

What does it mean to "know" something?

What does it really mean when you say you know a particular technology? On today's episode, we discuss this using TypeScript as a specific example. (00:00) - What does it mean to "know" something? (03:15) - Thinking about TypeScript vs strict types in PHP (05:30) - Are you fluent? (06:50) - Silly bit Want help with your Laravel or PHP project ? We really know that!

Sep 17, 202410 minEp. 109

How to approach being wrong

Programmers are not shy about telling other programmers when they're wrong. But what can we learn in a situation like his? How can we be wrong with style? In this episode, Aaron and Joel talk about times they've been wrong throughout their career and what they've learned. (00:00) - Aaron admits he was wrong (02:00) - What can I learn from this? (05:30) - Being wrong in public with style (07:00) - Being wrong throughout your career (08:45) - Two people can both be right for their context (10:10) ...

Sep 03, 202412 minEp. 108

Where do you go when you need help?

We can't know everything, so throughout each day we inevitably have questions. On today's episode, we discuss different approaches we have used when we need a little help. (00:00) - Where do you go when you need help? (01:30) - Option 1 - search engines (03:30) - Getting the most out of search results (05:00) - Option 2 - talk to AI (07:00) - Using AI in the right context (09:10) - Option 3 - talk to a person (11:30) - What if you work alone? (12:55) - Silly bit Looking for a community of smart ...

Aug 20, 202414 minEp. 107

What does it mean if someone says your app is slow?

The dreaded bug report: this app is slow. Ok, but what is slow? I have so many questions! In today's episode, we discuss our approach to getting more information out of that initial bug report, and a methodical approach to locate and quantify the slowness. If you'd like help setting up tools like Xdebug profiling , send us a message.

Aug 06, 202414 minEp. 106

Why we have a separate test suite for external services

Writing tests that communicate with a third party can be a little tricky, but we've found an approach that balances speed and confidence. In today's episode, we share that approach and talk through a strategy of how frequently to run tests that talk to the outside world. (00:00) - Why would your tests ever talk to an external service? (02:30) - What does it mean to have a separate test suite? (06:00) - Keeping them separate allows different triggers for running (07:00) - When should you run exte...

Jul 23, 202418 minEp. 105

API specs aren't just for giant teams

I don't have time to write an API spec. We're not a giant team. We don't have external users of our API. I've said all these things in the past, but in today's episode, we discuss why you should still consider writing a specification for your Laravel API. (00:00) - Should you write a spec for your API? (01:37) - Thinking through the requirements (04:07) - What's in a spec? (06:20) - Balancing detail with moving forward (08:15) - Who is consuming the spec? (09:30) - The spec keeps you honest Woul...

Jul 09, 202415 minEp. 104

Slowly introducing static analysis without changing everything

Maybe you've tried to add static analysis to your Laravel app and got scared away by all the errors. In this episode we discuss how we like to introduce PHPStan to large, long-lived projects in a way that doesn't introduce a lot of risk or change. Would you like help introducing Larastan to your project ? That's one of many things we can help you with! This episode is sponsored by Mailtrap, an Email Delivery Platform that developers love. Try for Free at MAILTRAP.IO...

Jun 25, 202415 minEp. 103

Troubleshooting an empty session

Why isn't this working? It can be frustrating when something doesn't work as expected! In this episode, we talk through a recent issue Joel had with sessions and oauth flows. There are a couple principles that apply more broadly. Next time you're stuck on something, let us help! This episode is sponsored by Mailtrap, an Email Delivery Platform that developers love. Try for Free at MAILTRAP.IO...

Jun 11, 202412 minEp. 102
Hosted on Transistor
For the best experience, listen in Metacast app for iOS or Android