Main Thread

Articles relating to Software Engineering.

Why another side-project

Asking myself why I decided to work on yet another side-project.

5 minute read →


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.

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.

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


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 →


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 →


Starting an online workshop for Git

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

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


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 →


Pivoting from Laravel Shift

Why I chose to pivot from a recent, successful product to a new product.

2 minute read →


Shift Developer Platform

Announcing a platform for developers to build custom Shifts.

1 minute read →


Practicing YAGNI - Show me the code

A write-up of the code samples given during my "Practicing YAGNI" talk at ZendCon 2016.

0 minute read →


Updating Apache, PHP, and MySQL to Mac OS X Sierra

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

3 minute read →


Installing Apache, PHP, and MySQL on Mac OS X Sierra

This is an update for Mac OS X Sierra of a previous post on installing Apache, PHP, and MySQL for Mac OS X.

3 minute read →


Update PHP on Mac OS X

How to upgrade or install a different version of PHP on Mac OS X.

3 minute read →


Laravel Shift - 1,000 applications upgraded

A retrospective on creating Laravel Shift as it reaches its milestone of 1,000 Laravel applications upgraded.

4 minute read →


The Proximity Rule?

A recent coding style I call the "Proximity Rule". Might be called something else, but I still like the code.

2 minute read →


Practicing YAGNI

A summary of my talk at Laracon US 2016 on "Practicing YAGNI".

4 minute read →


From Mentoring to Pair Programming to Coaching

Going beyond mentoring or pair programming with personal development coaching in PHP, JavaScript, Objective-C, TDD, Git, and more.

1 minute read →


Shift: Laravel Automated Upgrade Tool

Introducing Shift - a Laravel framework automated upgrade tool.

1 minute read →


Updating Apache, PHP, and MySQL to Mac OS X El Capitan

Steps to configure PHP, Apache, and MySQL after upgrading from Mac OS X Yosemite to Mac OS X El Capitan.

2 minute read →


Installing Apache, PHP, and MySQL on Mac OS X El Capitan

This is an update for Mac OS X El Capitan of a previous post on installing Apache, PHP, and MySQL for Mac OS X.

3 minute read →


100 days practicing TDD

A retro after practicing test driven development for 100 days.

2 minute read →


Two Weeks of Extreme Programming

Some initial thoughts after two weeks on a new team practicing extreme programming.

2 minute read →


3 minute read →


Removing Comments

A closer look at the practice of removing comments from code.

3 minute read →


Migrating from Octopress to Jekyll

Back to the basics with just Jekyll.

2 minute read →


Are you a Boy Scout?

A look at how the simple practice of "boyscouting" can improve your code.

1 minute read →


Configuring Apache Virtual Hosts on Mac OS X

Tutorial for configuring Apache Virtual Hosts on Mac OS X.

5 minute read →


Installing Apache, PHP, and MySQL on Mac OS X Yosemite

This is an update for Mac OS X Yosemite of a previous post on installing Apache, PHP, and MySQL for Mac OS X.

4 minute read →


The Reading List

A list of books culled over the years on the journey to improve my craft as a software engineer.

1 minute read →


The Debugging Golden Rule

Developers need to remember the Debugging Golden Rule.

2 minute read →


A rockstar developer can't save you

A rockstar developer can't save you. Why? Because the developer gap.

2 minute read →


Letting a successful app fail

Making the difficult decision to let PocketBracket, a successful app, fail.

2 minute read →


Launching my first Kickstarter project

The story behind launching my first project on Kickstarter.

3 minute read →


gh - Open GitHub from the Command Line

A shell script to open GitHub from the command line.

1 minute read →


Recruiter Methods

A closer look at the methods employed by recruiters.

3 minute read →


Convert uniqid() to a timestamp

A proof on how you can convert uniqid() to a Unix timestamp in PHP.

2 minute read →


Journey to become an iOS Developer

A rant on my journey to become a real iOS developer.

2 minute read →


Fixing PHP Errors

A guide to interpreting and fixing PHP errors.

5 minute read →


Common debugging for PHP and MySQL

This post provides a basic checklist for common database debugging when developing with examples in PHP and MySQL.

2 minute read →


Updated: WordPress Multitenacy

An update to my solution for a multitenant WordPress install. With improvements in maintainability and extensibility.

2 minute read →


PHP Namespaces: Avoid use

A look at how use breaks PHP namespaces and why you should avoid using use.

1 minute read →


Why I leave a job

A reflection on the core criteria of a good job after deciding to leave The New York Times.

2 minute read →


Forward-Compatible Code

While updating some legacy code to be backward-compatible I found that forward-compatibility was equally important.

