My Development Setup in 2024

2 min read

I've rebuilt my development setup many times over the years. Each iteration taught me something about what actually matters for productivity versus what just looks cool in screenshots. Here's where I've landed.

The Core: VS Code

I tried the Vim route. I experimented with JetBrains IDEs. I keep coming back to VS Code. It's fast enough, extensible enough, and has the best language server support for the stack I use most.

Extensions I actually use daily:

  • PHP Intelephense - Better than the built-in PHP support
  • ESLint + Prettier - Autoformatting on save, no debates
  • GitLens - Inline blame and history
  • Thunder Client - API testing without leaving the editor
  • Remote - SSH - Edit files on servers directly

Settings that matter:

{
  "editor.formatOnSave": true,
  "editor.tabSize": 2,
  "editor.wordWrap": "on",
  "files.autoSave": "onFocusChange",
  "editor.minimap.enabled": false,
  "workbench.startupEditor": "none",
  "telemetry.telemetryLevel": "off"
}

I disable the minimap because I've never once found it useful. Startup editor is set to none because I know what project I'm opening.

Terminal: Windows Terminal + Oh My Zsh

On Windows, Windows Terminal with WSL2 gives me a proper Linux environment. Inside WSL, I run Ubuntu with Oh My Zsh.

Zsh plugins that earn their keep:

  • git - Aliases like gst, gco, gp
  • z - Jump to frequently used directories
  • zsh-autosuggestions - Fish-like suggestions from history
  • zsh-syntax-highlighting - Catch errors before hitting enter

.zshrc additions:

# Quick project navigation
alias projects="cd ~/projects"
alias work="cd ~/work"

# Laravel shortcuts
alias pa="php artisan"
alias pam="php artisan migrate"
alias pat="php artisan tinker"

# Git shortcuts beyond the plugin
alias gs="git status"
alias gc="git commit"
alias gp="git push"
alias gl="git pull"

# Docker shortcuts
alias dc="docker-compose"
alias dcu="docker-compose up -d"
alias dcd="docker-compose down"

# Always use bat for cat if available
if command -v bat &> /dev/null; then
    alias cat="bat"
fi

Local Development: Laravel Herd + Docker

For Laravel projects, Herd has replaced my Homestead/Valet setup. It just works—PHP, Nginx, and database management without configuration.

For projects that need specific services (Redis, Elasticsearch, specific database versions), I use Docker Compose:

# docker-compose.yml
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: app
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

volumes:
  mysql_data:

Database Management: TablePlus

I tried many database GUIs. TablePlus is the one I bought a license for. It's fast, clean, and works with everything—MySQL, PostgreSQL, Redis, SQLite.

Features I use constantly:

  • Multiple tabs per connection
  • Quick filter on any column
  • Export query results to JSON/CSV
  • Native support for SSH tunnels

API Testing: Postman Collections

For any API project, I maintain a Postman collection from day one. Environment variables for different servers, saved example responses, and automated tests for critical endpoints.

// Postman test script
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response has correct structure", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData).to.have.property('data');
    pm.expect(jsonData.data).to.have.property('id');
});

Git Workflow

I use the command line for most Git operations, but VS Code's diff viewer is better than anything CLI-based.

Commit conventions:

feat: add user profile endpoint
fix: correct validation on email field
refactor: extract authentication logic to service
docs: update API documentation
chore: update dependencies

Branch naming:

feature/user-authentication
fix/email-validation-bug
refactor/service-layer

What I Stopped Using

  • Multiple monitors: One good monitor beats two mediocre ones
  • Complex shell themes: Slowed down my terminal for no benefit
  • Too many VS Code extensions: Each one adds startup time
  • Desktop apps for everything: Browser tabs are often better

The Honest Truth

Most productivity gains come from knowing your tools deeply, not from having the perfect setup. I've spent too many hours configuring when I should have been building. The setup above works for me, but the best setup is one you stop thinking about.