Focus on the Bottleneck
Don't waste your time optimizing non-constraints. Improvements made anywhere other than the bottleneck are a waste of effort.
Coalesce Names Alphabetically
When naming things with multiple segments, order segments so names cluster naturally in sorted lists. Put the most general segment first and the most specific last.
Colocate Docs With Code
Store your application documentation with your source code in the same git repository.
Complete or Credit
When facing outside resistance to a task, ask a simple question: do you want the outcome, or do you want recognition for your accomplishment? The answer should guide how public, formal, and political your approach needs to be.
Prefer Data Driven Tests
Tests should be defined by data, not logic. Structure test cases around inputs, system state, and expected outcomes using data files (ex: JSON, YAML, XML) so the test code itself stays fixed and simple and new tests can be added by simply adding new data entries.
Effective Execution Is Not Success
Effective execution only tells you that you are succeeding at what you are trying to do. It does not prove that what you are trying to do is worth doing.
Improve in the Right Order
Most teams improve systems backwards. Question the requirements, delete what should not exist, then simplify, accelerate, and automate only what remains.
Eliminate Long Lived Secrets
The goal shouldn’t be to secure secrets, it should be to not need them at all. If your application depends on long lived credentials you’ve already failed.
POC vs MVP
A POC cuts corners but not scope. An MVP cuts scope but not corners.
Practice Programmer Virtues
Virtuous laziness optimizes for total future effort, not immediate personal effort. Reduce the system, anticipate the pain, and own the work you leave behind.
The Solution Paradox
Most solutions create new problems. Be thoughtful before adding complexity.
Solve in the Right Lane
People, process, and technology are parts of the same operating model, but they are not interchangeable fixes. Diagnose the lane where the problem lives before choosing the solution.
Name Your HTTP Clients (User Agents)
Always use a descriptive User-Agent when making HTTP requests. This helps with observability, debugging, and understanding traffic patterns even when authentication fails.