1 minute read →


Benchmark: Octopress vs. WordPress

A follow-up post reviewing the benchmarks performed during my recent migration from WordPress to Octopress.

2 minute read →


Migrating from WordPress to Octopress

A post on my recent migration from WordPress to Octopress as a return to simple blogging and a site with greasy, fast speed.

3 minute read →


A response to "Micro-Optimizations in PHP"

A response to a post on PHP Micro-Optimizations floating around the PHP community recently.

4 minute read →


Why [certain language] developers are better developers

An evaluation of the argument 'Why [certain language] developers are better developers' and why it might be valid.

1 minute read →


Tough Mudder Kentucky

A review of our second Tough Mudder. This course in Kentucky. As well as a quick look at why I am a Tough Mudder.

3 minute read →


Be a Better PHP Developer: Coding Standards

The next installment of a series on how to be a better PHP developer, and better developer in general. This post covers PHP coding standards.

2 minute read →


Install PEAR and PECL on Mac OS X

This post outlines how to install PEAR and PECL on Mac OS X.

1 minute read →


Installing Apache, PHP, and MySQL on Mac OS X

This post outlines installing Apache, PHP, and MySQL on Mac OS X. In addition, I cover configuring Virtual Hosts and installing PHPMyAdmin.

5 minute read →


Updating SVN for Mac OS X

This post outlines updating SVN for Mac OS X. I updated after realizing new apps used SVN 1.7 while Mac OS X Mountain Lion used SVN 1.6.

2 minute read →


In Code: Fashion vs. Style

While talking about technologies and trends, I heard an interesting analogy - the difference between fashion & style as it relates to code.

1 minute read →


WordPress Multitenancy

WordPress Multitenancy - a simple solution to a complex problem. This post covers creating a multitenant architecture for WordPress. Aimed at improving scalability and maintainability.

6 minute read →


Be a Better PHP Developer: The Basics

After reviewing thousands of lines of code over the last few years, I compiled a list of simple tips to help you be a better PHP developer.

2 minute read →


Developer vs. Engineer

After interviewing with some top tech companies, I realized the difference between a developer and an engineer.

1 minute read →


Migrating WordPress to Amazon EC2

After my shared hosting plan expired, I migrated to Amazon EC2. My WordPress site now runs on a micro instance. Free for the next year.

1 minute read →


Louisville PHP User Group

For years I searched for a PHP User Group in Louisville. No more. I'm starting the Louisville PHP User Group and leading our first meeting.

1 minute read →


Another year of PocketBracket: A March Madness App

A look back on 4 years of developing, managing, and marketing PocketBracket - a March Madness app for iOS, Android, and Windows Phone devices.

6 minute read →


Installing and Configuring AWStats on Amazon EC2

Step by step instructions for installing and configuring AWStats on Amazon EC2, as well as a script that automatically configures and updates sites for AWStats.

3 minute read →


Generate user password for CakePHP Auth

A script that hashes password for existing user records when using CakePHP Auth.

1 minute read →


Netflix Feature Request: Multiple Account Profiles

After recently sharing my Netflix account with my parents, I noticed a missing feature I believe is common in shared systems: User Profiles. This post is a letter to Netflix requesting this feature.

2 minute read →


Installing, Configuring, and Deploying I/O Docs

This post covers installing, configuring, and deploying (Heroku) I/O Docs - a live interactive documentation system for RESTful web APIs developed with node.js and redis.

3 minute read →


Unexpected behavior with drop-down option order using minYear, maxYear in CakePHP

A rant after encountering unexpected sort order when using minYear and maxYear attributes to control options in an drop down. The solution involved an undocumented, and in my opinion unnecessary, attribute.

1 minute read →


Tough Mudder Indiana

An article about our first Tough Mudder - the Tough Mudder Indiana at Badlands Off Road Park in late November 2011.

3 minute read →


Installing Node.js, npm, and redis on Mac OS X

After scouring the web for days, this post aims to provide concise, central instructions for installing Node.js, npm, and redis on Mac OS X.

2 minute read →


Tough Mudder Challenge

In two weeks I, as part of team #tigerblood, will accept the Tough Mudder Challenge - a 21 obstacle, 12 miles challenge course.

2 minute read →


Review of PHPMyAdmin 3.4

PHPMyAdmin 3.4 came with many UI changes. After a few months of using PHPMyAdmin 3.4, I'm weighing the pros and cons.

2 minute read →


CakePHP Auth Component loginRedirect Behavior

I came across some interesting behavior with CakePHP's Auth Component. The solution didn't align with the documentation or my understanding of the Auth Component's login redirect. This post covers the problem and my solution.

