Two seasoned salty programming veterans talk best practices based on years of working with Laravel SaaS teams.
The podcast No Compromises is created by Joel Clermont and Aaron Saray. The podcast and the artwork on this page are embedded on this page using the public podcast feed (RSS).
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
"Magic" methods and properties show up several places in Laravel, as well as third-party packages. They can make certain things easier and less verbose, but there is a trade off. In this episode, we discuss a few different contexts where we like and avoid magic accessors.
We'd really appreciate it if you share the show with other Laravel devs.
This episode is sponsored by Mailtrap, an Email Delivery Platform that developers love. Try for Free at MAILTRAP.IO
Admins can do everything in the app, right? Today we discuss a couple reasons why you may want to consider not letting an admin have access to every single feature in your app.
🎉️ Episode 100 is a huge milestone for us. Thank you for listening!
This episode is sponsored by Mailtrap, an Email Delivery Platform that developers love. Try for Free at MAILTRAP.IO
Have you ever turned on error tracking in a long-lived app and then got overwhelmed by all the errors happening? We talk through some strategies to not get overwhelmed and make a case that you really should be monitoring this in production.
Would you like help with your legacy app? We have a ton of experience making legacy apps a joy to work within.
We've talked about coding standards before, but this time we approach it from a slightly different angle. Does the way you're code is formatted affect your ability to understand it? Brains are interesting things.
Is your code slower than you'd like? We specialize in Laravel performance optimization and we can help! Contact us to discuss.
You launched a hobby project and then it starts to get some traction. What next? How do you get a more solid foundation under your app when it comes to database hosting? In this episode, we discuss the common phases we see a database go through during an app's life.
And if you'd love some help moving your database or tackling performance issues, give us a call!
Interfaces are a great tool for writing maintainable applications, but it is possible to go "too far" with abstraction. Or maybe, it's a bad use of time to write an abstraction up front before you really know you need it. We discuss some trade-offs and examples.
When you're writing a test it can be so tempting to just "tweak" some app code to make it easier to write that test, but we discuss why that might not be a good idea. We also talk about some app changes while writing tests that are beneficial to the overall project.
Do your eyes glaze over when someone mentions singletons or factories? We'll try to not to be boring as we explain the benefits of design patterns.
Sign up for our free Laravel newsletter and learn something new in 2 minutes or less.
Ever feel like your Blade views are getting too logic-heavy? What logic belongs in the view, and what logic would be better somewhere else? We use a recent PR discussion to talk through these points.
When new tools and packages come out, there is usually some buzz around the launch, and how it solves all the problems of the old tool. Should you switch? How do you know when it's worth it? What are the potential downsides of switching? We talk through a couple examples and share how we approach these decisions
Want to see what our coding standard looks like?
Toss a coin in the jar if you enjoyed this episode. We really appreciate it!
Seeders seem pretty straightforward. It's a way to generate data. But how should you use them in your app and what different purposes do they serve? We talk through our approach to seeders and how we use them in a few different contexts.
Toss a coin in the jar if you enjoyed this episode. We really appreciate it!
Is there some particular tool or technology that just makes you mad? Maybe it's the way CSS behaves or how some browsers work. Don't just get mad, dig in and learn it thoroughly. We talk about how we've done that and how it helped.
Toss a coin in the jar if you enjoyed this episode. We really appreciate it!
We see a lot of different projects, but it's pretty rare to find one that's well-documented and internally consistent. Why does that matter? And how can you make things more consistent without spending a lot of time on it?
How do you like to upgrade your app when the next new major version of Laravel comes out? Aaron and Joel share two different approaches they've used, and what added benefits you get from doing a version upgrade.
Need help getting tests on your Laravel app before upgrading?
We're developers, we write code! But sometimes it's worth thinking if we really need to fire up our editor, or if a better solution exists. We talk through some "behind the scenes" podcast workflow, and how we decided we didn't need to write code this time.
Just about every application needs the concept of roles and permissions. Often, there's a desire to allow non-developers to manage roles and permissions in the application interface, but is that a good idea?
You might have a book that really shaped how you write code today. Some books make more sense if you read them later in your career. We discuss the changing value of books as a learning resource as you gain experience.
00:00 Using books as a resource
01:59 Changing perspectives as you gain experience
03:05 Recognizing real-world applications of what you read
05:45 Balancing enthusiasm with experience
07:20 You don't need to learn everything
09:35 Silly bit
You could spend a few thousand dollars on books, but maybe that money is better spent working with us.
This is a surprisingly controversial topic. In this episode, we share why we write down migration methods, and it's probably not the reason you're thinking of.
It's frustrating to have a client, boss, or even co-worker attempt to micro-manage you. We share some tips on how to make the working relationship better.
Developers spend a large part of their day inside an editor. For a full-featured editor like PHPStorm, there may be some useful features you've never noticed. We discuss a few of those.
PHPStan is a great tool, but if you're not careful it might push you to write code in a way you wouldn't normally write it. How can you balance a tool's strengths with your team's style of writing code?
It is so exciting to watch a conference talk announcing some new tool or feature. Now you're back at work and your fingers are itching to type `composer install` - What do you do?
You like short things, that's why you listen to this podcast. How about a short Laravel tip in your inbox?
Programmers have opinions on things. Shocking, I know! How can we tell someone we think there's a better way to do something, without being counterproductive and causing needless confrontation?
We get a bit nerdy here and dive deep on a few different ways to test record creation.
Do you maintain laser focus when you work, or are you a normal human being? How do you balance use of email and social media for legitimate work reasons without going down the rabbit hole of distraction? Stop your work and listen to this episode for answers. It's not a distraction, it's an investment.
The discussion of final classes was a hot topic recently. We had planned on discussing this even before it came up on Twitter, but here is our unsolicited opinion.
Is there some use case we missed? Aaron wants to hear about it.
Show notes
We always write tests, and can't imagine working without them. But is there ever a time where it might make sense to delay writing some tests until later in the project? Let us tell you a story about a recent project where we made that decision.
Show notes:
Some interviewing techniques can be pretty disrespectful of the applicant's time or humanity. On today's episode we talk about some ways of approaching an interview to put the person at ease and help them to do their best.
Show notes:
Maybe you're a solo dev or working on a small team. What benefits are there in widening your circle of developers? We talk through our own personal experiences in this episode.
Show notes:
We'll admit it: sometimes we change our mind. In this episode, we discuss how we used to setup queues in Laravel tests, and why we changed it.
Show Notes
Want to make us happy with a random email? Check out our free and paid books on masteringlaravel.io
Rules in programming can be extremely helpful, especially on a team. But is it possible to go too far with rules? We discuss a couple recent scenarios where we could have made a rule, but decided not to.
Need help to set up or improve your team's coding standards?
Before you vent some frustration on another tool or programming community, take a deep breath and think about why you're irritated? We talk about our own reactions to some technologies and how it's good to keep an open mind or, at a minimum, to not be a jerk.
We have such a rich ecosystem of packages in the Laravel and PHP community. But can there be too much of a good thing? What do we consider before adding a small package to our projects?
Would you like help auditing the packages in your Laravel application?
Laravel has a vibrant community of people teaching and sharing what they've learned. What makes a good tip? Should you tweet or blog or both?
Check out the new articles section on masteringlaravel.io
New PHP version! New Laravel version! So exciting! But when does it make sense to upgrade, and when does it make sense to start using new language or framework features?
If you enjoy this podcast, we'd really appreciate help spreading the word. Share it with your fellow PHP and Laravel developers.
How can a bug be fun, and not frustrating? When you treat it like a puzzle. Let's walk through a recent bug with CSV mime type validation and go deep down the rabbit hole.
Why would you validate your MIME types? Learn that and a whole lot more with our validation book: Mastering Laravel Validation Rules
User experience is a term we hear a lot as developers, but it can mean different things depending on the context. We discuss a recent project where decisions around which HTTP status code to return was focused on improving the user's experience and trust in the application.
Move from competent to confident - become a better Laravel developer with the free resources available at masteringlaravel.io
We discuss two "interesting" patterns we've observed in a number of Laravel projects. Let's take a step back and think about why we write tests the way we do.
Need help building a test suite for your Laravel app or making your existing tests more reliable? Click the link and book a free call to see how we can help.
We've all been there: a thorny piece of code works, but it seems like there must be a better way to simplify it or make it more readable. We share one example when this happened to us, and how code review led to a better solution.
Want another set of eyes on your code? We can help! Visit our site and schedule a free call with us today.
Hear about some cool new tool or coding technique on Twitter? Great, jump right in and use it on your biggest production app! Or . . . maybe don't. We share some thoughts on how to evaluate things critically for your particular circumstances.
Do you want to blindly take our advice? Great idea! Check out our book on Laravel validation rules.
Do you always finish everything you plan on doing? Probably not, very few developers do. The problem isn't always how you work. Some of it is how you plan. We discuss several tips on how to plan for a more successful week.
Want to get notified when we release new tools, books, and articles? Sign up for our newsletter!
What do you do when you're stuck? Aaron shares a tip on how he breaks down a problem when he's feeling stuck.
Are you stuck with your Laravel/PHP project? We can help! Book a free call.
We all know we should write tests, but what should we test? Is there anything it doesn't make sense to test? We talk through a high-level approach to how we do feature testing in Laravel.
Need some help or advice on your Laravel project? We can help!
There are different ways to structure your translation assets in Laravel. We discuss how we approached this on a recent project, and why we chose the method we did.
Check out the validation worksheet we built. It may help jump start your Laravel validation rules.
Factories are really useful in tests, but could they give you a false sense of security if they don't generate models exactly like a user of your application would? We talk through some benefits and cautions to think about as you're designing your factories and factory states.
Share the love! Tell people on Twitter about the podcast.
What a surprise, Joel and Aaron have a different learning style. We talk through our different approaches to learning, and what we've found useful.
Did you like this? We'd appreciate a review or share of the podcast
Do you like to fiddle with settings? Joel doesn't. Find out why, and hear about one example where we like deviating from the defaults.
Learn more about Laravel at masteringlaravel.io
Maybe you've inherited a project and just looking at how the code is organized makes your head hurt. Before you go ripping it apart and "making it better", it can be useful to take a step back and use a more measured approach.
Want us to work with your team? Book a free call to see if we can help.
You've inherited a legacy app. It's "running fine" in production, but when you add an error reporting tool, you see hundreds of errors, warnings, and notices logged each day. What do you do?
Check out our books and courses at masteringlaravel.io
Can a Laravel developer learn something from the Rails or Erlang communities? We share some perspective on how to broaden your horizons, and when might be a good time in your career to do that.
Download our free ebook 7 Steps to Securing Your Laravel App.
Many of us have built something we thought was "throw-away" code, only to have someone decide it's good enough to ship to production. How can you prepare for this, and avoid problems when it happens?
Check out Aaron's blog and Joel's blog for even more amazing wisdom.
If you are listening to this, you probably enjoy hearing other people share what they've learned. In this episode, we turn the tables and explain why you should consider sharing what you've learned as well.
Listening to us is just part of the fun. You can read what we've written too at masteringlaravel.io
How can you handle an interruption to your work, especially if it is an urgent request for help? We discuss how to do this without derailing your planned work for the day.
Let us know if you have a question or topic you'd like to discuss on the show. Contact us with your suggestions, or just to tell us how great we're doing.
We walk through a recent experience where Joel was about to "burn down the world," as Aaron calls it. Instead, after doing a little exploration of the Laravel framework code, we landed on a much cleaner solution.
Want some help to make your Laravel SaaS better? Book a free 30 minute call.
It feels good to finish a project, but before you move on, there are benefits to pausing and reflecting on what went well and what could have been better.
If you're enjoying the podcast, we'd really appreciate it if you shared it with a fellow developer.
We have to ship this feature in 2 weeks! Do we have time to test? In this episode we talk through this scenario and share some benefits of testing even under the pressure of a looming deadline.
Free, practical advice on how to improve your Laravel app at masteringlaravel.io
For some values, it can be tricky to know whether it's better to calculate it on the fly or when to calculate it once and store in the database. We talk through a recent scenario we bumped into, and what factors to weigh when making this decision
Download our free Laravel tips ebook.
We share a few rules that help guide us to determine when to manually fire an event versus when to wire up a model observer.
Make my phone buzz and download a book to make you a better Laravel developer.
Wrapping up our series on how we work, we talk through the end of a project and how to make sure there are no surprises.
Download the free security tips ebook from masteringlaravel.io.
It's not easy being green
You learned a best practice, and it served you well. Is it set in stone? Or should you be open to re-evaluate later?
Get those free e-books at masteringlaravel.io
We've all had disagreements about how to write or organize code, or how a feature should work. We share some tips on how to discuss it productively.
Be a Joel, not a Cole: masteringlaravel.io
Setting up a useful staging environment involves a number of choices. We discuss our preferred strategies and talk about why having a staging environment is a good thing.
This isn't meant to be an insult. It's actually a good thing that your project isn't completely unique, and you can benefit from what other people have already learned.
Continuing our series on "how we work", today we finally get to the dev work. How we organize it, plan it, and communicate with the project stakeholders.
I heard this site is cool: masteringlaravel.io
Aaron shares a few things that he's bumped into with policies in his apps, and we talk through some possible solutions or processes to help avoid them.
Tweet @jclermont if there's something you'd like us to discuss.
When you inherit a project, how do you draw a balance before making everything nice to work with and delivering value to the stakeholders?
Check out masteringlaravel.io
Have a question? Want us to discuss a topic? Do you like sending email to random people on the Internet?
Contact us at [email protected] for all of the above.
You just attended a conference or finished a book/course and you're all excited to try out some new "best practice". We discuss how to balance this enthusiasm with the needs of your team and project.
* Check out masteringlaravel.io
* Download our free Laravel Tips ebook
As developers, coding is the fun part, but we share why we like to slow down and take some time to wireframe before diving into the editor
* Download our free Laravel Tips ebook
* Github Actions by Michael Heap (50% discount for podcast listeners)
* masteringlaravel.io - get a jump start on validation with our free worksheet
Check out our new website: MasteringLaravel.io
This episode is a little different. We take a peek behind the scenes as to how we qualify projects, and the sorts of things you might think about before deciding whether or not to take on something new.
Find out more about Mastering Laravel Validation Rules.
Roles and permissions are a core part of most applications. Laravel provides some tools for managing and enforcing this, and third party packages provide even more features. Aaron and Joel share their techniques for enforcing roles and permissions, in a way that won't get harder to manage over time.
Download our free eBook of Laravel tips: A Little Bit of Laravel
Our favorite permissions package: laravel-permission
When you're building a Laravel app, you're writing PHP code, but you're dealing with many patterns and conveniences provided by Laravel. So where do you draw the line between the two? Is it important? We discuss this topic and how you can get the most out of what both PHP and Laravel have to offer.
Download our free eBook of Laravel tips: A Little Bit of Laravel
Fun game to learn/practice regular expression syntax: Regex Crossword
> Developer: "I just need to SSH in real quick"
> Server admin: "No"
Have you had this discussion? Listen in as Joel and Aaron talk about their experience on teams of different sizes, and how to handle this potential conflict, while still getting your work done.
Download our free eBook of Laravel tips: A Little Bit of Laravel
Where should I place this curly brace? Trailing commas or not? Have you encountered disagreements about coding standards on your team. In this episode we explain the benefits of coding standards, how to adopt them on your project, and discuss the two most popular tools in the PHP community for enforcing them.
Download our free eBook of Laravel tips: A Little Bit of Laravel
We've all been stuck with something we didn't know. Should you ask for help? And how? Or if someone on your team asks you a question, how can you handle it best? We discuss it all.
Download our free eBook of Laravel tips: A Little Bit of Laravel
What are the big 3 types of tests we use on our projects? How do we decide which to use? Listen in as we discuss this and more.
Need help improving your testing strategy, or just need help to get your team started with testing? Setup a free consultation call.
It's no tabs versus spaces, but it's close. Do you use guarded or fillable in your Laravel models? Aaron and Joel share their default approach, as well as several reasons for that choice.
Sign up for our Laravel tips newsletter!
Find out more about Mastering Laravel Validation Rules.
It's easy to get used to things that cause us friction or pain in our development process. In this episode, we discuss how to avoid that trap and how to evaluate when to invest time in fixing that pain.
Sign up for our Laravel tips newsletter!
Find out more about Mastering Laravel Validation Rules.
Validation may seem boring, but it's a vital part of any Laravel application. Joel and Aaron share some tips on validation along with exciting news about a new resource to master Laravel validation rules.
Sign up for our Laravel tips newsletter!
Find out more about Mastering Laravel Validation Rules.
Why is it important to think about a future project hand-off at the beginning of a client relationship? Aaron and Joel share their approach.
Sign up for our Laravel tips newsletter!
Last episode we discussed how to deal with a "slow app" complaint. This episode we discuss some technical approaches to find and fix the issue.
Sign up for our Laravel tips newsletter!
The dreaded support ticket gets filed: App is slow! Before you get defensive or close as "Won't fix", consider a few tips on how to successfully approach this situation.
Sign up for our Laravel tips newsletter!
Ed Balls Day wikipedia article
Aaron and Joel have joined a fair number of projects over the years. Listen as they share some tips on how to make process less painful for your team.
Sign up for our Laravel tips newsletter!
Laravel and PHP have a rich ecosystem, but it's good to weigh the pros and cons before reaching for a new package. We share some things to consider.
Sign up for our Laravel tips newsletter!
Where are some good starting points for modernizing and improving a legacy codebase? Joel and Aaron discuss a few ideas where you could start.
Sign up for our Laravel tips newsletter!
Does anyone read these? Tweet @jclermont if you see this.
The eternal question that every developer hears: How long is that going to take? Aaron and Joel discuss some ways to frame that question, and how to provide an estimate that will avoid unnecessary disappointment.
Sign up for our weekly newsletter of Laravel tips.
Stepping into an unfamiliar codebase with a long history can be a challenge. Aaron and Joel share some tips on how to get started and build confidence that you're making things better.
Sign up for our newsletter of Laravel tips.
Some shy away from code review, not wanting to be critiqued. Aaron and Joel share some tips on how to get the most out of code reviews, and things to look for as a code reviewer.
Aaron and Joel talk about why they write tests and what sorts of tests they find valuable.
We discuss a couple scenarios where there's more than one way to do something, and how we think through our decision.
How do you learn a new technology? Or how do you find out what's changed in the latest version of something you already use? Aaron and Joel share some tips on what they do.
Exercises for Programmers from Pragmatic Press
The technologies we work with are extremely detailed. Without a clear mental model of how things work together, it's easy to get lost or confused.
Disagreements and debate can sap your team's energy. We'll talk about some ways to avoid unnecessary conflicts, and how to successfully handle a difference of opinion on your team.
Croissants are great because they're flaky, but no one likes a flaky test. We share some strategies on how to make your tests more reliable.
En liten tjänst av I'm With Friends. Finns även på engelska.