エピソード

  • Rewriting without a map: shipping an MVP from a legacy app
    2025/10/25

    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?
    続きを読む 一部表示
    12 分
  • A composable, versioned toolkit for Laravel projects
    2025/10/11

    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?
    続きを読む 一部表示
    14 分
  • Should you use DTOs in Laravel?
    2025/09/27

    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?
    続きを読む 一部表示
    10 分
  • Sunsetting a company app without loose ends
    2025/09/13

    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.
    続きを読む 一部表示
    14 分
  • When building a UI makes more sense than bloating your seeders
    2025/08/30

    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.
    続きを読む 一部表示
    12 分
  • Blade includes vs components: how we decide
    2025/08/16

    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.

    続きを読む 一部表示
    16 分
  • Changing your mind about when() and unless() in Eloquent
    2025/08/02

    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?
    続きを読む 一部表示
    11 分
  • Finding a code-review style that fits your brain
    2025/07/19

    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
    続きを読む 一部表示
    16 分