DiscoverNo Compromises
No Compromises
Claim Ownership

No Compromises

Author: Joel Clermont and Aaron Saray

Subscribed: 18Played: 549
Share

Description

Two seasoned salty programming veterans talk best practices based on years of working with Laravel SaaS teams.
145 Episodes
Reverse
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?
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?
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.
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?
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?
It's easy to overcomplicate data modeling, especially when enums, relationships, and future requirements are in play.    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.(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 Would you like us to review your code or application architecture?
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.
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?
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?
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?
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.
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.
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.
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?
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
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?
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!
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
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
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.
loading
Comments