2 minute read →


My Talk at WordCamp Louisville: Configuring WordPress for Multiple Environments

A follow up post from my talk on Configuring WordCamp for Multiple Environments at WordCamp Louisville 2011.

2 minute read →


Install siege on Mac OS X

I've taken an interested in performance lately and heard about siege. The blog articled I found to install siege failed on the first step. So I decided to write my own in hopes it would help any non sysadmin developer that wanted to install siege on Mac OS X Lion. Although this should work with Leopard and Snow Leopard.

2 minute read →


My Talk at WordCamp Chicago: Configuring WordPress for Multiple Environments

A follow up post about my talk on Configuring WordPress for Multiple Environments at WordCamp Chicago. It includes a link to the original blog post, slides, code samples, and a note about the proposed Unconference Talk.

2 minute read →


Guidance Text using CakePHP’s Form Helper

A quick post on outputting the proper markup for guidance text using CakePHP's Form Helper.

1 minute read →


WordPress Database Connection Error After Migration

Sharing my *moment* with WordPress and its dreaded "Error establishing a database connection" after updating the database.

1 minute read →


Conditional Validation in CakePHP

I needed to perform conditional data validation in CakePHP for a project recently. This is a review of the internal options to do so and my own approach.

3 minute read →


CakePHP not inheriting custom app_controller and app_model

My CakePHP project fell down a rabbit hole earlier after creating a custom app_controller and app_model from something that should have been a no-brainer. Hopefully this helps someone else.

1 minute read →


A Week with Apple TV and Netflix

Some thoughts after a week with the new Apple TV and signing up for Netflix.

4 minute read →


Facebook Places vs Foursquare

A rant on the recent competition between Facebook Places and Foursquare as it relates to intellectual property and the technical industry.

1 minute read →


Electrosis

The process by which energy transfers between electrical devices and us.

2 minute read →


Root Cause Analysis

A rant that revisits the most important and unfortunately most forgotten component of problem solving - root cause analysis.

1 minute read →


PocketBracket 2.0 Update with an iPad Giveaway

For this year's 2010 NCAA Men's Basketball Tournament I updated PocketBracket with a new UI and several user requested features. To build the buzz in the ever competitive app market, I'm running an iPad Giveaway.

5 minute read →


An Active Choice: No Flash Support for iPhone, iPad

I constantly see headlines for articles that just whine about the lack of Flash support on the iPhone OS. This is my believe as to why Flash is not supported in the iPhone OS.

2 minute read →


Routines of a good developer

A reflection on the routines I believe make me a good developer and look for in developers around me.

3 minute read →


iPhone App: LastPlayed

A description of my recent iPhone App - LastPlayed. Including development notes, marketing strategy, future direction, and an invitation for your feedback. Complete with a shameless plug for you to download the app for free.

6 minute read →


My Last IE6 Hack

Today I wrote my last IE6 hack, to overcome a common CSS bug, and I say good riddance to this nearly decade old browser.

2 minute read →


Installing a trampoline on 18′ Hobie Cat

As I didn't find a good DIY guide after a few Google searches, I wrote this post after installing a new trampoline on my 18' Hobie Cat.

6 minute read →


iPhone App: PocketBracket - March Madness

An article about the process of creating my first iPhone Application - PocketBracket: March Madness. I revisit everything from development to marketing, and the story doesn't end there.

6 minute read →


JavaScript Tab Solution using Prototype

A JavaScript tab solution with a nice Scriptaculous Effect that uses semantic markup, CSS, and degrades gracefully.

5 minute read →


JavaScript Accordion using Prototype

So there are several accordion solutions out there. But after reviewing a few, I created this hybrid using lean markup, simple CSS, and the Prototype and Scriptaculous libraries which degrades better than its predecessors.

3 minute read →


The Fallout of Babel

A rant on what diversity, particularly in the development community, costs in respect to advancement.

2 minute read →


JavaScript Cookie Object using Prototype

A Cookie class in JavaScript, using Prototype, allowing multiple data objects to be stored in a single Cookie. Class contains methods for data management and storage.

4 minute read →


CSS Organizer and Minifier

A specification for developing a functional CSS Organization and Minification tool that can be used to manage CSS files.

2 minute read →


"Hello World"

If you didn't guess from the title, this is my first article. What does it contain? A look back at the development of this site, of course. I outline the pieces of this site with general development tips.

6 minute read →


Why ColdFusion is Dead

An explanation on why I never adopted ColdFusion. Including a deeper look at several features, or lack thereof, that drive me nuts and some suggestions on how things could turn around.

7 minute read →