/·Writing · 50 posts
Notes on shipping software.
Practical writing on Laravel, Vue.js, Flutter, Next.js, testing, and the day-to-day of working remote as a fullstack developer.
Laravel
12 posts
Apr 22, 20265 min
Why Laravel Queue Workers Stop — Common Causes and Fixes
Laravel queue workers can quietly stop processing jobs in production. Here's how to spot the common causes — memory limits, restarts, lost DB connections — and fix them.
LaravelPHPQueueApr 15, 20264 min
Laravel N+1 Query Problem: How to Spot and Solve It
The N+1 query problem is the most common performance issue in Laravel apps. Here's how to detect it with the query log, fix it with eager loading, and prevent it from coming back.
LaravelEloquentPerformanceApr 8, 20264 min
Laravel API Resources vs Fractal — Which Should You Use
Laravel API Resources and Fractal both transform models into JSON. Here's how they compare on flexibility, includes, performance, and team ergonomics.
LaravelAPIJSONApr 1, 20265 min
Running Laravel Migrations in Production Without Downtime
Production database migrations need care — locked tables, long ALTERs, and mismatched code can cause outages. Here's a practical playbook for safe Laravel migrations.
LaravelMigrationsDevOpsMar 25, 20264 min
Testing Laravel Apps with Pest: A Practical Setup
Pest gives Laravel tests a cleaner syntax than PHPUnit without losing any power. Here's a practical setup for HTTP, database, and feature tests.
LaravelPestTestingMar 18, 20264 min
Laravel Job Batching for Large Background Tasks
Job batches in Laravel let you run many related jobs as a single unit, with progress tracking and cancellation. Here's when to use them and how to set them up.
LaravelQueueJobsMar 11, 20264 min
Laravel Rate Limiting: Setting Sensible Defaults
Default rate limits in Laravel are easy to set and easy to set wrong. Here's a practical approach to per-route, per-user, and per-IP throttling.
LaravelSecurityAPIMar 4, 20264 min
Connecting Laravel to Multiple Databases the Right Way
Laravel supports multiple database connections cleanly. Here's how to set them up, route models to the right database, and avoid the common pitfalls.
LaravelDatabaseArchitectureFeb 25, 20264 min
Laravel Events vs Jobs — When to Use Each
Events and jobs both let you decouple work in Laravel. Here's a clear way to decide which one fits the task — based on synchrony, fan-out, and retry needs.
LaravelArchitectureEventsFeb 18, 20263 min
Laravel Observers: Cleaner Model Side-Effects
When a model save needs to trigger side-effects, observers are cleaner than overriding boot methods. Here's a working pattern with examples.
LaravelEloquentArchitectureFeb 11, 20265 min
Practical Laravel Caching Strategies for Production
Caching in Laravel is more than putting Cache::remember around things. Here's how to think about cache keys, invalidation, and the layers that actually save you load.
LaravelPerformanceCacheFeb 4, 20263 min
Laravel Form Requests vs Validator Façade — A Comparison
Both form requests and the Validator façade work for validating input in Laravel. Here's when each fits, and how to keep validation logic consistent across a codebase.
LaravelValidation
Vue & Nuxt
10 posts
Jan 28, 20265 min
Vue 3 Composition API: Patterns That Scale
The Composition API is more flexible than the Options API but easier to misuse. Here are the patterns that hold up as components grow.
VueComposition APIJavaScriptJan 21, 20264 min
Migrating from Vuex to Pinia: A Practical Guide
Pinia is now the recommended state library for Vue 3. Here's how to migrate from Vuex incrementally without breaking working code.
VuePiniaVuexJan 14, 20264 min
Nuxt 3 SSR vs SSG: How to Decide for Your Site
Nuxt 3 supports server rendering, static generation, and hybrid modes per route. Here's a clear way to choose for content sites, SaaS apps, and marketing pages.
NuxtVueSSRJan 7, 20263 min
Vue 3 Reactivity Gotchas Every Developer Hits
Vue 3's reactivity is powerful but has rules. Here are the gotchas that catch most teams — destructuring, array indices, and reactivity loss across boundaries.
VueReactivityJavaScriptDec 31, 20253 min
Using Vue Teleport for Modals and Tooltips
Vue's Teleport component renders content into a different DOM location while preserving the component tree. It's the cleanest answer to modals, tooltips, and overlays.
VueUIDec 24, 20254 min
Vue 3 Suspense and Async Components in Practice
Suspense lets you handle async setup() functions and async components with a single fallback boundary. Here's how to use it without overcomplicating things.
VueAsyncSuspenseDec 17, 20254 min
Nuxt Content Module for Markdown-Driven Sites
The Nuxt Content module turns a folder of markdown files into a queryable database. Here's a practical setup for a blog, docs, or content-heavy marketing site.
NuxtContentMarkdownDec 10, 20254 min
Building API Routes with Nuxt 3 Server Handlers
Nuxt 3's server directory turns your Nuxt project into a backend too. Here's how to structure server routes for forms, webhooks, and API proxies.
NuxtAPIServerDec 3, 20253 min
Vue 3 watchEffect vs watch: When to Use Each
Both watchEffect and watch react to changes, but they trigger and track dependencies differently. Here's how to pick the right one each time.
VueReactivityComposition APINov 26, 20254 min
Vue 3 with TypeScript: Common Pitfalls to Avoid
Vue 3 has solid TypeScript support, but a few patterns lose type safety quietly. Here's what to watch for in props, refs, and emits.
VueTypeScript
Flutter
8 posts
Nov 19, 20255 min
Flutter State Management in 2026: Honest Comparison
Provider, Riverpod, BLoC, GetX — Flutter has many state management options. Here's how I actually pick between them for real apps.
FlutterState ManagementMobileNov 12, 20254 min
Flutter Riverpod 2: Practical Patterns for Real Apps
Riverpod 2 with code generation is the most ergonomic way to manage state in Flutter today. Here are the patterns that hold up in production apps.
FlutterRiverpodState ManagementNov 5, 20254 min
Migrating a Flutter App to Null Safety: Lessons Learned
Migrating an existing Flutter codebase to null safety is mostly mechanical — but a few patterns require real thinking. Here's a practical playbook.
FlutterDartNull SafetyOct 29, 20254 min
Flutter for Web — When It Makes Sense (And When It Doesn't)
Flutter Web has real strengths and real costs. Here's how to evaluate whether it fits your project, based on bundle size, SEO, and team needs.
FlutterWebMobileOct 22, 20254 min
Flutter Platform Channels: Calling Native Code Cleanly
When Flutter doesn't have a plugin for what you need, platform channels let you call native iOS or Android code. Here's a clean pattern that scales.
FlutterPlatform ChannelsiOSOct 15, 20253 min
Flutter Hero Animations for Smooth Screen Transitions
Hero animations make screen transitions feel native and intentional. Here's how to use them well — and how to avoid the patterns that look glitchy.
FlutterAnimationUIOct 8, 20254 min
Testing Flutter Apps: Unit, Widget, and Integration
Flutter has three test types that cover different layers. Here's a practical strategy that catches real bugs without over-investing in any single layer.
FlutterTestingOct 1, 20254 min
Flutter API Calls with Dio: Setup and Patterns
Dio is the most widely used HTTP client in Flutter. Here's how I set it up — interceptors for auth, error mapping, and cancellation — without overengineering.
FlutterDioAPI
Frontend
5 posts
Sep 24, 20255 min
Next.js 16 Server Components: A Practical Mental Model
Server components changed how data flows in Next.js. Here's a mental model that makes them click — async pages, streaming, and where 'use client' belongs.
Next.jsReactServer ComponentsSep 17, 20254 min
Next.js Metadata API: SEO Setup That Actually Works
Next.js 16's metadata API gives you typed control over titles, descriptions, Open Graph, and structured data. Here's a complete setup that holds up to real SEO.
Next.jsSEOMetadataSep 10, 20253 min
Next.js Image Optimization: What You Need to Know
Next.js's Image component handles formats, sizes, and lazy loading automatically. Here's what to set, what to skip, and the gotchas.
Next.jsPerformanceImagesSep 3, 20254 min
Organizing Tailwind CSS in Larger Projects
Tailwind starts simple and stays manageable in big codebases — if you set a few conventions early. Here's a structure that scales.
TailwindCSSFrontendAug 27, 20254 min
Practical SEO for Next.js Sites: A Checklist
Most SEO basics are easy to get right in Next.js. Here's a focused checklist that handles the meaningful 80% — without selling snake oil.
Next.jsSEOPerformance
Testing & Tools
5 posts
Aug 20, 20255 min
Playwright vs Cypress in 2026: Honest Trade-Offs
Both Playwright and Cypress are excellent end-to-end testing frameworks. Here's an honest comparison based on real usage in production teams.
TestingPlaywrightCypressAug 13, 20254 min
Jest Mocking Patterns That Save Time
Jest's mocking API is powerful but easy to misuse. Here are the patterns that produce reliable tests without fighting the framework.
JestTestingJavaScriptAug 6, 20254 min
Web Scraping with Puppeteer: Practical Patterns
Puppeteer makes scraping JavaScript-heavy sites possible. Here are patterns for selectors, waiting, anti-bot handling, and keeping it maintainable.
PuppeteerWeb ScrapingAutomationJul 30, 20254 min
End-to-End Testing Strategy for Small Teams
End-to-end tests are valuable but expensive. Here's a strategy for small teams — what to test, how to keep it fast, and when to give up on a flaky test.
TestingE2EDevOpsJul 23, 20254 min
CI/CD Pipelines for Small Dev Teams: A Simple Setup
Small teams don't need elaborate pipelines. Here's a simple GitHub Actions setup that runs tests, type checks, and deploys safely.
CI/CDDevOpsGitHub Actions
Career
10 posts
Jul 16, 20255 min
Working Remote as a Fullstack Developer in 2026
Remote fullstack work has settled into clear patterns by 2026. Here's what actually works — across communication, focus, and career growth.
Remote WorkCareerJul 9, 20255 min
Joining Legacy Codebases Without Burning Out
Joining a legacy codebase is the most common scenario in real-world software work. Here's how to navigate it without losing weeks to confusion or making changes you'll regret.
CareerLegacy CodeOnboardingJul 2, 20254 min
Async Communication Habits That Help Remote Teams
Async communication isn't just "use Slack instead of meetings." Here are the specific habits that make remote teams genuinely productive.
Remote WorkCommunicationJun 25, 20254 min
Estimating Software Work Realistically
Software estimates are infamously bad. Here's a practical approach that gets closer to reality without selling false confidence.
CareerProject ManagementJun 18, 20254 min
How to Review Code Thoughtfully (and Get Better Reviews)
Code reviews can be the most valuable or the most demoralizing part of a workday. Here's how to give and receive them well.
CareerCode ReviewJun 11, 20254 min
Onboarding to a New Project: A Developer's Checklist
The first two weeks on a new project shape the rest. Here's a checklist for asking the right questions early and getting productive faster.
CareerOnboardingJun 4, 20254 min
Working with Non-Technical Stakeholders Without Friction
Most developer career frustration comes from stakeholder mismatches. Here are habits that translate technical reality into terms stakeholders can act on.
CareerCommunicationMay 28, 20254 min
Personal Productivity Habits for Developers
Productivity advice for knowledge workers rarely fits developers' actual work. Here are habits that help with shipping software, specifically.
CareerProductivityMay 21, 20254 min
Choosing a Tech Stack for MVPs: A Pragmatic Approach
Picking a tech stack for an MVP is mostly about your own speed. Here's a practical framework — what to optimize for and what to ignore.
CareerMVPArchitectureMay 14, 20255 min
Where AI Actually Helps in Production Apps
AI features get added to apps for the wrong reasons. Here's where they genuinely improve products — based on real production usage.
AIOpenAICareer