Filtra per genere
- 161 - Is the traditional code review workflow holding you back?
Have you ever had someone review your pull request, make changes without telling you, and just merge it in?
In the latest episode of the No Compromises podcast, we discuss whether the traditional code review workflow still makes sense in a world where AI tooling lets developers move faster than ever.
Aaron shares two real situations where a reviewer fixed and merged code without discussion, and we dig into why the lack of communication is the real problem, not the act of fixing things itself.
We also get into commit strategies, how friction in reviewing someone else's changes kills the learning, and why well-worn workflows deserve a fresh look when the tools around them have changed.
(00:00) - When a reviewer merges your PR without asking (03:31) - How we handled it differently with time pressure (05:43) - Should the reviewer just fix it and merge? (08:02) - Too many commits create friction for the author (13:44) - Silly bit
Get the kind of dev insights that make you rethink everything, delivered to your inbox via the Mastering Laravel newsletter.Your team is not the only one figuring this out. Join the conversation in the No Compromises community.
Sat, 19 Sep 2026 - 160 - Write better requirements or pay for it later
Have you ever handed off a feature request with barely any detail and expected the developer to just figure it out?
In the latest episode of the No Compromises podcast, we discuss why writing clear requirements is one of the most valuable things a business can do before development starts.
We make the case that even imperfect requirements beat none at all because they determine where the discovery happens, closer to the finish line rather than somewhere in the middle of the country.
We also cover why letting AI write your requirements for you is a trap, and how AI can help you review and cross-check requirements instead. And why the more detail you put in upfront, the less money you spend on surprises later.
(02:53) - Good requirements let you build start to finish (05:10) - Imperfect requirements still beat having none (07:36) - Why AI should not write your requirements (09:09) - Using AI to cross-check requirements instead (10:46) - Silly bit
Have a messy real-world project you're working through? Join the No Compromises community and talk it through with other developers.Subscribe to the Mastering Laravel newsletter for practical insights that help you communicate better with your development team.
Sat, 29 Aug 2026 - 159 - Which layer of caching does your slow app actually need?
When someone says your app is slow and you need caching, do you actually know which layer of caching they are talking about?
In the latest episode of the No Compromises podcast, we discuss the many different forms caching takes in a Laravel application and why reaching for the cache facade is not always the answer.
We walk through caching from the outside in, starting with edge caching via Cloudflare, moving into Laravel's cache facade for third-party API calls, and all the way down to memoization with the Once helper for expensive in-request calculations.
We also make the case that storing data in a database table can be a perfectly valid caching strategy, and that the right question to ask is not whether to cache but what kind of caching actually fits the problem.
(00:17) - Why caching means different things to different people (02:04) - Edge caching with Cloudflare explained (05:33) - When a database table beats the cache facade (07:45) - Memoization with the Laravel Once helper (09:19) - Silly bit
We have seen every caching mistake in the book. Our code review will find yours.Get practical Laravel tips like these delivered to your inbox every day by subscribing to our newsletter.
Sat, 15 Aug 2026 - 158 - Where do credentials end and configuration begin in your env file?
Have you ever fixed a failing test by adding a variable to phpunit.xml and moved on, not thinking twice about whether that was actually the right call?
In the latest episode of the No Compromises podcast, we discuss a real pull request disagreement about where environment variables belong and why it actually matters.
We draw an important distinction between credentials and workflow configuration in your env file, and why that difference should determine exactly what goes into phpunit.xml and what stays out.
We also get into why zeroing out API keys and hostnames in your test environment is not optional, and how a small oversight in one PR can quietly expose your tests to real third-party services.
(00:00) - A real PR disagreement about phpunit.xml (01:07) - Credentials vs workflow config in your env file (03:17) - Why Aaron is glad his tests failed (04:49) - How to properly isolate third-party test keys (07:25) - Silly bit
Come talk through decisions like these with developers who care in the No Compromises community.Sat, 01 Aug 2026 - 157 - Running AI agents on your production server is the new FTP
Have you ever let an AI agent run commands on your production server because you were stuck, telling yourself it would be fine?
In the latest episode of the No Compromises podcast, we discuss why giving AI agents access to your production environment is as reckless as the bad old days of FTPing code straight to your server.
We make the case that AI agents are non-deterministic and carry no responsibility, which makes them far more dangerous than a developer making a manual mistake on a live server.
We also cover why you should never blindly run complex chained commands that an agent suggests, how to verify what your agent is actually doing, and why a little friction in your workflow is worth the safety it buys you.
(00:00) - FTPing to production is still wrong in 2026 (01:50) - Running Tinker on production is no better (02:28) - AI agents on production servers is even worse (07:11) - How to verify what your agent is actually doing (move from 07:00) (11:03) - Silly bitStop letting non-deterministic tools make deterministic mistakes in your codebase. Get a code review.
Subscribe to our newsletter and get practical Laravel tips delivered to your inbox every day.
Sat, 18 Jul 2026 - 156 - Why having a human partner still beats relying on AI alone
Have you ever been stuck on a problem and instinctively reached out to a real person instead of an AI, and found that was exactly the right call?
In the latest episode of the No Compromises podcast, we discuss why human collaboration still matters in a world where AI seems to have all the answers.
Aaron shares a late-night hardware crisis that a blog post from a real human solved, something AI never surfaced, and connects it to a bigger point about the value of having a trusted person to work through problems with in real time.
We also get into why video calls beat text, why knowledge sharing still matters even when AI seems to know everything, and why pushing back on a partner often leads to better code than just agreeing.
(00:00) - A thunderstorm almost killed the podcast (02:58) - Why Aaron called Joel instead of AI (06:16) - The value of a real human work partner (08:01) - Why video calls change everything (09:15) - Human knowledge sharing still beats AI (11:47) - Silly bit
Come find your people in the No Compromises community.Sat, 04 Jul 2026 - 155 - What is really inside the AI tools you blindly install
When you install a package, you probably skip the source code. But what about the AI skills and CLAUDE.md files you are feeding directly into your agent?
In the latest episode of the No Compromises podcast, we discuss whether developers are reading the AI skills they install and why it actually matters.
We make the case that unread skills are riskier than unread packages because they quietly shape how your agent thinks and can introduce security vulnerabilities or opinions you would never have agreed to if you had just taken 10 minutes to read them.
We also look at the flip side, where reading those skills can make you a better developer, expose you to approaches you did not know existed, and help you guide your agents more intentionally across every project.
(00:00) - Do developers actually read package source code (02:19) - Why AI skills are riskier than packages (05:07) - Security risks hiding in unread skill files (09:30) - Reading skills as a learning opportunity (11:49) - Silly bit
Want a second set of eyes on the tools and packages your team is trusting? Find out how our code review service can helpSat, 20 Jun 2026 - 154 - How much logic is too much logic in a PHP enum
Have you ever added a method to an enum and then wondered if you just turned it into something it was never meant to be?
In the latest episode of the No Compromises podcast, we discuss where to draw the line when adding methods and logic to PHP enums.
We trace the evolution from magic strings to constants to interfaces, and explain why enums were the missing piece PHP needed all along.
We also cover when label methods and data structure helpers belong on an enum, why Eloquent queries cross a line, and how to avoid turning a simple enum into a bloated helper class.
(00:00) - Why magic strings and constants fall short (01:43) - How PHP enums replaced interface constants (02:26) - What methods belong on an enum (06:58) - The rule for keeping enum methods focused (10:44) - Silly bit
Join developers who think carefully about clean code decisions in the No Compromises community.Sat, 06 Jun 2026 - 153 - Your codebase is not a museum for old code
Have you ever opened a file to make a quick change, only to find dozens of lines of commented-out code making it nearly impossible to understand what's actually running?
In the latest episode of the No Compromises podcast, we discuss why keeping dead code around is slowing your whole team down.
We make the case that commented-out or unused code creates real confusion when searching a codebase, whether you are a new developer, a consultant, or even an AI agent trying to understand what is actually in use.
We also cover why Git is all the safety net you need, how Git bisect can recover deleted code you thought you might need someday, and why the fear of deleting code is almost always unfounded.
(00:00) - Why commented-out code slows everyone down (02:03) - How dead code creates false search results (05:10) - Dead code costs you more with AI agents too (05:55) - How Git bisect helps you recover deleted code (10:08) - When commenting out code is actually fine (11:45) - Silly bit
Join the conversation and share how your team handles dead code in our No Compromises communitySat, 23 May 2026 - 152 - Do you actually own the code you ship?
When a tool hands you a working solution, how much do you really need to understand about why it works?
In the latest episode of the No Compromises podcast, we discuss whether developers still care about understanding the code they ship, or whether that expectation is becoming a relic of the past.
We explore why knowing the "why" behind a solution isn't just about curiosity. It's about having enough domain knowledge to ask better questions, push back on bad answers, and ultimately produce better work.
We also walk through a real code review example involving a tricky Eloquent query, talk through the pressures that pull developers away from digging deeper, and consider what separates a line cook from a chef in how we approach our craft.
(00:16) - Are developers losing the habit of asking why (02:16) - How AI changes the copy-paste-and-move-on cycle (05:25) - Learning by accident while reading the manual (06:24) - The Eloquent query neither of us could explain (12:16) - Silly bit
Join acommunity of developers who still care about understanding the code they ship.Sat, 09 May 2026 - 151 - Do you actually need a multi-tenancy package?
Ever feel like a project requirement says "we need multi-tenancy," and you're not even sure what that means in your specific context?
In the latest episode of the No Compromises podcast, we discuss how to evaluate multi-tenancy needs before committing to an architectural approach.
We break down what multi-tenancy actually means, from separate databases to custom domains and per-tenant configuration, and why the real question isn't which package to use, but whether you need one at all.
We also explore when hand-rolling a simple solution beats adopting a full package, what legal and compliance requirements can force your hand, and why this is one of those decisions that's genuinely hard to undo later.
00:00 Defining what multi-tenancy actually means
02:11 Different ways to structure multi-tenant systems
03:44 When separate databases are truly necessary
04:57 Questions to ask before choosing an approach
08:25 Package vs. rolling your own trade-offs
11:30 Silly bitIf you want guidance on decisions like these, check out our code review service to get expert eyes on your architecture.
Sat, 25 Apr 2026 - 150 - Local and production should match even for Laravel tools
Ever installed a Laravel package locally and immediately accessed it, only to wonder later whether your access controls are actually working in production?
In the latest episode of the No Compromises podcast, we discuss why tools like Telescope and Horizon behave differently in local environments versus production, and why that inconsistency is a problem worth solving.
We make the case that developer convenience should never come at the cost of security confidence. If your gate logic cannot be exercised locally, you cannot truly trust it is protecting your production environment.
We also dig into how Aaron worked around the issue by overriding the package's service provider logic, and why Laravel has since made this easier to handle cleanly.
(00:00) - Why local and production environments should match (01:42) - How Telescope's gate logic behaves differently locally (03:01) - The risk of untestable access control logic (07:53) - How Aaron overrode the service provider to fix it (10:23) - Silly bit
(00:00) Why local and production environments should match
(01:42) How Telescope's gate logic behaves differently locally
(03:01) The risk of untestable access control logic
(07:53) How Aaron overrode the service provider to fix it
(10:23) Silly bitOur courses took the production hits so your app doesn't have to.
Sat, 11 Apr 2026 - 149 - When weird code needs to explain itself
Have you ever looked at a colleague's code and thought, "This is clearly wrong," only to find out it was actually a well-reasoned workaround for a tricky bug?
In the latest episode of the No Compromises podcast, we discuss what happened when Aaron reviewed Joel's code and couldn't make sense of a pattern spread across multiple Livewire components.
The code wasn't bad, it was solving a real UX flicker bug in an older version of Mary UI. But without context, it looked like a mistake and nearly got rejected. The fix wasn't just refactoring; it was giving the workaround a proper home: a trait with a descriptive name, clear method names, and thorough documentation explaining the bug, the reason for the pattern, and when it can eventually be removed.
We also talk about why "the explanation is in the PR note" isn't good enough, how AI coding agents can unknowingly propagate patterns they don't understand, and why strange code deserves to look strange, on purpose.
Explore Mastering Laravel resources to deepen your understanding of patterns like these.
00:00 The confusing code review that started this
01:15 Flagging the unclear pattern across components
03:54 The Mary UI toast flicker bug explained
05:45 Naming, documentation, and protecting the whole team
09:30 Silly bitSat, 28 Mar 2026 - 148 - Are you testing your app or just the framework?
Do you ever finish writing a test and wonder if it is actually proving anything about your code or just confirming that Laravel works?
In the latest episode of the No Compromises podcast, we discuss how to tell the difference between tests that validate your logic and tests that merely exercise the framework.
We share a practical gut check: if you cannot make a test fail by changing something in your own application code, it probably should not be in your test suite. We also look at this idea from the other direction, asking whether the code being tested is something we actually wrote.
We also dig into why testing validation rules is worth the effort even when they feel boilerplate, how feature versus unit test style shapes these decisions, and why the real goal is simply getting to a place where your tests help you ask the right questions.
Join the Mastering Laravel community at https://masteringlaravel.io/community
00:00 Are we testing code or framework
02:00 Joel metric for framework-only tests
05:15 Bottom-up testing perspective by test type
07:36 Why validation rules still deserve tests
10:40 Silly bitSat, 14 Mar 2026 - 147 - Being anti-hype does not mean being anti-AI
Does everyone need to have an AI hot take right now, or is there value in waiting until you actually know what you're talking about?
In the latest episode of the No Compromises podcast, we discuss why it took us 147 episodes to finally tackle the topic of AI.
We dig into the tension between wanting to speak with authority and feeling pressure to share before you're ready. Aaron makes the case for building deep knowledge first, while acknowledging that people at every stage of the learning curve play an important role in moving the community forward.
(00:00) - Why we haven't talked about AI yet (01:00) - Building deep knowledge before sharing opinions (02:30) - AI moves faster than JavaScript frameworks (04:30) - Zoom out before sweating the details (06:15) - Every stage of the learning cycle matters (07:45) - Silly bit
We also talk about how fast the AI landscape is shifting, why zooming out matters more than memorizing details, and why being a slower mover isn't something to apologize for.
Want to get that new AI tip we mentioned? Sign up for the Mastering Laravel newsletter.Sat, 28 Feb 2026 - 146 - Three ways to plan an upgrade when your codebase is a patchwork
When your project has the same thing done three different ways, how do you bring everything up to date with a consistent approach?
In the latest episode of the No Compromises podcast, we discuss different strategies for tackling upgrades when parts of your codebase are multiple versions behind.
We walk through two main approaches and weigh the tradeoffs for both the developer doing the work and the person reviewing it.
(00:00) - Setting up the upgrade scenario (02:15) - Approach one: upgrade each area to current (04:00) - Why the reviewer's experience matters too (07:30) - A third approach neither one expected (09:00) - Silly bit
Want help upgrading your Laravel project?Sat, 14 Feb 2026 - 145 - Stop doing math in your config files
Ever feel the urge to write out calculations in your code to make them "self-documenting"?
In the latest episode of the No Compromises podcast, we discuss why inline math in configuration values is a habit worth breaking.
Aaron argues that if a value never changes, there's no reason to calculate it every time. A well-placed comment can explain how you got the number without the unnecessary overhead.
We also cover how comments can clarify units like seconds versus milliseconds, why this thinking applies beyond config files, and how questioning small habits can improve your code overall.
(00:00) - How many seconds is five minutes? (01:45) - The problem with inline config math (03:45) - Using comments instead of runtime calculations (05:30) - Why questioning habits improves code (07:00) - Silly bit
Want a second set of eyes on your Laravel project?Sat, 31 Jan 2026 - 144 - What could be worse than having no tests?
Found a cool package on Laravel News? But how do you know if it's actually worth installing?
In the latest episode of the No Compromises podcast, we discuss what we look for when evaluating third-party packages before bringing them into a project.
Aaron makes the case that what he finds in the tests folder is essentially a deal-breaker: no tests means no trust, but leaving default example tests behind is somehow even worse. Tests reveal whether the maintainer thought through edge cases and serve as living documentation when the README falls short.
We also cover the other signals we weigh: GitHub stars, download counts, issue responsiveness, and how quickly maintainers keep up with new Laravel versions.
(00:00) - Evaluating packages you stumble across (01:30) - Why leftover example tests frustrate Aaron (03:45) - Tests as documentation and edge case proof (05:00) - Checking issues and Laravel version history (08:00) - Silly bit
Want to work with us on your project?Sat, 17 Jan 2026 - 143 - Why I changed my mind about down migrations
Have you ever built a strong case for something, only to realize later you were solving the wrong problem?
In the latest episode of the No Compromises podcast, we discuss Aaron's surprising reversal on down migrations, a topic we've publicly discussed on this podcast.
We walk through the original arguments for writing down migrations and deconstruct each one.
(00:00) - The original case for down migrations (03:45) - Aaron changes his stance (05:15) - Why seeders beat rollbacks for local dev (10:30) - Rethinking the production rollback scenario (14:45) - Silly bit
Keep your knowledge fresh, check out Mastering Laravel.Sat, 03 Jan 2026 - 142 - Why senior developers feel wrong more often
Ever catch yourself second-guessing decisions you were confident about just months ago? Does that mean you're getting worse at your job?
In the latest episode of the No Compromises podcast, we explore why senior developers often feel "wrong" more frequently than they did earlier in their careers.
Aaron makes the case that this isn't a sign of declining skill—it's evidence of a richer mental model that reveals nuance where things once seemed black and white.
We discuss how feedback sources shift with experience, why changing your mind signals growth rather than failure, and how to reframe architectural decisions as a spectrum rather than binary choices.
(00:00) - Feeling wrong more often as a senior dev (01:45) - Knowledge plateaus and how growth resets them (04:45) - How feedback sources change with experience (07:00) - Binary thinking versus nuanced decision-making (09:15) - Silly bit
Want two Laravel experts to review your code?Sat, 20 Dec 2025 - 141 - Should you ever hand-format code?
Ever feel like you're wasting your time tweaking a section of code to get it just right? We have tools for that, don't we?
In the latest episode of the No Compromises podcast, we discuss when to trust auto-formatters and when to nudge code by hand.Aaron makes the case that a few mindful minutes of “prettying up” can unblock harder thinking, without surrendering judgment to tools.
We set limits on this approach, share a tiered break strategy, and make it clear why you still own what the formatter changes.
(00:00) - Auto-formatters vs subjective style choices (01:15) - Edge cases tools miss and human tweaks (03:15) - Using light formatting to unlock hard problems (05:15) - A tiered break strategy for focus (07:00) - Silly bit
Want two Laravel experts to review your code?Sat, 06 Dec 2025 - 140 - Discussing different ways to model data
It's easy to overcomplicate data modeling, especially when enums, relationships, and future requirements are in play.
(00:00) - Setting up the technical problem (02:00) - Pivot tables vs JSON columns (05:15) - Filtering and validation considerations (07:15) - Deciding on the best approach (09:50) - Silly bit
In the latest episode of the No Compromises podcast, Joel brings Aaron a real-world technical dilemma: how to model a relationship between two models when types are stored as enums, not models.
We discuss the pros and cons of pivot tables versus JSON columns, the importance of context before jumping to solutions, and how developer instincts can sometimes get in the way of clarity.
Would you like us to review your code or application architecture?Sat, 22 Nov 2025 - 139 - Read outside tech to expand your horizons
It's easy to get so laser-focused on programming and tech, that you close yourself off to other avenues of learning.
In the latest episode of the No Compromises podcast, Aaron argues that non-tech reading can sharpen your engineering thinking.
We discuss balancing breadth without diluting focus, and how to turn casual reading into active learning with quick capture habits.
(00:00) - An example from a book on business (03:30) - Don’t go too broad (05:15) - Practice active learning (07:15) - Read something different (07:30) - Silly bit
You should still read our Laravel books though.Sat, 08 Nov 2025 - 138 - Rewriting without a map: shipping an MVP from a legacy app
Multiple times we have encountered the messy reality of rebuilding a decade-old system: stale specs, missing specs, and stakeholders who want "the same… but better."
In the latest episode of the No Compromises podcast, we share a lightweight framework for agreeing on an MVP, tagging "post-MVP" ideas, and negotiating trade-offs while still making progress.
We walk through practical tactics for parallelizing work and learning as you go.
(00:00) - Rebuilding an old system without copying its flaws (02:00) - Two extremes: too many specs or none at all (03:00) - MVP tension: ship value vs. future wishes (04:45) - Define MVP, capture unknowns as post-MVP tickets (05:30) - Build the first slice and learn (07:00) - Code foundations while refining scope (08:30) - Trade-offs as collaboration, not confrontation (09:30) - Takeaway: progress, check-ins, iterate together (10:00) - Silly bit
Want to join one of our community dev calls?Sat, 25 Oct 2025 - 137 - A composable, versioned toolkit for Laravel projects
We join a fair number of projects, and we often help teams bring their project up to our standard. This means bringing a lot of the same small pieces from project to project.
In the latest episode of the No Compromises podcast, we rethink our “project standard” repo. Instead of a full Laravel skeleton, we propose a composable library of tool-specific, versioned configs (PHPUnit, Docker, etc.).
We walk through the benefits for greenfield and legacy work, open questions about test organization, and how this approach scales as tools evolve.
(00:00) - Why we keep our tooling current (00:15) - The “project standard” repo is aging (01:30) - Reference guide vs installable skeleton (02:30) - Supporting old and new stacks (versions, tags) (03:30) - Pivot: organize by tool and version, not app (04:30) - Example plan: folders for PHPUnit 11/12 (and beyond) (05:15) - What belongs where? Tests, traits, and context (10:00) - Docker-first thinking; where Horizon config lives (11:15) - Open questions: PHPUnit vs Pest vs “testing” folder (12:15) - Takeaway: evolve the repo as the tools evolve (12:45) - Silly bit
Want help making your project as organized as one of our projects?Sat, 11 Oct 2025 - 136 - Should you use DTOs in Laravel?
DTOs (Data Transfer Objects) aren't mentioned anywhere in the Laravel docs, but some devs use them heavily in their applications, whereas other devs never use them at all.
In the latest episode of the No Compromises podcast, we weigh the pros and cons of DTOs in everyday Laravel apps, comparing them to form requests, PHPDoc-typed arrays, and service-layer boundaries, and share one area where DTOs truly shine.
The takeaway: keep DTOs in the toolbox, but reach for them intentionally, not by habit.
(00:00) - Framing DTOs in a stricter PHP world (01:15) - Our current practice: hybrids, few true DTOs (02:45) - Form requests, `safe()`, and typed inputs (03:45) - Reuse across API and form layers rarely aligns (04:30) - Where DTOs shine: normalizing multiple APIs (05:45) - Service boundaries: wrapping vendor objects (e.g., Stripe) (06:15) - PHPDoc-typed arrays vs DTO overhead (06:45) - Conventions, Larastan levels, and avoiding ceremony (07:45) - Treat DTOs as a tool, not a rule (09:15) - Silly bit
Want to discuss how we can help you with an architecture review?Sat, 27 Sep 2025 - 135 - Sunsetting a company app without loose ends
Business change and projects end, but how do you wrap up and sunset an app, especially one you've worked on for years?
In the latest episode of the No Compromises podcast, we share a practical checklist for winding down an app when the whole company is closing. From documenting services and dependencies to deciding what data to retain, we cover backups, credentials, and why deleting local copies matters for security and sanity.
(00:00) - Sunsetting a company vs project handoff (02:15) - First goals: stop charges, purge data (03:45) - Document before shutting anything off (04:15) - Use README/PRODUCTION.md and password manager (05:45) - Decide on retaining code, DB, uploads (07:15) - Hunt secrets in .gitignore and dotfiles (09:15) - Delete local containers and repos by default (11:30) - Silly bit
Want peace of mind that your project is ready for whatever happens in the future. Schedule a call with us today.Sat, 13 Sep 2025 - 134 - When building a UI makes more sense than bloating your seeders
What do you do when you need to create some data but you haven't built out the UI for that data yet? A seeder is a great approach, but is it always the right one?
In the latest episode of the No Compromises podcast, we dive into a real project where starting with the most complex feature made test data management painful. Instead of exploding the complexity of our seeders, we built a minimal UI to manage test data.
We also talk about some other unexpected benefits, and talk through the trade-offs and why detours like this should feel uncomfortable (and be tightly scoped).
(00:00) - Starting deep exposes messy user permutations (02:45) - Seeder explosion vs. a minimal UI (03:45) - Reframing the “detour” after using it (05:30) - Why the mini-UI helped: faster iteration, fewer seed resets (07:45) - Dogfooding + tester debugging benefits (08:00) - Guardrails: detours should feel uneasy and stay tight (09:00) - Silly bit
Need help on your Laravel project? Hire two experts and accelerate your progress.Sat, 30 Aug 2025 - 133 - Blade includes vs components: how we decide
Blade gives you two big levers for keeping views maintainable: @include and Blade components.
When should you use one versus the other?
Does it matter?In the latest episode of the No Compromises podcast, we lay out a clear heuristic for when to extract markup for organization (includes) versus when to encapsulate and reuse with controlled scope (components).
We also touch on scope pitfalls, “passing for documentation,” and why performance worries usually lie elsewhere.
Sign up for the free Mastering Laravel newsletter. The highest value-to-time ratio you will find.
Sat, 16 Aug 2025 - 132 - Changing your mind about when() and unless() in Eloquent
Aaron admits he used to wrap every query in plain old if-statements—until Laravel’s when()/unless() helpers (and arrow functions) won him over. He and Joel compare their journeys, debate readability trade-offs, and share guidelines for deciding which style to use. Along the way they discuss false assumptions, evolving “code grammar,” and how tools such as Rector can automate the switch.
(00:00) - Intro – refining long-held opinions (00:45) - Aaron’s original “query-then-if” pattern (01:45) - Why when() first felt clumsy (closures, scopes, extra params) (03:45) - Arrow functions & smaller conditions make when() nicer (05:00) - Joel’s lingering objection: avoiding unless() for readability (06:45) - Seeing the same helper everywhere changes minds (08:30) - Takeaways – keep revisiting old habits as Laravel evolves (09:30) - Silly bit
Want help learning how to more quickly refactor and standardize your app with Rector?Sat, 02 Aug 2025 - 131 - 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 PRs (02:30) - Joel’s commit-by-commit strategy and where it helps (04:50) - Aaron’s Tetris-style holistic review (and leaving self-notes) (07:45) - When atomic commits backfire and trust becomes a factor (08:45) - Silly bit
Sign up for the newsletterSat, 19 Jul 2025 - 130 - 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-debt risks (05:00) - Declaring non-negotiables to clients (06:45) - Docs that survive “hit-by-bus” events (08:00) - Solo-dev reputation boosters (08:45) - Silly bit
Want to level up your skills as a Laravel developer?Sat, 05 Jul 2025 - 129 - 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 between logic and UI tests (12:45) - Silly bit
Want help getting started with your test coverage? Going from 0% to 1% is the hardest step. We can help!Sat, 21 Jun 2025 - 128 - 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-off strategy: letting others poke the prototype (11:45) - Silly bitSat, 07 Jun 2025 - 127 - 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
Sign up for a short, but useful, Laravel tip each day in our newsletterSat, 24 May 2025 - 126 - 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 time” excuses hide real priorities (01:45) - Sell improvements by proving clear payoff (04:15) - Face hidden conflicts and track gains (08:30) - Reframe tasks with a priority‑shift exercise (10:30) - Silly bit
Reading one of our awesome books "takes time" but will make you a better developer.Sat, 10 May 2025 - 125 - 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‑after stories (05:15) - Balancing honesty with motivation (09:15) - Silly bit
Stay tuned for part 2... Until then, there's always https://masteringlaravel.ioSat, 26 Apr 2025 - 124 - 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 page numbers (09:20) - Silly bitSat, 12 Apr 2025 - 123 - 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 technical debt? We can help!Sat, 29 Mar 2025 - 122 - 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) - Learning to ask the right questions (09:15) - Silly bit
Here is a way to explore how we could help your projectSat, 15 Mar 2025 - 121 - 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 new practices (12:00) - Silly bit
Sign up for the free Mastering Laravel newsletterSat, 01 Mar 2025 - 120 - 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.Sat, 15 Feb 2025 - 119 - 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 bitSat, 01 Feb 2025 - 118 - 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) - Silly bit
Want some advice on writing better tests for your app? Contact us.Sat, 18 Jan 2025 - 117 - 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 Eloquent features with DB builder tools (07:15) - Important considerations when dropping to lower level DB access (10:00) - Silly Bit
Check out the Mastering Laravel community.Sat, 04 Jan 2025 - 116 - 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 feature flags should be temporary (05:25) - Different uses of feature flags across languages (07:20) - Feature flags in modern Laravel applications (08:35) - Silly Bit
Sign up for free to get those amazing Laravel tips delivered each daySat, 21 Dec 2024 - 115 - 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) - Extra risk for a 1.0 (08:45) - When new tech might be worth the risk (11:50) - Silly Bit
Want calm, reasonable developers like us to help with your project?Sat, 07 Dec 2024 - 114 - 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 newsletter and get short, practical Laravel tips delivered fresh to your inbox.Sat, 23 Nov 2024 - 113 - 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!
Sat, 09 Nov 2024 - 112 - 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 development? Check out the Mastering Laravel community.Tue, 29 Oct 2024 - 111 - 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 you just making the tool happy? (07:45) - An example of going too far (10:10) - Silly bit
Check out the newly published volumes of Laravel tips. Collect them all!Tue, 15 Oct 2024 - 110 - 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.Tue, 01 Oct 2024 - 109 - 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!Tue, 17 Sep 2024 - 108 - 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) - Silly bit
Sign up for the free Mastering Laravel newsletter and learn a little something about Laravel each day.Tue, 03 Sep 2024 - 107 - 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 Laravel developers that you can ask for help?Tue, 20 Aug 2024 - 106 - 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.
Tue, 06 Aug 2024 - 105 - 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 external tests? (08:30) - You can't always know when you'll break an external integration (11:00) - Check on a schedule? (13:00) - Silly bit
Would you like to take 2 - 3 minutes each day to learn a little bit about Laravel? Join for free, unsubscribe any time.Tue, 23 Jul 2024 - 104 - 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
Would you like to see what over 4,000 Laravel developers like about the Mastering Laravel newsletter? It's free to sign up.Tue, 09 Jul 2024 - 103 - 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
Tue, 25 Jun 2024 - 102 - 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
Tue, 11 Jun 2024 - 101 - Magic methods are okay in the right context
"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
Tue, 28 May 2024 - 100 - Should you let your admin do that?
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
Tue, 14 May 2024 - 99 - Don't get overwhelmed by errors in your application
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.
(00:00) - Your app should be tracking errors (02:30) - Better than just parsing logs (05:15) - Don't get overwhelmed when you first turn it on (06:00) - How to triage and prioritize (07:30) - Know about performance issues (10:30) - Silly bitTue, 30 Apr 2024 - 98 - Does it matter how your code looks?
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.
Tue, 16 Apr 2024 - 97 - The life cycle of database hosting
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!
Tue, 02 Apr 2024 - 96 - Are you really going to need that abstraction?
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.
(00:00) - Life before interfaces in PHP (02:30) - Going too far with interfaces (04:45) - A discussion with payment gateways (07:30) - Abstracting the database as another trap (09:15) - Laravel makes good use of interfaces (10:05) - Silly bit
Need some perspective on your Laravel project? We offer a code review service. Get in touch to learn more.Tue, 19 Mar 2024 - 95 - Should you change application code to support a test?
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.
(00:00) - Sometimes changing code makes testing easier (01:30) - Different types of code changes (02:45) - An example with Laravel jobs (04:30) - A time when it's okay to change code while testing (08:50) - Avoid problems by writing tests earlier (09:30) - Silly bit
Don't "compromise" on testing. See how we can help level up your Laravel project.Tue, 05 Mar 2024 - 94 - What is the point of design patterns?
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.
Tue, 20 Feb 2024 - 93 - Move that logic out of your view
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.
(00:00) - Trying to keep logic out of the Blade view (02:00) - Using the simplest form of logic (03:45) - Business logic doesn't belong in the view layer (04:15) - Condition moved into the controller (05:20) - Secondary benefit of testing
Check out the Mastering Laravel YouTube channelTue, 06 Feb 2024 - 92 - Is it worth switching to another tool?
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!
Tue, 23 Jan 2024 - 91 - How we use seeders in our applications
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.
(00:00) - Diving into how we use seeders in our applications (01:40) - Should a seeder create users? (04:30) - Using seeders in multiple contexts (09:50) - The one time we might use seeders with tests (11:50) - Silly bit
Would you like some expert help on your Laravel application?Toss a coin in the jar if you enjoyed this episode. We really appreciate it!
Tue, 09 Jan 2024 - 90 - Don't just get mad at some tech, dig in and learn!
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.
(00:00) - Once again, Aaron reads the docs (02:30) - Recognizing when you don't know something (03:30) - Approaches for learning Javascript and CSS (04:20) - What is the manual for Javascript/CSS? (07:13) - Joel learning CSS hands-on (09:55) - Learning through repetition (12:00) - Keep an eye on tech that makes you annoyed (13:23) - Silly bit
Wow, 90 episodes in a row. Never missed one! Want to hire some super reliable Laravel developers?Toss a coin in the jar if you enjoyed this episode. We really appreciate it!
Tue, 26 Dec 2023 - 89 - Making a case for consistency
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?
(00:00) - We like keeping things tidy in our projects (01:20) - Have a README, please (03:30) - Is there a business case for consistency across projects? (05:30) - An example with Docker build speeds in CI (06:50) - Consistency in naming business concepts (09:45) - Silly bit
Short, practical Laravel tips delivered fresh to your inbox. Sign up today!Tue, 12 Dec 2023 - 88 - Different approaches to upgrading to a new major Laravel version
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?
Tue, 28 Nov 2023 - 87 - Maybe you don't need to write code this time
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.
(00:00) - Considering better ways to track topics (01:00) - The developer brain kicks in (03:05) - Building it in Slack without any code (05:15) - Feeling empathy for the non-devs out there (06:45) - Deciding not to automate everything (09:15) - Another example with a stats dashboard (11:25) - Silly bit
Need help with your Laravel app? We've seen it all and can get things done faster than you're used to.Tue, 14 Nov 2023 - 86 - Should you manage roles and permissions with a UI?
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?
(00:00) - Roles and permissions landscape (01:45) - A UI for managing permissions? (04:14) - Rolling out new permissions via migrations (06:45) - What about managing roles in a UI? (09:00) - Covering permissions in tests (10:30) - Maybe a read only UI? (10:55) - Silly bit
The validation worksheet has been retired, but check out our validation book.Tue, 31 Oct 2023 - 85 - The changing value of books throughout your career
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 bitYou could spend a few thousand dollars on books, but maybe that money is better spent working with us.
Tue, 17 Oct 2023 - 84 - Some reasons to write a down method in your migrations
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.
(00:00) - Is writing down migration methods just a weird habit? (02:30) - A deploy that goes horribly wrong immediately (03:45) - Rolling forward due to database engine limitations (05:00) - How long is too long to rollback? (06:30) - Another use case: switching branches (08:30) - A mental unit test for your logic (12:35) - Silly bit
No call to action on this episode, just go enjoy some quiet time to yourself.Tue, 03 Oct 2023 - 83 - Managing a micro-manager
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.
(00:00) - Uncomfortable projects and clients (02:45) - Ask them directly "what's up" (05:00) - Understand what they want from you (07:00) - Let's role play (10:30) - The extra work is worth it (11:42) - Silly bit
Need help building your Laravel product? Hire two expert Laravel developers for less than you might think.Tue, 19 Sep 2023 - 82 - A couple handy features in PHPStormTue, 05 Sep 2023
- 81 - Tools should work for you, not boss you around
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?
(00:00) - We really like PHPStan (01:30) - Can you go too far with a tool, though? (03:40) - Things to consider if you're newer to Laravel or PHP (05:30) - PHPStan has helped us find bugs (06:25) - Accessing route parameters in a type-safe way (09:22) - Know how the tool works, to make it work for you (11:13) - Return types on controller actions (14:22) - Silly bit
Need help getting unstuck with a Laravel issue? We can help!Tue, 22 Aug 2023 - 80 - Harnessing that post-conference excitement
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?
(00:00) - Post-conference excitement is a real thing (01:11) - The reality of how conferences are structured (03:50) - Talks share things you could do not things you should do (05:00) - How to apply new ideas in your daily work (06:08) - Specific challenges within a team (11:40) - Silly bit
Want to see the musical conference talk Joel mentioned?You like short things, that's why you listen to this podcast. How about a short Laravel tip in your inbox?
Tue, 08 Aug 2023 - 79 - How do you tell a teammate they might be wrong?
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?
(00:00) - Programmers have opinions on a lot of topics (02:25) - Start by asking questions (03:45) - Get smart with leading questions (05:25) - Do you always have to call out something you think is wrong? (07:15) - Conflict doesn't mean confrontation
Need help from some seasoned Laravel devs? Don't be shy. We don't bite.Tue, 25 Jul 2023 - 78 - Lots of different ways to test record creation
We get a bit nerdy here and dive deep on a few different ways to test record creation.
(00:00) - We like testing (01:20) - One way to test creating a record (03:00) - Limitations of fetch the record with first() (05:30) - Considerations when using latest() in tests (07:00) - An approach for using auto-increment IDs (08:05) - Silly bit
Read more of our thoughts at masteringlaravel.ioTue, 11 Jul 2023 - 77 - How do you avoid distractions?
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.
(00:00) - Feeling the pull of distraction when trying to focus on work (01:30) - Email - the biggest distraction (03:00) - The world won't end if you keep email closed (06:00) - Setting expectations with others (07:45) - Being a hero might actually be unfair to others (08:20) - Productivity is really about well-being, not cranking out work (09:00) - Be realistic when planning (10:00) - Experiment and find what works for you (11:30) - Social media as a distraction (13:00) - Silly bitTue, 27 Jun 2023 - 76 - When should you use final classes or private properties?
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
(00:00) - Final classes, the hot topic on Twitter (01:00) - Aaron's opinion has evolved over the years (03:15) - Packages vs applications (04:00) - What about making PHPStan happy? (06:45) - What about reducing support burden on package maintainers? (10:05) - What about private properties? (11:15) - Aaron wants to be wrong (11:45) - Silly bit
Want to hire us and argue about it? Book a callTue, 13 Jun 2023 - 75 - Is it ever ok to delay writing tests?
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.
(00:00) - Our secret podcast agenda (01:00) - Project setup (02:30) - Tests are good, but they do add time (03:15) - Some ambiguity on "is this what the user needs/wants?" (06:00) - Discussing the decision to delay tests as a team (07:15) - Conclusion - it's the audience, not the timeline (08:10) - Side benefit of knowledge sharing (09:15) - Silly bit
Become a more confident Laravel developer. Sign up for practical tips at masteringlaravel.ioTue, 30 May 2023 - 74 - Should an Eloquent relationship include soft-deleted records?
Show notes:
(00:00) - Relationships and trashed records (02:00) - One-to-one relationship (02:39) - Are soft-deletes bad then? (03:30) - Balancing end user and developer experience (05:00) - One-to-many relationships are even more problematic (08:00) - Does the specific domain matter? (10:15) - Agree on the rule as a team (10:50) - Silly bit
Get a free ebook of Laravel security tipsTue, 16 May 2023 - 73 - Interviewing other developers like a human
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:
00:00 Our different work backgrounds01:00 How to kick off a technical discussion in an interview03:45 How to leverage their existing experience04:50 Learn about their communication style06:00 Figuring out how someone thinks about a problem09:30 Don't code review actual company code11:50 Silly bitTue, 02 May 2023 - 72 - The benefits of working with other developers
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:
(00:00) - Topic intro: the benefits of working with someone else (02:46) - Code review can actually be nice (04:45) - The benefits of being "challenged" (06:20) - Picking up tips just seeing how someone else works (06:53) - Human skills are important tooTue, 18 Apr 2023 - 71 - Changing our mind about queues in testing
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
00:00 Sometimes we change our mind over time02:00 Changing queue from sync to null in tests03:45 Feature versus integration tests04:40 Where do you test job logic?05:30 White box versus black box testing07:15 Laravel queue drivers and how faking works08:55 Why use events at all?09:30 The new approach is faster too11:15 Silly bitWant to make us happy with a random email? Check out our free and paid books on masteringlaravel.io
Tue, 04 Apr 2023 - 70 - Too many rules?
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.
00:00 I like rules01:20 Maybe going too far with rules - the scenario03:05 Bug explanation05:03 A tangent on test setup06:30 A possible rule to prevent this bug07:17 Why this rule went too far08:50 We still want to fix it, just not now09:45 Another example with syntax and code standards12:53 Silly bitNeed help to set up or improve your team's coding standards?
Tue, 21 Mar 2023 - 69 - Keeping an open mind with other languages and tools
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.
00:00 It's easy to hate on tools you don't use01:02 Why are there different kinds of tools?03:30 Is it "bad" because we don't understand it?04:42 Learn from other communities07:10 Don't be a jerk07:55 Silly bitNeed some help with your Laravel application?
Tue, 07 Mar 2023 - 68 - What we look for in a package
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?
00:00 A healthy ecosystem of packages01:02 Too much of a good thing?02:48 Risks to consider04:13 Other ways to share05:34 Think before you promote08:02 Consider the friction08:39 Silly bitWould you like help auditing the packages in your Laravel application?
Tue, 21 Feb 2023 - 67 - Blogging versus tweeting
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?
00:00 Why blogging is beneficial02:43 Slowing down before you publish04:30 Tips that provide value08:11 Platforms can go away09:36 Silly bitCheck out the new articles section on masteringlaravel.io
Tue, 07 Feb 2023 - 66 - Knowing when to use new language or framework features
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?
PHP marches forward (00:00)Upgrade strategy depends on team size (01:20)Considerations for new language features (02:33)Performance gains (03:27)Readability (04:56)How to adopt new features (06:16)Depends on the project's maturity (08:14)Upgrading for security (09:30)Silly bit (11:17)If you enjoy this podcast, we'd really appreciate help spreading the word. Share it with your fellow PHP and Laravel developers.
Tue, 24 Jan 2023 - 65 - Going on a bug hunt
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.
Think of a bug like a fun code puzzle (00:00)Don't get stuck for too long (01:22)The confusing CSV bug (02:35)Diffing the files (06:05)Digging deeper into Symfony and PHP (08:07)Getting stubborn about fixing this (11:29)Silly bit (12:26)
Why would you validate your MIME types? Learn that and a whole lot more with our validation book: Mastering Laravel Validation RulesTue, 10 Jan 2023 - 64 - Thinking about the user, even in the details
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.
00:16 Why do we write code?01:39 The importance of user experience02:54 A specific example of user-focused thinking04:34 Choosing the most helpful HTTP status code05:44 What if it’s an API response?07:17 How much detail in an error is useful to a user?08:35 Silly bitMove from competent to confident - become a better Laravel developer with the free resources available at masteringlaravel.io
Tue, 27 Dec 2022 - 63 - Why do you write your tests like that?
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.
1:06 - One weird pattern we’ve seen in Laravel project tests2:23 - Can you explain why you’re doing this?3:50 - “It’s more readable”5:55 - Principle: learn a thing, do a thing, dissect a thing6:30 - Is it okay to have code duplication in tests?8:20 - How tests are different from application code11:16 - Don’t add application code just for your tests13:06 - Silly bitNeed 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.
Tue, 13 Dec 2022 - 62 - Avoid painting yourself into a corner
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.
00:16 The problem: this code works, but I don't like it01:17 What we mean by "I don't like this code"02:22 A specific example of code I didn't like03:52 Code review sparks a discussion, and a solution05:20 Principle: don't get locked in to your first approach06:03 Principle: the benefits of code review07:22 Don't be defensive, and the code reviewer isn't always right08:03 Silly bitTue, 29 Nov 2022
Podcast simili a <nome>
Notes On Work - by Caleb Porzio Caleb Porzio
El Partidazo de COPE COPE
Herrera en COPE COPE
Es la Mañana de Federico esRadio
La noche de Cuesta esRadio
La Trinchera de Llamas esRadio
Hondelatte Raconte Europe 1
Affaires sensibles France Inter
LEGEND Guillaume Pley
Laravel Creator Spotlight Laravel News
El colegio invisible OndaCero
La Rosa de los Vientos OndaCero
Les grands dossiers de l'Histoire par Franck Ferrand Radio Classique
Espacio en blanco Radio Nacional
Enquêtes criminelles RTL
Entrez dans l'Histoire RTL
Le grand récit RTL
Les Grosses Têtes RTL
L'Heure Du Crime RTL
Parlons-nous RTL
El Larguero SER Podcast
SER Historia SER Podcast
Todo Concostrina SER Podcast
Un Libro Una Hora SER Podcast
