Developer Experience Baseline for Solo Polyglot Development
Note: these articles are auto generated from my Obsidian notebook by Claude
Modern DX tooling in 2025 favors unified, high-performance solutions over traditional tool stacks. For solo developers working with Python, JavaScript/TypeScript, and Rust, discover how Ruff + Pyright + Biome.js provides the optimal balance of performance, simplicity, and comprehensive coverage.
Executive Summary
For a solo developer working primarily with Python, JavaScript/TypeScript, and Rust, Ruff + Pyright + Biome.js provides the optimal balance of performance, simplicity, and comprehensive coverage. This baseline enables a "gentle introduction" approach with permissive initial settings that progressively tighten as habits form.
Tool Selection Matrix
Python Development Stack
Linting/Formatting: Ruff (unanimous winner)
- 10-100x faster than Black+isort+flake8 combined
- Single tool replaces 6+ traditional tools
- Drop-in Black compatibility (>99.9%)
- Zero configuration with sensible defaults
Type Checking: Pyright (for solo developers)
- 3-5x faster than mypy on large codebases
- Superior type inference without annotations
- Native VS Code integration via Pylance
- Switch to mypy only if heavy Pydantic usage requires plugin features
Testing/Coverage: pytest + coverage.py
- coverage.py directly (skip pytest-cov wrapper)
- mutmut for mutation testing on critical modules only
- Target: 60% → 70% → 80% coverage progression
Security: pip-audit + Semgrep + Gitleaks
- pip-audit replaces Safety (licensing changes)
- Semgrep over Bandit for multi-language support
- Gitleaks for secrets scanning (2-5 seconds overhead)
JavaScript/TypeScript Stack
All-in-One: Biome.js
- 80% faster than ESLint + Prettier
- Single configuration file
- Excellent VS Code integration
Rust Integration
Standard tooling with Python-friendly configs:
- rustfmt with 88-character line width (matching Black)
- cargo-watch, cargo-outdated for familiar workflows
- Maturin for Python-Rust bridges
Progressive Configuration Examples
Stage 1: Minimal Baseline (Week 1)
# pyproject.toml
[tool.ruff]
select = ["F", "E4", "E7", "E9"] # Critical errors only
line-length = 88
fix = true
# pyrightconfig.json
{
"typeCheckingMode": "basic",
"reportMissingImports": "warning"
}
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.8
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
Time impact: 5-10 seconds per commit
Stage 2: Enhanced Quality (Week 3)
# pyproject.toml additions
[tool.ruff]
select = ["F", "E", "W", "B", "I"] # Expand rule coverage
ignore = ["E501"] # Still allow long lines initially
[tool.coverage.run]
source = ["."]
omit = ["*/tests/*", "*/venv/*"]
branch = true
[tool.coverage.report]
fail_under = 70 # Enforce minimum coverage
Add to pre-commit:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.22.1
hooks:
- id: gitleaks
Stage 3: Production Ready (Week 5+)
[tool.ruff]
select = ["ALL"]
ignore = ["D", "ANN", "TD", "FIX"] # Skip docs/annotations initially
line-length = 88
[tool.ruff.mccabe]
max-complexity = 10
# biome.json for JS/TS
{
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"complexity": {
"noExcessiveCognitiveComplexity": "error"
}
}
}
}
Phased Adoption Plan
Week 1-2: Foundation (4 hours setup)
- Install Ruff, configure with minimal rules
- Set up basic pre-commit hooks
- Create pyrightconfig.json with "basic" mode
- Target 60% test coverage
Week 3-4: Enhancement (2 hours/week)
- Add Gitleaks to pre-commit
- Configure pip-audit for weekly runs
- Expand Ruff rules gradually
- Increase coverage target to 70%
Week 5-6: Optimization (1 hour/week)
- Add Biome.js for JS/TS projects
- Configure Semgrep with basic Python rules
- Set up mutation testing for core modules
- Target 80% coverage
Month 2+: Maturity
- Enable stricter Ruff rules (complexity, naming)
- Add Vulture for dead code detection
- Implement full polyglot pre-commit suite
- Automate dependency updates
Maintenance Automation
#!/bin/bash
# weekly-maintenance.sh
pip-audit --fix
pip-review --auto
pre-commit autoupdate
ruff check . --fix
coverage report --fail-under=80
Documentation Standards
Use this minimal structure:
project/
├── README.md # Quick start, badges, structure
├── CONTRIBUTING.md # Dev setup, style guide
├── .github/
│ └── ISSUE_TEMPLATE/
└── docs/
└── decisions/ # Architecture Decision Records
Risk Mitigation
Tool Lock-in: Pin tool versions in requirements-dev.txt
ruff==0.1.8
pyright==1.1.339
biome==1.5.0
False Positives: Start with permissive configs, use inline suppressions:
# ruff: noqa: F401 # Temporary import for side effects
Performance Degradation: Monitor pre-commit times:
# Skip expensive hooks when needed
SKIP=mypy,pytest git commit -m "hotfix"
Migration Fatigue: Adopt one tool at a time, allow 2 weeks per tool for habit formation.
The Bottom Line
This baseline provides enterprise-grade quality with minimal overhead. The key is progressive adoption: start with Ruff's speed and simplicity, gradually add type checking and security scanning, then expand to polyglot tooling. Total time investment: 8-10 hours over 6 weeks, with 30-60 minutes weekly maintenance thereafter. The unified toolchain approach (Ruff + Biome) reduces context switching and configuration complexity, making it ideal for solo developers who need professional results without dedicated DevOps resources.
This article was generated with the assistance of AI and carefully reviewed by our editorial team.