My Development Workflow in 2022
In this article, I'll share my personal development workflow in 2022 - the tools, apps, and settings I use daily to maximise productivity and efficiency. This includes my favourite IDE and its theme, terminal aliases that save time, and my database setup.
My Workstation
After making the transition to Apple Silicon last year, I recently switched to a 14-inch MacBook Pro with an M1 Max (10-core CPU, 32-core GPU), 64GB RAM, and a 2TB SSD. I'm enjoying the performance boost, and the 14-inch screen is a nice size when on the go.
For years I had a single 27-inch 5K monitor and never believed in needing two displays. A few weeks ago, I purchased a second identical display and felt a massive productivity boost. If you're in the same situation with one monitor feeling like enough, I highly recommend trying two - I can't live without it now.
My IDE
My day-to-day workflow involves Laravel, Vue, and Tailwind, so I use PHPStorm as my primary IDE. I've used it for a few years and found it to be great for my needs. I've tried VS Code but always come back to PHPStorm.
I use GitHub's light theme with colours customised similar to the "InspiredGitHub" theme for Sublime Text. As much controversy as there is around light themes, I find them easier on the eyes than dark themes. I also use the MonoLisa font - a paid font but worth the money.
I utilise the Laravel Idea plugin for PHPStorm, a paid plugin that's extremely worth it. It provides useful features like code completion, code generation, and much more. It's been a great tool for Laravel development.
Taking Notes
I've tried dozens of note-taking apps over the years like Trello and Linear for todos, but struggled to remain consistent with them. I moved back to pen and paper and loved it - the ease of having notes in front of you rather than loading an app is great.
Then I discovered Remarkable, a digital note-taking device similar to an iPad but focused on note-taking. I've been using it to create "notepads" for work and personal projects.
Terminal
I've tried many terminal emulators over the years, from Warp to iTerm2, but I've always come back to the default macOS terminal. It's the most lightweight and reliable.
I pair my terminal with Fig, which adds IDE-style autocompletion. It's a great tool for quickly navigating folders and running commands with descriptions.
Aliases
I have a few aliases I use daily to speed up my workflow:
alias pa='php artisan'
alias pint='./vendor/bin/pint'
alias nah="git reset --hard && git clean -df"
db() {
if [ $# -eq 0 ]; then
[ ! -f .env ] && {
echo "No .env file found."
return 0
}
DB_HOST=$(grep DB_HOST .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_PORT=$(grep DB_PORT .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_DATABASE=$(grep DB_DATABASE .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_USERNAME=$(grep DB_USERNAME .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_PASSWORD=$(grep DB_PASSWORD .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_URL="mysql://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}"
fi
if [ $# -eq 1 ]; then
DB_URL="mysql://127.0.0.1/$1"
fi
open $DB_URL
}The db alias quickly opens the database for my current project in TablePlus, automatically reading the local .env file. The nah alias quickly resets my git repository if I've made changes I don't want to keep.
I've also configured JetBrains Toolbox to open from the terminal, so I can quickly open IDEs using pstorm or idea:
alias pstorm="~/Documents/Development/CLI/phpstorm"
alias idea="~/Documents/Development/CLI/idea"For projects that need Java 8 while my machine runs the latest version:
alias java8='/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home/bin/java'Databases
While many look towards MongoDB and other NoSQL databases, I've always been a fan of MySQL and have used it for years.
I use DBngin to locally host databases, as it's isolated which makes it easier to delete and update without random files everywhere. I pair this with TablePlus to manage databases - a great GUI for MySQL.
I also use SingleStore for production databases, as it supports the MySQL protocol and is suited for data-intensive applications requiring fast aggregation and scalability. I use their Docker image to host SingleStore locally for development, allowing me to tune queries and test locally before deploying. It works amazingly well on Apple Silicon.
Other Tools
Debugging
I use Spatie's Laravel Ray to debug Laravel applications. It's a great tool for debugging and profiling, easy to use, and provides useful information.
Testing
Prior to this year, I saw zero appeal in testing - I felt if I was testing in the browser, I didn't need automated tests. However, after purchasing Spatie's Testing Laravel course, I realised how easy they were to set up and the confidence they gave when pushing to production. It provides assurance that my application works as expected if I break something when changing code.
I currently use PHPUnit for testing, as it's the default framework for Laravel and I'm still learning. I haven't tried PEST yet but have heard great things.
SSH
I use 1Password to manage SSH keys - it's also great for managing passwords and sensitive information. I like that I can store SSH keys in 1Password and use them across devices while still locking it down to a physical hardware key.