My Developer Workflow

A behind-the-scenes look at the tools, systems, and engineering environment behind the work.

Macbook M1UbuntuLazyVimTerminal-firstBackend EngineeringAI-assisted Development

Setup Overview

The hardware and software that powers the daily engineering workflow.

Macbook M1

Macbook M1

Apple M1 chip with 16GB RAM running macOS. Primary machine for daily development, handling everything from code to containers.

Apple Silicon16GBmacOS
Ubuntu Environment

Ubuntu Environment

Linux environment for server-side development. Docker containers, SSH sessions, and backend services run seamlessly.

LinuxDockerSSH
LazyVim

LazyVim

Neovim configured with LazyVim starter template. Full LSP support, Treesitter, Telescope, and a plugin ecosystem tailored for backend engineering.

NeovimLSPTreesitterTelescope
Terminal Workflow

Terminal Workflow

Kitty terminal with ZSH, Starship prompt, tmux for multiplexing. Everything happens in the terminal—Git, Docker, SSH, scripting.

KittyZSHtmuxStarship
CLI Tooling

CLI Tooling

Core CLI tools: Git, Docker, kubectl, jq, ripgrep, fd, lazygit, bat. A curated set that eliminates context switching.

GitDockerlazygitripgrep
Development Environment

Development Environment

Consistent dev environments with Docker Compose, makefiles, and reproducible builds. Minimal setup friction across projects.

Docker ComposeMakefileReproducible
Productivity Tools

Productivity Tools

Arc browser, Obsidian for notes, Linear for issue tracking, Warp for AI-enhanced terminal sessions.

ArcObsidianLinearWarp

Editor

LazyVim — Keyboard-Driven Engineering

The editor is where the craft happens. LazyVim transforms Neovim into an IDE with the speed of Vim and the intelligence of modern LSP.

LazyVim editor screenshot
lazyvim@ ~/code ( main)

LSP active — gopls, tsserver

󰊄 Treesitter — go, ts, python

󰍉 Telescope — find files, grep

Lazygit — staging, blame, log

󱕍 Which-key — leader mappings

Language Server Protocol (LSP)

Real-time diagnostics, auto-completions, go-to-definition, hover information, and code actions for Go, TypeScript, Python, and more. The editor understands your code at the AST level.

Treesitter Syntax

Incremental parsing powered by Treesitter gives accurate, fast syntax highlighting and text object selection based on the syntax tree—not regex patterns.

Telescope Fuzzy Finder

Blazing-fast fuzzy search for files, buffers, git commits, help tags, and live grep across the entire project. The primary navigation interface.

Git Integration

Lazygit integration alongside Neovim's native git tools. Blame, diff, staging, and history inspection without leaving the editor.

Terminal Multiplexing

tmux integration with seamless pane navigation. Running tests, builds, and servers in split panes while editing in another.

Plugin Ecosystem

Curated plugin set via Lazy.nvim: which-key, noice, flash, mini.pairs, oil.nvim, among others. Each selected for deliberate purpose.

Terminal & CLI

Terminal & CLI Workflow

The terminal is the command center. Every engineering task flows through it—from Git operations to container management to server administration.

~/code/project — zsh (kitty)
git log --oneline --graph --decorate

Visual commit history

docker compose up -d

Spin up development services

ssh user@server -i ~/.ssh/id_ed25519

Server access with key-based auth

rg --no-heading -n 'pattern' src/

Fast recursive search with ripgrep

lazygit

Terminal UI for Git operations

kubectl get pods --watch

Monitor Kubernetes pods

Terminal screenshot

ZSH

Shell with completions, syntax highlighting, and history substring search.

Starship Prompt

Minimal, fast prompt with contextual Git, Docker, and language info.

tmux

Terminal multiplexer for session persistence and split-pane workflows.

Kitty

GPU-accelerated terminal emulator with excellent font rendering.

Environment

Operating Systems

A dual-environment setup that leverages the strengths of each OS for development and infrastructure work.

Macbook M1

Macbook M1

Primary Development Machine

Apple M116GB RAM512GB SSDmacOS Sonoma

Daily driver for coding, containers, design, and communication. macOS provides a polished UNIX environment with native Docker support and a vast ecosystem of developer tools.

Ubuntu

Ubuntu

Server & Infrastructure Environment

LinuxDockerSSHCloud VMs

Ubuntu powers the server-side workflow. SSH sessions to cloud instances, container orchestration, and infrastructure management all happen in a terminal-first Linux environment.

Note: The combination provides the best of both worlds: macOS for a polished daily driver with native UNIX tooling, and Ubuntu for server-native development. Tooling is kept consistent across both environments via dotfiles and Docker.

Intelligence

AI-Assisted Development

Practical AI integration into daily engineering work—not for writing code wholesale, but for accelerating the thoughtful parts of development.

Debugging

AI helps narrow down root causes faster by analyzing error patterns, suggesting potential fixes, and pointing to relevant documentation.

Architecture Exploration

Rapidly exploring architectural options, trade-offs, and design patterns before committing to an implementation.

Documentation

Generating docstrings, API documentation, and inline comments from code structure—reducing the friction of documenting as you go.

Refactoring

Identifying refactoring opportunities, suggesting safer type signatures, and generating migration patterns for larger code changes.

Boilerplate Reduction

Automating repetitive code patterns: CRUD endpoints, database schemas, test stubs, and configuration files.

Learning

Exploring unfamiliar codebases, understanding library patterns, and getting contextual explanations without context-switching to browser tabs.

AI is a thinking amplifier, not a replacement for engineering judgment. Every suggestion is reviewed, understood, and adapted before it reaches production.

Philosophy

Workflow Principles

A set of engineering principles that guide tooling choices, workflow design, and daily development habits.

1

Keyboard-First

Minimize mouse dependency. Vim motions, tmux keybindings, and CLI tools keep hands on the keyboard and flow uninterrupted.

2

Reproducibility

Docker Compose, dotfiles, and makefiles ensure any environment can be recreated in minutes. No manual setup steps.

3

Automation Over Repetition

If a task is done more than twice, script it. CI/CD, git hooks, aliases, and custom scripts eliminate repetitive manual work.

4

Minimal Context Switching

The terminal and editor handle Git, Docker, file management, and code. Fewer tools means fewer mental context switches.

5

Clean Developer UX

Fast feedback loops, readable output, consistent tooling across projects. Developer experience is treated as a first-class concern.

6

Simplicity

Choose the right tool for the job. Avoid over-engineering workflows. A simple, well-understood toolset beats a complex one every time.