Home
Categories
EXPLORE
True Crime
Comedy
Business
Society & Culture
History
Sports
Health & Fitness
About Us
Contact Us
Copyright
© 2024 PodJoint
00:00 / 00:00
Sign in

or

Don't have an account?
Sign up
Forgot password
https://is1-ssl.mzstatic.com/image/thumb/Podcasts221/v4/9c/42/96/9c429693-a57f-0804-772a-302e453cc9c8/mza_16982737108441617533.jpg/600x600bb.jpg
No Compromises
Joel Clermont and Aaron Saray
139 episodes
1 day ago
Two seasoned salty programming veterans talk best practices based on years of working with Laravel SaaS teams.
Show more...
Technology
RSS
All content for No Compromises is the property of Joel Clermont and Aaron Saray and is served directly from their servers with no modification, redirects, or rehosting. The podcast is not affiliated with or endorsed by Podjoint in any way.
Two seasoned salty programming veterans talk best practices based on years of working with Laravel SaaS teams.
Show more...
Technology
Episodes (20/139)
No Compromises
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.
Show more...
1 day ago
9 minutes

No Compromises
Rewriting without a map: shipping an MVP from a legacy app

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.
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?
Show more...
2 weeks ago
11 minutes

No Compromises
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?
Show more...
4 weeks ago
13 minutes

No Compromises
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?
Show more...
1 month ago
10 minutes

No Compromises
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.
Show more...
1 month ago
13 minutes

No Compromises
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.
Show more...
2 months ago
11 minutes

No Compromises
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.

Show more...
2 months ago
15 minutes

No Compromises
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?
Show more...
3 months ago
11 minutes

No Compromises
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 newsletter
Show more...
3 months ago
16 minutes

No Compromises
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?
Show more...
4 months ago
10 minutes

No Compromises
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!
Show more...
4 months ago
15 minutes

No Compromises
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 bit
Show more...
5 months ago
15 minutes

No Compromises
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 newsletter
Show more...
5 months ago
10 minutes

No Compromises
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.
Show more...
6 months ago
11 minutes

No Compromises
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.io
Show more...
6 months ago
11 minutes

No Compromises
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 bit
Show more...
7 months ago
12 minutes

No Compromises
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!
Show more...
7 months ago
8 minutes

No Compromises
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 project
Show more...
7 months ago
10 minutes

No Compromises
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 newsletter
Show more...
8 months ago
14 minutes

No Compromises
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.
Show more...
8 months ago
14 minutes

No Compromises
Two seasoned salty programming veterans talk best practices based on years of working with Laravel SaaS teams.