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


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.

2 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.

5 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.

6 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.

12 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.

8 minute read →


Laravel - Some Shifty Bits

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

12 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.

6 minute read →


Start testing your Laravel applications

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

21 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.

5 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.

3 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.

10 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 →


Starting an online workshop for Git

The backstory for my plan to host an online workshop on Git.

3 minute read →


You changed the code, you didn't refactor the code.

A closer look at the important difference between changing code and refactoring code.

2 minute read →


15 years of amateur trading

I started invested in the stock market when I was 20. Over the past 15 years, I learned these valuable lessons.

12 minute read →


An edge case for cache busting

Most high performance web sites optimize for the sad path. In this article, we address a way to optimize for the happy path too.

4 minute read →


Compensation tips

Advice on compensation, seeking raises, and determining when to change jobs shared from my own experiences.

4 minute read →


Using git bisect

A real world example of using git bisect to find a bug deep in my application code.

4 minute read →


Stop aliasing core Git commands

Some claim aliasing core Git commands is the "Right Way". It's not.

1 minute read →


Lumen is dead. Long live Lumen.

Why I believe Lumen is dying and what the future holds for Lumen.

2 minute read →


Accepting Adam's TDD Challenge

A response to Adam Wathan's challenge that isolated unit testing is incompatible with TDD.

4 minute read →


A closer look at git rebase

For some, git rebase falls on the magic end of the spectrum for Git commands. In this post, we'll take a closer look at git rebase.

3 minute read →