Here's everything I've ever written, starting all the way back to 2008. Enjoy!


Launching another side-project

Coming to my decision to launch another side-project and key takeaways for working on side-projects.

7 minute read →


A lookbehind at 2023 and lookahead for 2024

A look back at my goals from 2023 and an outline of my goals for 2024.

3 minute read →


4 personal finance tips for Indie Hackers

A review of the personal finance decisions which increased my calm as an Indie Hacker running a successful SaaS.

6 minute read →


A lookbehind at 2022 and lookahead for 2023

A look back at my goals from 2022 and an outline of my goals for 2023.

3 minute read →


Spawning workers based on queue workload

The backstory for building a feature to spawn additional worker servers based on the job queue workload.

5 minute read →


A lookbehind at 2021 and lookahead for 2022

A look back at my goals from 2021 and an outline of my goals for 2022.

4 minute read →


Grinding to $1,000,000 in revenue over 6 years

A review of growing my SaaS product to $1,000,000 in revenue over 6 years, both from a business and personal perspective.

35 minute read →


Building a PHPUnit to Pest Converter in a week

The motivation and execution around building a PHPUnit to Pest Convert in one week.

5 minute read →


A lookbehind at 2020 and lookahead for 2021

A look back at my goals from 2020 and an outline of my goals for 2021.

6 minute read →


Configuration precedence when testing Laravel

A deep dive into the precedence of the various configurations when testing Laravel applications.

6 minute read →


Install PHPMyAdmin on macOS using Docker

Install PHPMyAdmin alongside your local macOS development environment running Apache, MySQL, and PHP using Docker.

2 minute read →


Match a Docker container prompt to your own

Have your Docker container prompt match your local prompt and add a simple emoji so you know where you are.

1 minute read →


Custom command to interact with Docker containers

Interact with Docker containers by name using one simple, custom command.

2 minute read →


Installing Apache, MySQL, and PHP on macOS using Docker

A tutorial for installing Apache, MySQL, and PHP on macOS for local development using Docker.

14 minute read →


Avoiding inheritance in Laravel

Developers often choose to use inheritance. However, in Laravel, this may prove to be a painful decision.

4 minute read →


Shift Database Outage

Last week Shift had a database outage with a data loss of over 600 orders.

4 minute read →


A review of 2019 and goals for 2020

A look back at my goals from 2019 and an outline of my goals for 2020.

6 minute read →


Testing middleware behavior with controller assertions

Test your controller actions use the expected middleware with a simple assertion.

2 minute read →


Streamlining Laravel

A proposal of the top changes I'd like to see which streamline Laravel and a the developer experience.

7 minute read →


Updating Apache, PHP, and MySQL for macOS Catalina

Steps to configure PHP, Apache, and MySQL after upgrading from Mac OS X Mojave to macOS Catalina.

3 minute read →


Installing Apache, PHP, and MySQL on macOS Catalina

This is an update of a previous post to install Apache, PHP, and MySQL on Mac OS for macOS Catalina.

3 minute read →


Crafting maintainable Laravel applications

10 tips for crafting maintainable Laravel applications which leverage features of the Laravel framework while remaining easy to upgrade.

10 minute read →


Maintaining Laravel config files

A review of a recent change to Laravel Shift as it relates to a recommendation for crafting maintainable Laravel applications.

5 minute read →


42 Git Questions Answered

Answers to 42 Git questions asked during a recent training I lead to guide a development team from git init to Git Master.

11 minute read →


TDD, Outside-In, and YAGNI

An outline of developing a feature practicing TDD, Outside-In, and YAGNI to demonstrate the intricacies of these practices working together.

5 minute read →


Why your team should not be upgrading old Laravel applications

Why upgrading your old Laravel applications is a waste of your resources with a pitch for Shift do it instead.

3 minute read →


Testing the most important piece of your application

A guide for testing Stripe Checkout using Laravel Dusk to verify the most important piece of your application - accepting payments.

6 minute read →


Testing makes me a confident developer

Tests provide confidence the code behaves as expected and confidence to refactor the code in the future.

5 minute read →


Laravel - Some Shifty Bits

A review of underutilized Laravel features found by Shift analytics and shared at Laracon US 2019.

10 minute read →


Lowering the time cost of testing existing Laravel applications

Ways to reduce the cost of setting up your existing Laravel application for testing.

5 minute read →


A Shifty Email Bug

I woke up to 56 emails, 17 tweets, 9 Slack messages, and 4 telegrams. It was 7:07 AM.

5 minute read →


Start testing your Laravel applications

An in-depth guide to using HTTP Tests to get started writing tests for your Laravel application.

19 minute read →


Testing validation in Laravel by asserting a Form Request

An alternative approach to testing validation in Laravel which minimizes the number of tests required, while maximizing confidence.

4 minute read →


Pricing is hard. Raising prices.

Some insight in how I price my products and services, and the reasoning behind a recent price increase for Shift.

3 minute read →


Building Products - Building an audience

The second in a series on building products where I review steps done to grow a new audience for my upcoming product Optionality.

4 minute read →


Jekyll to Jigsaw

Some notes on the process of converting the static site generator I use from Jekyll to Jigsaw.

5 minute read →


2018 Lookbehind, Lookahead 2019

A look back at my 2018 dev goals and a lookahead at my dev goals for 2019.

5 minute read →


Building Products - Starting from Square 0

The first in a series of posts on building products from the ground up.

6 minute read →


Updating Apache, PHP, and MySQL for macOS Mojave

Steps to configure PHP, Apache, and MySQL after upgrading from Mac OS X Sierra to macOS Mojave.

3 minute read →


Installing Apache, PHP, and MySQL on macOS Mojave

This is an update of a previous post to install Apache, PHP, and MySQL on Mac OS for macOS Mojave.

4 minute read →


10 practices for readable code

A set of 10 practices for writing code with a focus on improving readability and reducing complexity.

5 minute read →


Laravel by the Numbers

A unique analysis of data from Laravel Shift on over 8,000 Laravel apps.

8 minute read →


Untangling Nested Code

How to identify the different forms of nested code and refactor them to more readable code.

6 minute read →


2018 Dev Goals

A little backstory on the 5 development goals I set to achieve in 2018.

5 minute read →


Fake it by stubbing the mock, dummy

Why differences in test objects are often inconsequential and how abstraction can improve developer happiness.

3 minute read →


Writing Clean Code (Part 2)

Three more practices to write clean code and help improve code readability.

4 minute read →


SMS admin in 8 lines of code

In an effort to provide on the go support for Laravel Shift, I created an SMS based admin using Nexmo and Laravel.

4 minute read →


Committing to the wrong branch

Exploring the various Git commands you can run when you make a commit on the wrong branch.

4 minute read →


References from "Writing Clean Code"

Additional references from my recent post "Writing Clean Code" containing motivation and practices for writing clean code.

1 minute read →


Writing Clean Code

Three simple practices to help write clean code and improve the readability of a codebase.

4 minute read →